[CKA] Kubernetes의 CoreDNS

CoreDNS Deployment, kube-dns Service와 Corefile이 클러스터 DNS를 제공하는 구조를 정리합니다.

CoreDNS는 kube-system 네임스페이스에서 Pod로 실행되며, 보통 kube-dns라는 ClusterIP Service가 53번 TCP와 UDP 포트를 제공합니다. kubelet은 Pod의 DNS 서버 주소와 검색 도메인을 구성해 Service 이름을 조회할 수 있게 합니다.

Corefile 전달 구조

CoreDNS의 설정은 coredns ConfigMap의 Corefile에 저장됩니다. Deployment는 이 ConfigMap을 볼륨으로 Pod의 /etc/coredns에 마운트하고 -conf /etc/coredns/Corefile 인자로 읽습니다.

kubectl get pods,svc -n kube-system
kubectl describe pod -n kube-system <coredns-pod>
kubectl get configmap coredns -n kube-system -o yaml

Corefile의 kubernetes cluster.local 항목은 클러스터 DNS 영역을 나타냅니다. forward . /etc/resolv.conf는 클러스터 영역 밖의 질의를 상위 DNS 서버로 전달합니다. cache, loop, reload, loadbalance 같은 플러그인도 함께 구성할 수 있습니다.

.:53 {
    errors
    health
    ready
    kubernetes cluster.local in-addr.arpa ip6.arpa
    forward . /etc/resolv.conf
    cache 30
    loop
    reload
    loadbalance
}

실습에서는 CoreDNS Pod, kube-dns Service, Corefile 경로, ConfigMap 마운트와 cluster.local 영역을 차례로 확인합니다.