kok202
쿠버네티스 입문 - 10 - 쿠버네티스 DNS

2020. 4. 8. 23:49[정리] 기능별 개념 정리/Kubernetes

쿠버네티스 DNS

파드 사이에 통신할 때 IP 가 아닌 도메인을 사용할 수 있다.

특정 서비스에 접근하는 도메인은 "서비스이름.네임스페이스.svc.cluster.local" 이다.

특정 파드에 접근하는 도메인은 "파드IP주소.네임스페이스.pod.cluster.local" 이다.

하지만 파드의 IP 를 도메인에 포함시키면 도메인을 사용할 이유가 없다.

DNS 를 클라이언트나 API 게이트웨이가 호출할 서비스를찾는 서비스 디스커버리 용도로 사용할 수 도 있다.

 

 

 

DNS 질의 구조

DNS 도 쿠버네티스 클러스터 안에서 파드로 실행되는 것이다.

파드마다 도메인이름을 어떤 순서로 찾을지 설정할 수 있다.

이 때 .spec.dnsPolicy 를 사용한다.

 

.spec.dnsPolicy 는 다음 과 같은 타입을 가질 수 있다.

  • Default : 파드가 실행중인 노드의 DNS 설정 사용한다.
  • ClusterFirst : 외부 DNS 인 업스트립 DNS 에 도메인 이름을 질의한다. (ex. www.example.com)
  • ClusterFirstWithHostNet : 파드를 호스트 모드로 실행할 때 반드시 사용해야하는 필드.
  • None : 클러스터 안의 DNS 설정을 무시하고 .spec.dnsPolicy 하위 필드로 DNS 설정을 한다.

 

 

 

Kube-dns 의 질의 구조

컨테이너를 3개 사용한다.

  • Kubedns : 쿠버네티스 DNS 변경을 감지하는 컨테이너
  • Sidecar : dnsmasq 를 헬스체크 하는 컨테이너
  • Dnsmasq : DNS 캐시 컨테이너

 

 

 

CoreDNS 의 질의 구조

모듈 형식이며 kube-dns 와는 다르게 컨테이너를 하나 사용한다.

Corefile 이라는 설정 파일을 이용하여 DNS 설정을 하며 자체의 설정 파일 형식을 가진다.

플러그 인으로 새로운 기능을 추가할 수 있는 유연한 구조다.

 

 

 

파드 안에 DSN 직접 설정하기

파드안에 DNS 를 사용자가 직접 설정할 수도 있다.

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: dns-test
spec:
  containers:
  - name: dns-test
    image: arisu1000/simple-container-app:latest
  dnsPolicy: ClusterFirst
  dnsConfig:
    nameservers:
    - 8.8.8.8
    searches:
    - default.svc.cluster.local
    - example.com
    options:
    - name: name01
      value: value01
    - name: name02

.spec.dnsConfig 필드에 설정한 값은 파드의 /etc/resolv.conf 에 추가된다.