
/etc/hosts 방식은 불가능.| 컴포넌트 | 역할 |
|---|---|
| CoreDNS | 클러스터 내부 DNS 서버 |
| kube-dns | 이전 버전 (v1.12 이전)에서 사용 |
| kubelet | Pod 생성 시 /etc/resolv.conf 파일에 DNS 서버 정보 자동 주입 |
| KubeDNS 서비스 | CoreDNS에 접근하는 클러스터 내부 서비스 |
kube-systemkube-dnsClusterIP10.96.0.10.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure # Pod DNS 레코드 활성화
fallthrough in-addr.arpa ip6.arpa
}
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
| 플러그인 | 기능 |
|---|---|
kubernetes | Kubernetes 리소스를 DNS로 변환 |
forward | 클러스터 외부 도메인 질의 처리 (예: 구글 DNS) |
cache | 성능 향상용 캐싱 |
health | 헬스체크 엔드포인트 제공 |
errors | 에러 로깅 |
/etc/resolv.conf에 DNS 서버 정보 주입nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
→ search 도메인 덕분에 짧은 이름으로도 검색 가능
예: web-service 호출 시
→ 검색 순서:
1. web-service.default.svc.cluster.local
2. web-service.svc.cluster.local
3. web-service.cluster.local
web-service.default.svc.cluster.local
→ 같은 네임스페이스에서는 단순히 web-service만으로도 접근 가능.
pods 옵션을 통해 활성화 가능[IP-하이픈변환].[네임스페이스].pod.cluster.local
| Pod IP | DNS |
|---|---|
10.244.1.5 | 10-244-1-5.default.pod.cluster.local |
| 구분 | 서비스 DNS | Pod DNS |
|---|---|---|
| 기본 활성화 | ✅ | ❌ (옵션) |
| 이름 형태 | svc.cluster.local | pod.cluster.local |
| 추천 사용 | ✅ | 디버깅, 특수 목적만 권장 |
1️⃣ 사용자가 kubectl apply -f service.yaml로 서비스 생성
2️⃣ Kubernetes API 서버가 서비스 생성 이벤트 발생
3️⃣ CoreDNS가 Kubernetes API를 watch하여 서비스 레코드 생성
4️⃣ Pod는 /etc/resolv.conf를 통해 DNS 서버로 질의
5️⃣ CoreDNS는 해당 이름 → 서비스 IP 반환
→ Pod 간 통신이 서비스 이름만으로 이루어짐
CoreDNS는 클러스터 외부 도메인도 해석 가능
예) www.google.com 요청 시
forward 플러그인이 /etc/resolv.conf 또는 외부 Public DNS로 포워딩kubectl get svc -n kube-system
kubectl exec -it <pod-name> -- nslookup web-service
kubectl exec -it <pod-name> -- dig web-service
kubectl exec -it <pod-name> -- cat /etc/resolv.conf
svc.cluster.local 도메인으로, Pod는 옵션에 따라 pod.cluster.local로 접근 가능/etc/resolv.conf를 자동 구성하여 DNS 서버로 CoreDNS 서비스 IP를 설정