이번 블로그에서는 CoreDNS에 부하를 해결하기 위한 도구인 NodeLocal DNSCache에 대한 글을 작성해보려합니다.
NodeLocal DNSCache란?
Kubernetes 환경에서는 Pod가 다른 Service나 외부 도메인과 통신할 때마다 DNS 조회가 발생합니다. 일반적으로 모든 DNS 요청은 CoreDNS(kube-dns)를 거쳐 처리되는데, 클러스터 규모가 커질수록 DNS 요청이 집중되어 지연 시간이 증가하거나 CoreDNS에 부하가 발생할 수 있습니다.
이러한 문제를 해결하기 위해 Kubernetes에서는 NodeLocal DNSCache를 제공합니다.
NodeLocal DNSCache는 각 노드(Node)에 DaemonSet 형태로 DNS 캐시 서버를 배포하여, Pod의 DNS 요청을 먼저 로컬에서 처리하도록 합니다. 이미 조회했던 DNS 정보는 캐시(Cache)에 저장되어 동일한 요청이 발생하면 CoreDNS까지 전달하지 않고 즉시 응답할 수 있습니다. 이를 통해 DNS 응답 속도를 향상시키고 CoreDNS의 부하를 줄여 클러스터 전체의 네트워크 성능을 개선할 수 있습니다.
NodeLocal DNSCache 동작 방식

기존에는 모든 Pod가 CoreDNS의 ClusterIP로 직접 DNS 요청을 전송했습니다.
Pod
↓
CoreDNS (ClusterIP)
↓
외부 DNS
하지만 NodeLocal DNSCache를 적용하면 각 노드에 실행 중인 DNS Cache가 먼저 요청을 처리합니다.
Pod
↓
NodeLocal DNSCache
├─ Cache Hit → 즉시 응답
└─ Cache Miss → CoreDNS → 외부 DNS
즉, 이러한 방식으로 불필요한 DNS 조회를 줄일 수 있습니다.
- Cache Hit : 이미 조회했던 DNS 정보라면 즉시 응답
- Cache Miss : CoreDNS로 전달하여 조회한 뒤 캐시에 저장
NodeLocal DNSCache의 장점
NodeLocal DNSCache를 사용하면 다음과 같은 이점을 얻을 수 있습니다. 특히 많은 Pod가 동시에 실행되는 환경에서는 CoreDNS 병목 현상을 완화하는 데 큰 도움이 됩니다.
- DNS 조회 속도 향상
- CoreDNS(kube-dns) 부하 감소
- DNS 요청으로 인한 네트워크 트래픽 감소
- UDP 기반 DNS 요청의 패킷 손실 감소
- 대규모 Kubernetes 클러스터에서 안정적인 DNS 성능 제공
NodeLocal DNS 설치
먼저 Kubernetes에서 제공하는 NodeLocal DNSCache 매니페스트를 다운로드합니다.
wget https://github.com/kubernetes/kubernetes/raw/master/cluster/addons/dns/nodelocaldns/nodelocaldns.yaml
현재 클러스터에서 사용 중인 CoreDNS의 ClusterIP를 조회합니다.
kubedns=$(kubectl get svc kube-dns -n kube-system -o jsonpath={.spec.clusterIP})
NodeLocal DNS에서 사용할 값을 변수로 지정합니다.
- domain : Kubernetes 클러스터 DNS 도메인 (기본값: cluster.local)
- localdns : 각 노드에서 사용할 NodeLocal DNS IP (기본값: 169.254.20.10)
domain='cluster.local'
localdns='169.254.20.10'
다운로드한 YAML 파일의 Placeholder 값을 실제 환경에 맞게 변경합니다.
sed -i "s/__PILLAR__LOCAL__DNS__/$localdns/g; \
s/__PILLAR__DNS__DOMAIN__/$domain/g; \
s/__PILLAR__DNS__SERVER__/$kubedns/g" nodelocaldns.yaml
마지막으로 DaemonSet을 배포합니다.
kubectl apply -f nodelocaldns.yaml
정상적으로 배포되면 모든 Worker Node에 하나씩 NodeLocal DNSCache Pod가 생성됩니다.
kubectl get pods -n kube-system -l k8s-app=node-local-dns
이것으로 NodeLocal DNSCache에 대한 글을 마치겠습니다. 감사합니다!
'Cloud > Kubernetes' 카테고리의 다른 글
| EKS S3 CSI Driver (0) | 2026.07.09 |
|---|---|
| Calico CNI (0) | 2026.01.05 |
| Istio Keycloak 인증 연동 (0) | 2025.09.29 |
| 쿠버네티스 기본 명령어를 알아보자 (0) | 2025.05.01 |
| 쿠버네티스(k8s)의 구성요소 및 작동원리 (0) | 2025.05.01 |