개발자를 위한 최소한의 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/
'소프트웨어-이야기 > 인프라' 카테고리의 다른 글
개발자를 위한 최소한의 모니터링 지식: spring actuator + prometheus + grafana (0) | 2024.02.10 |
---|---|
HTTP KeepAlive와 Spring Tomcat과 Netty ConnectionPool의 관계 (0) | 2023.10.14 |
[Kubernetes] readiness/liveness probe (0) | 2023.09.09 |
개발자를 위한 최소한의 네트워크 지식 (0) | 2022.08.26 |
IPv6와 Nginx (0) | 2022.08.26 |