본문 바로가기
DevOps/Kubernetes

[Kubernetes] CoreDNS: Kubernetes 네트워킹의 핵심을 파헤치다

by Yoon_estar 2025. 2. 8.
728x90

개요

쿠버네티스에서 네트워킹을 관리할 때, CoreDNS는 필수적인 구성 요소로 돋보입니다. 쿠버네티스 클러스터의 기본 DNS 서버 역할을 하는 CoreDNS는 서비스 디스커버리와 name resolution이 원활히 작동하도록 보장하는 데 중요한 역할을 합니다. 이번 블로그에서는 CoreDNS가 뭔지, 쿠버네티스에서 어떤 역할을 하는지, 그리고 컨테이너 오케스트레이션에서 왜 필수적인지 자세히 알아보겠습니다. 

 

CoreDNS란?

CoreDNS는 유연하고 확장 가능한 DNS 서버로, 쿠버네티스 클러스터의 DNS 서버 역할을 수행합니다. 이 프로젝트는 쿠버네티스처럼 Cloud Native Computing Foundation(CNCF)에서 관리합니다. 

CoreDNS는 Go 언어로 작성되었으며, 다양한 환경에서 사용할 수 있는 높은 유연성을 자랑합니다. 

 

쿠버네티스에서의 CoreDNS의 역할

쿠버네티스에서 coreDNS는 Kube-system 네임 스페이스에 배포로 설치됩니다. 일반적으로 CoreDNS는 고정 IP 주소를 가진 Kubernetes Service로 노출되며, 각 컨테이너는 kubelet에 의해 --cluster-dns=<dns-service-ip> 플래그를 통해 DNS 정보가 전달됩니다. 

CoreDNS는 쿠버네티스 플러그인(Kubernetes plugin)을 통해 쿠버네티스와 통합됩니다. 이 플러그인은 DNS 기반 서비스 디스커버리 규격(DNS-Based Service Discovery Specification)을 구현하여, CoreDNS가 기존 kube-dns를 대처하도록 합니다.

 

CoreDNS의 주요 기능

서비스 디스커버리(Service Discovery)

CoreDNS는 서비스가 생성될 때 서비스 이름을 클러스터 IP 주소로 자동으로 매핑합니다. 

유연한 구성

CoreDNS는 Corefile이라는 설정 파일을 사용하며, 이는 쿠버네티스의 ConfigMap을 통해 쉽게 커스터마이징할 수 있습니다. 

플러그인 아키텍처 

CoreDNS는 플러그인 아키텍처로 설계되어 있어 새로운 기능을 쉽게 확장할 수 있습니다.

성능 최적화 

CoreDNS는 캐싱 및 로드 밸런싱 기능을 제공하여 효율적인 DNS 쿼리 처리를 지원합니다. 

모니터링

CoreDNS는 Prometheus 메트릭을 통해 클러스터 네트워킹 상태를 모니터링 할 수 있습니다. 

 

 

쿠버네티스에서 DNS 이름 구조

coreDNS는 쿠버네티스에서 특정 DNS 이름 구조를 따릅니다.

  • 서비스 이름 : <service-name>.<namespace>.svc.cluster.local
  • 파드 이름 : <pod-ip-address>.<namespace>.pod.cluster.local

Example

  • default 네임 스페이스에 있는 web-ui-svc라는 서비스는 다음과 같은 DNS 이름을 갖습니다. 
web-ui-svc.default.svc.cluster.local

 

CoreDNS 테스트 방법

CoreDNS가 제대로 작동하는지 확인하려면 busybox 파드를 사용하여 테스트할 수 있습니다. 

  • Busybox 파드 생성
# kubectl run dns-test --image=busybox:1.28 -it -- /bin/sh

 

  • 파드 내부에서 nslookup을 사용하여 DNS 확인
# nslookup web-ui-svc

 

CoreDNS 와 쿠버네티스 버전 관리, 관계

CoreDNS 는 쿠버네티스 버전과 연동되어 있습니다. 예를 들어 쿠버네티스 1.32에서는 CoreDNS v1.11.3이 kubeadm에 의해 설치됩니다. 새로운 기능 추가 또는 사용 중단이 발생할 수 있으므로, CoreDNS와 쿠버네티스의 버전 변경 사항을 주의 깊게 확인해야 합니다. 

이에 관련한 내용은 다른 글에서 포스팅하였습니다. 

2025.01.28 - [DevOps/Kubernetes] - [Kubernetes] CoreDNS & 쿠버네티스 버전의 관계

 

[Kubernetes] CoreDNS & 쿠버네티스 버전의 관계

개요CoreDNS는 쿠버네티스 버전에 연동됩니다. 예를 들어, 쿠버네티스 1.32에서는 CoreDNS v1.11.3이 kubeadm에 으해 기본적으로 설치됩니다. 그렇다면, 쿠버네티스 1.32 이후 버전에서는 CoreDNS를 따로 설

www.estar987.com