본문 바로가기
DevOps/cilium

[Cilium Study] CoreDNS, LocalNodeDNS

by 서어켜엉 2025. 8. 3.

 

CoreDNS란?

CoreDNS는 Kubernetes Cluster의 기본 DNS 서버 역할을 한다.

K8s의 Service나 Pod 간 통신에서 myservice.mynamespace.svc.cluster.local 같은 FQDN (Fully Qualified Domain Name)을 해석할 때 사용된다.

 

주요특징

  1. 클러스터 내부 DNS 제공
    • 각 Pod의 /etc/resolv.conf에 지정된 DNS 서버 IP는 보통 kube-dns(즉, CoreDNS ClusterIP Service) 이다.
    • Pod → CoreDNS → 외부 DNS 서버(필요 시)로 질의가 전달된다.
  2. 서비스 디스커버리
    • ClusterIP 서비스 이름을 DNS 레코드로 관리합니다.
    • 예: nginx.default.svc.cluster.local → 10.96.0.15 (ClusterIP)
  3. ConfigMap을 통한 설정
    • /etc/coredns/Corefile 또는 쿠버네티스 ConfigMap을 수정해 캐싱, 포워딩, stub domain 등을 설정할 수 있습니다.

한계

모든 Pod가 CoreDNS Pod(보통 Kube-system 네임스페이스)에 질의를 보내므로, 노드 수와 Pod 수가 많아지면 CoreDNS의 네트워크 부하와 지연(Latency)이 증가할 수 있다.

 

NodeLocal DNSCache (NodeLocalDNS) 란?

NodeLocal DNSCache는 각 노드에서 CoreDNS로 가는 DNS 트래픽을 로컬에서 캐싱하고, CoreDNS에 대한 부하를 줄이기 위해 도입된 추가 구성 요소이다. CoreDNS 와 함께 사용한다. (대체 용도 아님)

 

동작 방식

  1. DaemonSet으로 각 노드에 DNS 캐시 Pod 배포
    • 169.254.20.10 같은 로컬 IP를 사용해 Pod들이 질의하도록 /etc/resolv.conf를 수정한다.
    • Pod → NodeLocalDNS (로컬 캐시) → CoreDNS → 외부 DNS 순으로 질의한다.
  2. 장점
    • CoreDNS 트래픽 감소 → 성능 향상 및 안정성 증가
    • 노드 로컬 캐시를 활용하므로 네트워크 Hop 감소 → DNS 응답 속도 단축
    • CoreDNS Pod나 네트워크에 일시적인 문제가 있어도 캐시로 대응 가능

비교 요약

  CoreDNS NodeLocalDNS
배포 위치 2~3개의 Pod(Deployment) 각 노드에 1 Pod (DaemonSet)
주요 역할 클러스터 DNS 서버 노드 로컬 DNS 캐시
장점 클러스터 서비스 디스커버리 제공 CoreDNS 부하 감소, 응답 속도 향상
트래픽 경로 Pod -> CoreDNS -> 외부 DNS Pod -> NodeLocalDNS -> CoreDNs -> 외부 DNS

  

 

'DevOps > cilium' 카테고리의 다른 글

[Cilium Study] Pod간 통신 & k8s 외부 노출 2  (0) 2025.08.09
[Cilium Study] Pod간 통신 & k8s 외부 노출 1  (1) 2025.08.09
[Cilium Study] Masquerading  (4) 2025.08.03
[Cilium Study] Routing  (6) 2025.08.02
[Cilium study] IPAM 모드  (2) 2025.07.31