본문 바로가기
K8s/Core Concepts

[K8s] CoreDNS 란?

by okms1017 2024. 11. 16.
728x90

✍ Posted by Immersive Builder  Seong

 

CoreDNS

 

CoreDNS는 쿠버네티스 클러스터의 네임서버 역할을 수행하는 유연하고 확장 가능한 DNS 서버입니다. 기본적으로 클러스터 내부 및 외부의 도메인 이름을 조회하고 서비스 디스커버리를 처리하는 역할을 수행합니다. Kubeadm을 사용하여 쿠버네티스 클러스터를 구성한 경우, CoreDNS는 파드로 실행됩니다. 보통 2개 이상의 파드를 가지는 디플로이먼트로 실행되며, kube-dns라는 이름으로 ClusterIP 타입의 서비스가 제공됩니다. 

 

 

동작 원리

서비스 또는 파드가 새로 생성될 때마다 CoreDNS 파드에 신규 레코드를 추가하고, 해당 파드의 /etc/resolv.conf 파일에서 CoreDNS 서비스를 참조하도록 구성합니다. 

 

아래와 같이 busybox 파드를 생성하여 확인해보면 디폴트 네임서버로 CoreDNS 서비스를 지정하고 있습니다. 그리고 서비스 도메인에 대한 질의는 'default.svc.cluster.local, svc.cluster.local, cluster.local' 도메인 내에서 찾게 됩니다. 

 

 

파드의 DNS 구성은 kubelet이 담당합니다. 파드가 생성될 때 kubelet이 CoreDNS의 도메인과 IP 주소를 해당 파드에 전달하는 것입니다. 

 

Corefile

CoreDNS는 Corefile에 정의된 설정에 따라 동작합니다. Corefile은 /etc/coredns/Corefile 경로에 위치하며, 컨피그맵 객체로 CoreDNS 파드에 전달됩니다. 아래의 명령어를 사용하여 자세한 구성 정보를 확인할 수 있습니다. 

 

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

 

 

파일 구조는 DNS 요청을 처리하기 위한 도메인과 CoreDNS의 동작을 정의하는 플러그인으로 구성됩니다. 필요 시, 해당 컨피그맵의 도메인과 플러그인을 추가·변경함으로써 CoreDNS의 동작을 제어할 수 있습니다. 

 

  • Zone : 모든 요청은  . (루트 도메인)이 처리합니다. 기본 서비스 포트는 Port 53을 사용합니다. 
  • errors : 에러 메시지를 기록합니다. 
  • health : CoreDNS의 상태를 체크합니다. 
  • ready : CoreDNS의 준비 상태를 확인하는 http 엔드포인트를 제공합니다. 
  • kubernetes : 쿠버네티스와 통합하여 DNS 조회 및 서비스 디스커버리 기능을 제공합니다. cluster.local은 클러스터 내부 도메인을 의미하고, in-addr.arpa / ip6.arpa는 역방향 DNS 조회를 지원합니다.  
    • pods insecure : 클러스터에서 파드에 대한 레코드를 생성합니다. ex) 172-17-1-2
    • fallthrough : 도메인에 일치하는 레코드가 없을 경우 다음 도메인으로 전달합니다. 
    • ttl : 클러스터에서 생성된 DNS 응답에 대한 TTL 값을 설정합니다. 
  • prometheus : prometheus에서 CoreDNS의 메트릭을 수집할 수 있도록 http 엔드포인트를 제공합니다. 
  • forward : 클러스터 외부에 대한 DNS 요청을 처리합니다. ex) /etc/resolv.conf : nameserver 8.8.8.8
  • cache : DNS 응답 결과를 초 단위로 캐싱하여 성능을 향상시킵니다.  
  • loop : 서비스 디스커버리에서 발생할 수 있는 루프 현상을 방지합니다. ex) DNS 서버 간 상호 참조로 인한 무한 루프 현상 등
  • reload : Corefile의 변경 사항을 초 단위로 감지하여 적용합니다. 
  • loadbalance : 여러 백엔드로 트래픽을 고르게 분산합니다. 
  • log : DNS 요청 및 응답을 로그로 기록합니다. 

 

 


[출처]

1) https://www.tigera.io/blog/dns-observability-and-troubleshooting-for-kubernetes-and-containers-with-calico/

 

DNS observability and troubleshooting for Kubernetes and containers with Calico | Tigera

In Kubernetes, the Domain Name System (DNS) plays a crucial role in enabling service discovery for pods to locate and communicate with other services within the cluster. This function is essential for managing the dynamic...

www.tigera.io

2) https://github.com/coredns/deployment/blob/master/kubernetes/Upgrading_CoreDNS.md

 

deployment/kubernetes/Upgrading_CoreDNS.md at master · coredns/deployment

Scripts, utilities, and examples for deploying CoreDNS. - coredns/deployment

github.com

728x90

'K8s > Core Concepts' 카테고리의 다른 글

[K8s] 소프트웨어 배포 전략(Software Deployment Strategies)  (0) 2024.11.19
[K8s] Helm 이란?  (1) 2024.11.14
[K8s] JSON Path  (0) 2024.11.13
[K8s] YAML 이란?  (1) 2024.11.12