자격증 학원 › CKA › 서비스 · 네트워킹

강의 20 / 28 · 약 20분

클러스터 DNS 와 CoreDNS

서비스·파드의 DNS 이름 규칙, 파드의 resolv.conf, CoreDNS 의 배치와 Corefile, 이름 해석이 안 될 때 확인 순서.

이 강의를 마치면

  • 서비스 FQDN 과 짧은 이름이 어떻게 해석되는지 설명할 수 있다
  • CoreDNS 디플로이먼트·서비스·ConfigMap 을 찾아 상태를 확인할 수 있다
  • DNS 장애의 흔한 원인을 좁힐 수 있다

이름 규칙

대상DNS 이름
서비스<서비스>.<네임스페이스>.svc.cluster.local
Headless 서비스 뒤의 StatefulSet 파드<파드>.<서비스>.<네임스페이스>.svc.cluster.local (예. web-0.nginx.default.svc.cluster.local)
파드(IP 기반)10-244-1-5.<네임스페이스>.pod.cluster.local

같은 네임스페이스면 db-svc, 다른 네임스페이스면 db-svc.data 만 써도 됩니다. 파드의 /etc/resolv.conf 를 보면 이유가 나옵니다.

kubectl exec web -- cat /etc/resolv.conf
# search default.svc.cluster.local svc.cluster.local cluster.local
# nameserver 10.96.0.10          ← kube-dns 서비스 IP
# options ndots:5

search 목록을 차례로 붙여 조회하기 때문에 짧은 이름이 됩니다. nameserver 는 kube-system 의 kube-dns 서비스 IP 이고, 그 뒤에 CoreDNS 파드가 있습니다.

CoreDNS 구성 요소

kubectl get deploy coredns -n kube-system        # 보통 레플리카 2
kubectl get pods -n kube-system -l k8s-app=kube-dns
kubectl get svc kube-dns -n kube-system           # 10.96.0.10, 53/UDP 53/TCP
kubectl get ep kube-dns -n kube-system            # CoreDNS 파드 IP 가 있어야 한다
kubectl get cm coredns -n kube-system -o yaml     # Corefile
.:53 {
    errors
    health
    ready
    kubernetes cluster.local in-addr.arpa ip6.arpa {   ← 클러스터 도메인
       pods insecure
       fallthrough in-addr.arpa ip6.arpa
    }
    forward . /etc/resolv.conf                         ← 바깥 이름은 노드의 DNS 로
    cache 30
    loop
    reload
}

확인하는 법

kubectl run tmp --rm -it --image=busybox:1.37 --restart=Never -- nslookup kubernetes.default
kubectl run tmp --rm -it --image=busybox:1.37 --restart=Never -- nslookup db-svc.data.svc.cluster.local

정상이면 Name: … Address: 10.96.x.x, 실패하면 두 가지 중 하나입니다.

출력뜻
** server can't find …: NXDOMAINDNS 서버는 응답했지만 그런 이름이 없다 → 서비스 이름·네임스페이스 오타
;; connection timed out; no servers could be reachedDNS 서버에 닿지 못했다 → CoreDNS 가 죽었거나, NetworkPolicy 가 53 번 egress 를 막았다

DNS 장애 점검 순서

  1. CoreDNS 파드가 Running·Ready 인가? (레플리카 0, CrashLoop, 이미지 오타, Pending)
  2. kube-dns 서비스의 엔드포인트가 채워져 있나?
  3. CoreDNS 로그: kubectl logs -n kube-system -l k8s-app=kube-dns
  4. Corefile 을 누가 고쳤나? (cluster.local 오타, forward 대상)
  5. 그 파드에 egress NetworkPolicy 가 있다면 UDP·TCP 53 을 허용했나?
  6. 파드의 dnsPolicy 가 Default 로 되어 있지 않나?(그러면 클러스터 DNS 를 안 씀. 기본값은 ClusterFirst)

⌨️ 직접 해 보기

브라우저 실습 터미널에서 풀고 자동 채점을 받습니다.

✅ 확인 문제

과정 목차