본문 바로가기

소프트웨어-이야기/인프라

개발자를 위한 최소한의 DNS 지식 (2): 쿠버네티스 응용편

개발자를 위한 최소한의 DNS 지식 (1): 기초편에 이어서, 쿠버네티스를 통해 DNS을 살펴보자. 

 

쿠버네티스 컨테이너의 DNS 설정 확인해보기

dnsutils를 설치해서, 테스트를 해보자.

kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml

그다음 resolv.conf 설정을 살펴보자.

kubectl exec -i -t dnsutils -- cat /etc/resolv.conf

dnsutils 컨테이너를 실행하여, resolv.conf 기본값을 살펴보자.

resolv.conf 파일에 search option이 설정되어있다. 쿠버네티스에서 올라간 애플리케이션에서 PQDN으로 도메인을 호출했을 때, 알아서 주소를 찾아가는 이유는 이 설정 덕분이다.

만약 item이라는 도메인을 호출한다고 상상해보자. 그러면 resolv는 네임서버를 suffix으로 붙여서 ip를 찾아나선다. 만약 못찾으면 원래 주소를 호출한다.

  • item.default.svc.cluster.local
  • item.svc.cluster.local
  • item.cluster.local

진짜 그런지 디버깅해보자. 다음 명령어를 실행해서, 실제로 dns를 찾아가는 과정을 보면, suffix에 name server를 붙여가며 dns을 찾아간다.

kubectl exec -i -t dnsutils -- nslookup -debug item

기타

인터넷을 찾아보면, busybox으로 리눅스 기반 초소형 컨테이너 이미지를 실행하여, nslookup을 테스트하는 예제가 많이나온다. 그러나, nslookup -debug 등의 옵션이 제대로 먹지 않아서, dnsutils을 사용했다.

그리고 nslookup 명령어를 실행하려면, 1.28.4 버전 이하여야한다는 제약사항이 있어서, 버전도 1.28으로 고정해야했다. (참고)

kubectl run -i --tty --image busybox:1.28 test --restart=Never --rm /bin/sh

<<끝>>

참고

https://www.nslookup.io/learning/the-life-of-a-dns-query-in-kubernetes/

https://jonnung.dev/kubernetes/2020/05/11/kubernetes-dns-about-coredns

https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/