CoreDNS란?
CoreDNS는 Kubernetes Cluster의 기본 DNS 서버 역할을 한다.
K8s의 Service나 Pod 간 통신에서 myservice.mynamespace.svc.cluster.local 같은 FQDN (Fully Qualified Domain Name)을 해석할 때 사용된다.
주요특징
- 클러스터 내부 DNS 제공
- 각 Pod의 /etc/resolv.conf에 지정된 DNS 서버 IP는 보통 kube-dns(즉, CoreDNS ClusterIP Service) 이다.
- Pod → CoreDNS → 외부 DNS 서버(필요 시)로 질의가 전달된다.
- 서비스 디스커버리
- ClusterIP 서비스 이름을 DNS 레코드로 관리합니다.
- 예: nginx.default.svc.cluster.local → 10.96.0.15 (ClusterIP)
- ConfigMap을 통한 설정
- /etc/coredns/Corefile 또는 쿠버네티스 ConfigMap을 수정해 캐싱, 포워딩, stub domain 등을 설정할 수 있습니다.
한계
모든 Pod가 CoreDNS Pod(보통 Kube-system 네임스페이스)에 질의를 보내므로, 노드 수와 Pod 수가 많아지면 CoreDNS의 네트워크 부하와 지연(Latency)이 증가할 수 있다.
NodeLocal DNSCache (NodeLocalDNS) 란?
NodeLocal DNSCache는 각 노드에서 CoreDNS로 가는 DNS 트래픽을 로컬에서 캐싱하고, CoreDNS에 대한 부하를 줄이기 위해 도입된 추가 구성 요소이다. CoreDNS 와 함께 사용한다. (대체 용도 아님)
동작 방식
- DaemonSet으로 각 노드에 DNS 캐시 Pod 배포
- 169.254.20.10 같은 로컬 IP를 사용해 Pod들이 질의하도록 /etc/resolv.conf를 수정한다.
- Pod → NodeLocalDNS (로컬 캐시) → CoreDNS → 외부 DNS 순으로 질의한다.
- 장점
- 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 |