본문 바로가기

데브옵스/K8S

[k8s network] coredns 란? core dns 작동 구조 및 config

반응형
반응형

Intro

K8S cluster는 pod를 통해 수많은 애플리케이션을 호스팅하며, service 등의 객체를 통해 요청에 대한 부하 분산을 하는 등 다양한 기능을 가지고 있습니다. K8S 내에서 이러한 통신은 도메인 기반 요청으로 이루어지며, K8S cluster 내의 DNS 질의를 위해 사용되는 coredns에 대해 알아봅니다.

CoreDNS

CoreDNS는 쿠버네티스 클러스터의 DNS 역할을 수행할 수 있는, 유연하고 확장 가능한 DNS 서버입니다. (링크)
클러스터 내에서 주로 1) 내부의 도메인 질의, 2) 외부 도메인 질의를 할 때 사용됩니다.
다른 애플리케이션과 마찬가지로 Pod로 호스팅되며, Deployment로 실행되어 Service로 요청을 받습니다.
 

CoreDNS 사용 이유

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

클러스터 내부 DNS 질의 Architecture

coredns라고 하여 다른 DNS 서버와 다르게 동작하는 것은 아닙니다. 도메인 기반 호출 시에 발생하는 과정과 동일하게 질의 수행 및 IP 획득, IP기반의 요청이 이루어집니다.
 

클러스터 외부 DNS 질의 Architecture

 
클러스터 외부에 질의하는 과정 또한 사내 내부 DNS 서버에 질의 후 해당 도메인이 없을 경우, 상위 DNS 를 조회하여 IP를 획득하는 것과 유사합니다.

Configmap 관리를 통한 Corefile 설정

앞서 설명드린 것처럼, coredns를 사용하게 될 경우 corefile를 관리하게 됩니다.
corefile은 coredns를 위한 configuration file이며 아래의 부분을 정의합니다. (링크)

  • 어떤 서버가 어떤 포트와 어떤 프로토콜을 수신하는지
  • 각 서버가 어느 영역에 권한이 있는지
  • 서버가 어떤 플러그인을 사용하는지

corefile은 kube-system 네임스페이스의 configmap을 통해 관리합니다.

kube-system 네임스페이스의 configmap을 조회 시에 coredns configmap 확인이 가능하다.

 

default corefile configuration

 
 
 
지금까지 k8s coredns에 대한 개념 및 동작방식, configration file인 corefile 에 대해 알아보았습니다.
배워가며 작성하는 블로그입니다.
피드백 및 의견 환영입니다 🙂

반응형