본문으로 건너뛰기

CoreDNS

목적

CoreDNS는 Lumie의 인클러스터 DNS 해석을 제공합니다. 이 페이지는 저장소가 관리하는 CoreDNS 워크로드 재정의, Git 관리 DNS 구성과 k3s 관리 DNS 구성 사이의 경계, 노드 로컬 DNS pod를 전제로 하는 운영 가정을 다루는 레퍼런스 문서입니다.

소스 경로

경로역할
lumie-infra/platform/coredns-config/argocd.yamlCoreDNS 재정의용 Argo CD 애플리케이션
lumie-infra/platform/coredns-config/daemonset.yaml저장소가 관리하는 CoreDNS DaemonSet 대체 정의
live kube-system/coredns ConfigMapDaemonSet이 소비하는 CorefileNodeHosts 제공

퍼블릭 표면

저장소는 새로운 DNS API를 정의하지 않습니다. 기존 클러스터 DNS 서비스의 실행 방식을 바꿉니다.

표면계약
Pod 유형k3s 기본 Deployment가 아닌 DaemonSet
네임스페이스kube-system
이미지rancher/mirrored-coredns-coredns:1.13.1
포트53/udp, 53/tcp, 메트릭은 9153/tcp
구성 소스kube-system의 기존 coredns ConfigMap

Lumie가 DaemonSet을 사용하는 이유

핵심 설계 선택은 매니페스트에 직접 문서화되어 있습니다.

# platform/coredns-config/daemonset.yaml
# Deployed as DaemonSet (not the k3s default Deployment) to guarantee one
# CoreDNS replica per node including the control-plane.
dnsPolicy: Default

이 방식은 노드마다 CoreDNS pod 1개를 보장하고, pod가 클러스터 DNS 해석을 위해 클러스터 DNS 자체를 기다리지 않도록 노드 resolver를 사용하게 하여 부트스트랩 의존성 루프를 피합니다.

런타임 흐름

구성 경계

이 영역에는 중요한 소유권 분리가 있습니다.

  • 저장소는 daemonset.yaml을 통해 CoreDNS의 워크로드 형태를 관리합니다.
  • 저장소는 현재 Corefile을 버전 관리하지 않습니다.
  • 라이브 클러스터에는 여전히 k3s addon 기계가 소유하는 kube-system/coredns ConfigMap이 있고, DaemonSet은 이 ConfigMap을 직접 마운트합니다.

2026년 6월 14일에 확인한 라이브 ConfigMap에는 다음이 포함되어 있었습니다.

  • kubernetes cluster.local plugin
  • hosts /etc/coredns/NodeHosts
  • prometheus :9153
  • forward . /etc/resolv.conf

즉, pod 토폴로지는 Git에서 관리되더라도 addon이 소유한 ConfigMap이 바뀌면 Git diff 없이 DNS 동작이 달라질 수 있습니다.

운영 메모

  • DaemonSet은 제어 평면 taint를 허용하므로 master에도 DNS pod가 실행됩니다.
  • priorityClassName: system-cluster-critical은 CoreDNS를 중요한 시스템 티어에 유지합니다.
  • readOnlyRootFilesystem: true와 축소된 capability 집합은 포트 53 바인딩은 허용하면서도 pod 보안 태세를 강화합니다.

장애 지점

장애 지점영향
DaemonSet과 ConfigMap이 서로 드리프트pod는 시작하지만 readiness 실패 또는 예상치 못한 DNS 동작 발생
dnsPolicy: Default 제거CoreDNS가 부트스트랩 중 자기 자신을 기다리며 교착될 수 있음
제어 평면 toleration 제거master가 로컬 DNS pod를 잃고 cross-node lookup이 증가
ConfigMap이 Git 밖에서 변경됨대응하는 저장소 diff 없이 DNS 응답이 바뀜

검증

kubectl get ds -n kube-system coredns
kubectl get pods -n kube-system -l k8s-app=kube-dns -o wide
kubectl get configmap -n kube-system coredns -o yaml
rg -n "coredns|dnsPolicy: Default|system-cluster-critical" \
lumie-infra/platform/coredns-config