Server

쿠버네티스 (k8s) Core Dns란?

dev-hahm 2025. 6. 25. 21:29

쿠버네티스를 사용하다보면 파드(pod)끼리 ip로 연결 하는게 아닌 도메인명으로 통신하는 설정을 많이 보게 됩니다.

이 도메인은 뜬금없이 어디서 나타났는지 궁금하기도 하죠. 쿠버네티스는 자기만의 DNS서버를 구동합니다.

kube-system이란 네임스페이스에 보면 coredns라는 파드가 보이게 됩니다.
이 파드들이 쿠버네티스 내부에서 DNS서버 역할을 하게 됩니다.

 

A라는 파드가 B라는 파드에 요청을 보내는경우
<B-pod-servicename>.<namespace>.svc.cluster.local 이라는 도메인명으로 요청을 보내게 되면 됩니다.

같은 네임스페이스에 있는경우는 줄여서 <B-pod-servicename>만으로도 가능합니다.

 

좀 더 깊이 들여다보면 A라는 파드에 접근해서 /etc/resolv.conf를 열어보면 알 수 있습니다.

해당 파일은 지정된 클러스터 DNS로 전달되게 셋팅되어 있습니다.

 

그리고  Corefile이라고 CoreDNS에 주요 설정 파일이 있는데 이것도 한번 열어보면 이해하는데 도움이 많이 됩니다.

보통 열어보면 내용은 아래와 같습니다.

kubectl -n kube-system get configmap coredns -o yaml

열어보는 명령어니까 참고하시면 됩니다.

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

위 플러그인에 설명을 조금 드리면

 

kubernetes : 쿠버네시트에 서비스 이름을 ip로 변환

forward : 외부 dns 서버로 요청을 전달

cache : dns 응답 캐싱

health, ready : coreDNS상태 체크를 위한 엔드포인트 제공

reload 설정 변경 시 자동 재로딩

prometheus : 메트릭 수집용 엔드보인트 제공

여기에 보통 log, debug 를 추가해서 coredns에 로그를 보기도 합니다. (제가 그러고 있네요)

 

이 내용을 이해하고 있어야 나중에 작성할 파드들에 연결문제를 파악하기 수월합니다.