DevOps/Kubernetes

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter16. 쿠버네티스 DNS

noahkim_ 2021. 7. 22. 02:32

16.1 쿠버네티스 DNS

 

클러스터 안에서만 사용하는 DNS 설정 가능.

파드 사이에 통신 시 도메인 사용 가능.

 

IP 통신 설정시 IP 대역이 다를 수정해야 하므로 번거로움

 

16.2 클러스터 안에서 도메인 사용하기

 

내부 도메인은 서비스와 파드를 대상으로 사용하며 일정한 패턴이 있음.

 

  • 서비스 접근 :’서비스이름.네임스페이스이름.svc.cluster.local’처럼 구성함.
  • 파드 접근 : ’파드IP주소.네임스페이스이름.pod.cluster.local’처럼 구성함.
    단 IP주소를 사용하면 의미가 없음
    그러므로 파드 생성 시, 호스트네임과 서브 도메인을 설정해서 사용하기

.spec.template.spec.hostname

.spec.template.spec.subdomain 설정 시, ’호스트네임이름.서브도메인이름.네임스페이스이름.svc.cluster.local’처럼 구성함.

 

16.3 DNS 질의 구조

 

DNS또한 클러스터 안에서 파드로 실행함.

파드마다 안에서 도메인 이름을 어떤 순서로 질의할지 설정 가능.

.spec.dnePolicy 필드 사용

 

Default : 파드가 실행 중인 노드의 DNS 설정을 불러와서 사용

ClusterFirst : cluster.local 같은 클러스터 안 도메인 형식과 일치하지 않는 도메인 질의 시 외부 DNS에 질의함

ClusterFirstWithHostNet : 파드를 호스트 모드로 사용하겠다고 설정할 시 사용하기

None : 파드가 클러스터 안 DNS 설정 무시

 

  1. kube-dne의 질의 구조

  • Kube-dns : kubedns, dnsmasq, sidecar 컨테이너로 구성.
    kubedns는 쿠버네티스 마스터를 바라보다가 변경사항이 있을 시 DNS 데이터를 변경함.
    sidebar 컨테이너는 kubedns와 dnsmasq 컨테이너의 헬스 체크를 실행함.

    다른 파드에서 도메인 이름 조회 시, kube-dns 파드에 질의해서 해당 도메인의 IP를 확인함.
    이때 Kube-dns 파드 안 DNS 캐시인 dnsmasq 컨테이너로 질의함

  • kube-dns 파드에 도메인 이름을 질의했을 떄 원하난 결과를 찾을 수 없으면 사용자 정의 DNS에 질의함
    사용자 정의 DNS에도 원하는 결과를 찾을 수 없으면 다시 업스트림 DNS에 질의함

   2. CoreDNS의 질의 구조

 

Corefile 이라는 CoreDNS 자체의 설정 파일 형식에 맞춰서 DNS 설정함.

 

16.4 파드 안에 DNS 직접 설정하기

 

  • spec.dnsConfig
     .nameservers : 파드에서 사용할 DNS IP
     .searches : DNS 검색할 기본 도메인 이름
     .options : DNS관련 옵션 설정가능 (name=value 설정)

    .spec.dnsConfig 설정한 값은 /etc/resolv.conf 추가됨.