coreDNS란 무엇인가?


회의 때 나온 coreDNS는 무엇인가?

Published on September 18, 2025 by 강준우

rke2 rancher harbor kubernetes

2 min READ

Intro

DNS: Domain Name Server

  • 사용자가 기억하기 쉬운 주소를 컴퓨터가 이해하는 IP 주소로 변환해주는 서버 혹은 시스템
  • DNS 쿼리
  • 캐시

CoreDNS

coreDNS: 쿠버네티스 클러스터의 DNS 역할을 수행할 수 있는 유연하고 확장 가능한 DNS 서버입니다.

  • 클러스터 내부의 다른 Pod의 도메인 질의
  • 클러스터 외부 도메인 질의

다른 App과 마찬가지로 Pod 형태로 호스팅됩니다. 예전에는 kube-dns가 쓰였는데 Kubernetes 1.13 이상부터 기본으로 CoreDNS를 사용합니다.

CoreDNS (기능/역할)

  1. 서비스 및 파드 이름 해석 클러스터 내부의 서비스 이름(my-service.my-namespace.svc.cluster.local와 같은 형식)을 IP 주소로 매핑해서 서비스 간 통신이 가능하도록 함.
  2. 외부 DNS 쿼리 포워딩 내부 서비스가 아닌 도메인 (ex: google.com)에 대한 요청은 upstream DNS 서버(ex: /etc/resolv.conf에 설정된 서버)로 전달해서 해석함.
  3. 검색 도메인 및 ndots 설정으로 이름 축약 및 자동 확장 Pod 내의 /etc/resolve.conf 설정에 따라 짧은 이름(short name)이나 namespace 생략 등이 가능하게 해줌. 예: svc.cluster.local 등이 자동으로 덧붙여지는 경우
  4. Reverse lookup (PTR records) IP -> 이름 해석 등이 가능함(ex: in-addr.arpa, ip6.arpa)
  5. 모듈형 플러그인 아키텍처 여러 기능이 플러그인 형태로 구현되어 있고, 필요에 따라 활성화하거나 설정을 조정 가능함
  6. 확장성 및 고가용성 여러 개의 CoreDNS Pod를 띄워서 로드 밸런싱하고 장애에도 대응할 수 있음. 또한, 설정(ConfigMap)으로 Corefile을 조정하여 기능을 추가하거나 최적화 가능
  7. 모니터링 및 상태 확인 예: Pod로 띄워지기 때문에 prometheus 플러그인을 통해 메트릭을 수집, health, ready 플러그인 등을 통해 상태 체크 가능.

CoreDNS 사용 이유

  1. 서비스 디스커버리 컨테이너에서 실행되는 애플리케이션은 IP 주소 대신 DNS 이름을 사용하여 다른 서비스를 찾고 통신할 수 있다. 이를 통해 서비스의 확장 또는 마이그레이션 시에도 결합도가 낮아지고 유연성이 향상됩니다.
  2. 사용자 정의 및 확장성 CoreDNS는 손쉽게 구성, 확장 가능한 서비스입니다. corefile 설정을 통해, 간편하게 플러그인을 추가하고 특정 요구사항을 충족시킬 수 있다. 이런 유연성은 DNS 캐싱, DNS 기반 보안 정책, 외부 DNS 공급자와의 통합 등의 기능을 가능하게 합니다.
  3. Kubernetes API와의 통합 CoreDNS는 Kubernetes API 서버와 원활하게 통합됩니다. Kubernetes API를 쿼리함으로써 클러스터 내의 서비스, 엔드포인트 및 기타 리소스를 자동으로 검색합니다.

구성 요소 / 주요 설정 요소

  • Corefile
    • CoreDNS가 어떻게 동작할 지 설정하는 파일. 어떤 플러그인을 쓸 지, 어떤 zone을 관리할 지, upstream DNS는 어디인지, TTL, Pods 모드, namespace 필터링 등 다양한 옵션이 있음.
  • ConfigMap
    • 이 Corefile은 Kubernetes내에 ConfigMap 리소스로 분류됨.
  • Deployment/Pods
    • CoreDNS는 Deployements 형태로 배포되어 여러 파드로 구성됨. 복제(replica) 수, 자원량(CPU, Mem), 노드 셀렉터(nodeSelector), 토러레이션(toleration) 등 설정 가능
  • Service
    • ClusterIP 서비스로 외부나 클러스터 내 파드들이 CoreDNS로 DNS 쿼리를 보낼 수 있게 함. Pod의 /etc/resolve.conf에 지정되는 nameserver 주소가 이 서비스 IP가 됨.
  • 플러그인 옵션 예시

작동 흐름

  1. 파드 또는 컨테이너에서 DNS 쿼리를 요청 보냄 /etc/resolve.conf의 nameserver에 적힌 ClusterIP로 보냄.
  2. CoreDNS 파드는 받은 쿼리를 Corefile 플러그인 체인에 따라 처리
    1. 먼저 kubernetes 플러그인이 내부 서비스/파드 레코드를 찾아본다.
    2. 없으면 forward로 넘어가 외부 DNS 서버에 조회를 한다.
    3. 캐시(cache)가 있다면 캐시를 사용한다.
    4. 로그 또는 모니터링 플러그인이 로그/메트릭 수집
  3. 응답 -> 파드로 변환