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을 통해 관리합니다.
지금까지 k8s coredns에 대한 개념 및 동작방식, configration file인 corefile 에 대해 알아보았습니다.
배워가며 작성하는 블로그입니다.
피드백 및 의견 환영입니다 🙂
'데브옵스 > K8S' 카테고리의 다른 글
K8S Finalizers란? (K8S 리소스 종료 라이프사이클 / PV / PVC 삭제) (2) | 2024.06.10 |
---|---|
docker entrypoint 란 / k8s entrypoint 사용 ? (entrypoint 사용법) (0) | 2023.06.19 |
[k8s network] nodelocaldns 란? (Nodelocal DNSCache) (0) | 2023.05.28 |
[k8s network] kube-proxy 란? kube-proxy 역할 (0) | 2023.05.23 |
K8S Node 캐시된 컨테이너 이미지 정리 (kubelet) (0) | 2023.05.19 |