개요
쿠버네티스에서 네트워킹을 관리할 때, 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
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] Kubernetes에서 PV(Persistent Volume)와 PVC(Persistent Volume Claim)의 관계 (0) | 2025.02.12 |
---|---|
[EKS] kubectl 설치 & eksctl 명령어 설치 후 EKS 생성 test (0) | 2025.02.11 |
[Kubernetes] 쿠버네티스 서비스 및 로드 밸런싱 이해 (1) | 2025.02.07 |
[Kubernetes] Rolling Update : 점진적 업데이트, 버전 관리 (0) | 2025.02.06 |
[Kubernetes] Kubernetes Pod 및 Docker Container 최소 권한 관리 (0) | 2025.02.05 |