쿠버네티스 (k8s) Core Dns란?
쿠버네티스를 사용하다보면 파드(pod)끼리 ip로 연결 하는게 아닌 도메인명으로 통신하는 설정을 많이 보게 됩니다.
이 도메인은 뜬금없이 어디서 나타났는지 궁금하기도 하죠. 쿠버네티스는 자기만의 DNS서버를 구동합니다.
kube-system이란 네임스페이스에 보면 coredns라는 파드가 보이게 됩니다.
이 파드들이 쿠버네티스 내부에서 DNS서버 역할을 하게 됩니다.
A라는 파드가 B라는 파드에 요청을 보내는경우
<B-pod-servicename>.<namespace>.svc.cluster.local 이라는 도메인명으로 요청을 보내게 되면 됩니다.
같은 네임스페이스에 있는경우는 줄여서 <B-pod-servicename>만으로도 가능합니다.
좀 더 깊이 들여다보면 A라는 파드에 접근해서 /etc/resolv.conf를 열어보면 알 수 있습니다.
해당 파일은 지정된 클러스터 DNS로 전달되게 셋팅되어 있습니다.
그리고 Corefile이라고 CoreDNS에 주요 설정 파일이 있는데 이것도 한번 열어보면 이해하는데 도움이 많이 됩니다.
보통 열어보면 내용은 아래와 같습니다.
kubectl -n kube-system get configmap coredns -o yaml
열어보는 명령어니까 참고하시면 됩니다.
.:53 {
errors
health
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
위 플러그인에 설명을 조금 드리면
kubernetes : 쿠버네시트에 서비스 이름을 ip로 변환
forward : 외부 dns 서버로 요청을 전달
cache : dns 응답 캐싱
health, ready : coreDNS상태 체크를 위한 엔드포인트 제공
reload 설정 변경 시 자동 재로딩
prometheus : 메트릭 수집용 엔드보인트 제공
여기에 보통 log, debug 를 추가해서 coredns에 로그를 보기도 합니다. (제가 그러고 있네요)
이 내용을 이해하고 있어야 나중에 작성할 파드들에 연결문제를 파악하기 수월합니다.