CoreDNS Plugin
CoreDNS Plugin은 CNCF의 졸업 프로젝트인 CoreDNS가 채택한 플러그인 기반 아키텍처에서, DNS 요청 처리 파이프라인의 각 단계를 담당하는 개별 모듈을 의미한다. CoreDNS는 모든 DNS 기능을 하나의 고정된 서버 로직으로 구현하지 않고, errors, health, cache, forward, kubernetes 등 저마다 역할이 다른 플러그인들을 체인 형태로 연결해 하나의 Corefile 설정 안에서 원하는 동작을 조합할 수 있도록 설계되어 있다.
이 구조 덕분에 CoreDNS는 쿠버네티스 클러스터의 기본 DNS 제공자로 널리 쓰이는 동시에, 외부 플러그인을 직접 작성해 커스텀 인증, 요청 재작성, 특수 레코드 처리 같은 조직별 요구사항까지 유연하게 반영할 수 있는 확장형 DNS 서버로 자리잡았다.
주요 특징
- 플러그인 체인 구조: DNS 요청이 등록된 순서대로 여러 플러그인을 거치며 처리되고, 각 플러그인은 요청을 검사·수정하거나 다음 플러그인 실행 여부를 결정함.
- 컴파일 타임 정적 등록: 플러그인은 plugin.cfg 파일과 코드 생성 과정을 통해 바이너리에 정적으로 링크되며, 실행 순서도 이 단계에서 확정됨.
- Corefile 기반 선언적 설정: 각 플러그인은 Corefile 문법으로 활성화·비활성화하고 세부 옵션을 지정할 수 있어 별도 코드 수정 없이 동작을 조정할 수 있음.
- 쿠버네티스 서비스 디스커버리 지원: kubernetes 플러그인이 API 서버의 서비스·엔드포인트 정보를 감시해 실시간으로 DNS 레코드를 생성함.
- 모니터링·디버깅 플러그인 내장: prometheus, health, log 등의 플러그인을 통해 클러스터 운영 중 상태 확인과 지표 수집이 기본 지원됨.
장점
- 필요한 기능만 조합 가능: 조직에 필요한 플러그인만 Corefile에 나열하면 되므로 불필요한 기능 없이 가벼운 DNS 서버 구성이 가능함.
- 커스텀 로직 확장 용이: Go 언어로 플러그인 인터페이스만 구현하면 조직 고유의 인증·라우팅·필터링 로직을 DNS 계층에 직접 추가할 수 있음.
- 쿠버네티스 표준 호환: 쿠버네티스 DNS 기반 서비스 디스커버리 명세를 구현해 kube-dns를 대체하며 별도 마이그레이션 부담이 적음.
- 운영 안정성: 각 플러그인이 독립적으로 동작해 특정 기능의 장애가 전체 DNS 서비스에 미치는 영향을 최소화하도록 설계됨.
- 활발한 생태계: 기본 제공 플러그인 외에도 다양한 외부 플러그인이 공개되어 있어 필요에 따라 가져다 쓰거나 참고할 수 있음.
관련 용어
- Corefile: CoreDNS의 동작과 플러그인 체인을 정의하는 설정 파일로, Caddy 서버의 설정 문법을 기반으로 함.
- Server Block: 특정 DNS 존(zone)에 대해 어떤 플러그인을 적용할지 정의하는 Corefile 내 블록 단위.
- Fallthrough: 한 플러그인이 요청을 완전히 처리하지 못했을 때 다음 플러그인으로 처리를 넘기도록 하는 동작 방식.
- kube-dns: 쿠버네티스에서 CoreDNS 이전에 기본 DNS 제공자로 쓰이던 컴포넌트로, 현재는 CoreDNS로 대체됨.
- EndpointSlices API: kubernetes 플러그인이 서비스와 파드의 엔드포인트 정보를 감시할 때 사용하는 쿠버네티스 API.
주요 솔루션 및 사용 사례
- 주요 솔루션
- kubernetes 플러그인: 쿠버네티스 서비스·파드 정보를 DNS 레코드로 변환해 클러스터 내부 서비스 디스커버리를 제공함.
- forward 플러그인: 클러스터 내부에서 해석할 수 없는 외부 도메인 질의를 상위 DNS 서버로 전달함.
- cache 플러그인: 반복되는 DNS 질의 응답을 캐싱해 API 서버 부하와 응답 지연을 줄여줌.
- autopath 플러그인: kubernetes 플러그인과 함께 사용되어 클러스터 내 도메인 검색 경로 완성을 서버 측에서 처리함.
- hosts 플러그인: 정적 IP-호스트 매핑을 추가해 레거시 내부 시스템이나 외부 서비스에 대한 커스텀 DNS 항목을 제공함.
- 사용 사례
- 쿠버네티스 클러스터 기본 DNS 운영: Amazon EKS 등 관리형 쿠버네티스 서비스에서 CoreDNS가 기본 애드온으로 배포되어 클러스터 전체 이름 해석을 담당함.
- 레거시 시스템 연동: hosts 플러그인으로 내부 레거시 데이터베이스·API 서버에 대한 고정 DNS 항목을 등록해 마이그레이션 없이 이름으로 접근 가능하게 함.
- 커스텀 인증·필터링 구현: 조직 자체 플러그인을 개발해 특정 IP 대역의 DNS 질의를 차단하거나 서비스명을 재작성하는 등 맞춤 로직을 적용함.
- DNS 트래픽 모니터링: prometheus·log 플러그인을 활성화해 질의량, 지연 시간, 오류율 등을 지표로 수집하고 운영 대시보드에 연동함.
- 멀티 프로토콜 DNS 서비스 제공: 동일한 플러그인 체인을 UDP/TCP뿐 아니라 DoT, DoH, gRPC 등 다양한 전송 프로토콜에서 재사용함.

