K8s에 떠있는 파드 하나에 내부로 접속해서 resolv.conf 파일을 열어보면 다음과 같다.
bash-4.4$ cat /etc/resolv.conf
search mongodb.svc.cluster.local svc.cluster.local cluster.local default.svc.cluster.local
nameserver 192.254.25.10
options ndots:5
kube-proxy는 svc -> pod 트래픽을 이동시킨다.
그러므로 만약 다른 파드로 트래픽을 보내고 싶다면 svc로 트래픽을 보내면 된다. svc의 도메인과 ip 매핑 정보는 CoreDNS에 저장되어 있는데, DNS 쿼리 성능을 높히기 위해, CoreDNS의 캐시를 가지고 있는 파드를 daemonset으로 배포하는데, 그것이 바로, 'node-core-dns' 이다.

각 파드는 nameserver ip로 192.254.25.10 설정되어 있는데, 192.254.25.10로 드러온 트래픽은 node-core-dns 파드로 전달되도록 kube-proxy가 설정해놓는다. ( iptables or ipvs )
$ ip addr | grep nodelocaldns
7: nodelocaldns: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
inet 192.254.25.10/32 scope global nodelocaldns
그러므로 각 파드는 nodlocaldns에 질의를 날려야 한다.
bash-4.4$ cat /etc/resolv.conf
search mongodb.svc.cluster.local svc.cluster.local cluster.local default.svc.cluster.local
nameserver 192.254.25.10
options ndots:5
각 파드는 mongodb.svc.cluster.local svc.cluster.local cluster.local default.svc.cluster.local와 같이 일종의 Postfix(?)를 다양한 범위로 가지고 있다. 그래서 svc의 모든 도메인을 치지 않아도, systemd-resolved가 여러 시도를 수행한다.
monitoring 네임스페이스에 있는 grafana svc에 트래픽을 보내고 싶다면 [서비스명].[네임스페이스]만 설정해도 서비스의 ip를 dns로 부터 얻을 수 있다.
$ nc -zv monitoring-stack-grafana.monitoring 80
monitoring-stack-grafana.monitoring (10.233.13.144:80) open
참고자료
https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/
'Ops > Kubernetes' 카테고리의 다른 글
| [이슈] Network Policy - failed to get status by proxying to the pod, you might lack permissions to get pods/proxy (0) | 2025.12.08 |
|---|---|
| Ingress에서 Gateway API로 전환해야 하는 이유 (0) | 2025.10.23 |
| [이슈] 파드가 반복해서 Evicted되는 현상 (0) | 2025.09.16 |
| K8S NFS 동적 프로비저닝 구현하기 (0) | 2025.09.16 |
| kubectl로 여러 Kubernetes 클러스터 제어하기 (3) | 2025.08.25 |