Core DNS

Core DNS

🔹 CoreDNS란? (Kubernetes의 DNS 서버)

CoreDNS는 쿠버네티스 클러스터 내부에서 DNS 서비스를 제공하는 기본 DNS 서버다.
각 Pod는 CoreDNS를 이용하여 서비스 이름을 클러스터 IP로 변환할 수 있다.
쿠버네티스에서 기본적으로 사용되는 네임서버이며, 이전의 kube-dns를 대체한다.


📌 CoreDNS가 하는 일

1. 서비스 이름을 클러스터 IP로 변환
2. 외부 도메인 네임 해석 (예: google.com)
3. 쿠버네티스 내부 도메인 관리 (svc.cluster.local 등)
4. ConfigMap을 통해 동적 설정 변경 가능


📌 1. CoreDNS가 서비스 이름을 클러스터 IP로 변환하는 과정

🔹 예제: curl my-service:80 요청 시

1️⃣ Pod가 my-service로 요청 → DNS 쿼리 전송 (my-service.default.svc.cluster.local)
2️⃣ kube-dns(CoreDNS)가 etcd에서 Service 정보 조회
3️⃣ my-service의 클러스터 IP (10.96.0.50)를 반환
4️⃣ Pod가 클러스터 IP로 요청 전송 → kube-proxy가 적절한 Pod로 전달

nslookup으로 확인하기:

nslookup my-service.default.svc.cluster.local

출력 예시:

Server:  10.96.0.10
Address: 10.96.0.10#53
Name: my-service.default.svc.cluster.local
Address: 10.96.0.50

📌 2. CoreDNS의 설정 확인 및 변경

CoreDNS는 ConfigMap을 이용해 설정 가능

kubectl get configmap -n kube-system coredns -o yaml

출력 예시:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
            ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

🔹 주요 옵션

  • kubernetes cluster.local → 쿠버네티스 도메인 네임 해석
  • forward . /etc/resolv.conf → 외부 DNS 요청 전달
  • cache 30 → DNS 캐싱(30초)

📌 3. CoreDNS 재시작 (설정 변경 후 반영)

kubectl rollout restart deployment coredns -n kube-system

✅ 정리

CoreDNS는 쿠버네티스의 내부 DNS 서버
서비스 이름을 클러스터 IP로 변환
ConfigMap으로 설정 변경 가능
외부 DNS도 처리 가능 (Google, Cloudflare 등)
DNS 캐싱을 통해 성능 최적화

🚀 쿠버네티스 내부에서 서비스 간 통신이 원활하게 이루어지는 핵심 컴포넌트!