[따배쿠/멤버십] 16. Kubernetes DNS
이번에는 core DNS와 DNS 편집하는 방법을 알아보자
core DNS는 쿠버네티스 내부에서만 동작하는 DNS 서버 역할을 하고
파드 간에 통신을 할 때 service나 pod에 대해 ip가 아니라 네이밍 서비스를 하도록 지원한다.
즉, core DNS는 쿠버네티스 전용 DNS 서버이다.
core DNS는 service의 이름과 service의 클러스터 ip를 등록하여 domain service를 지원해준다.
kubectl get svc -A 로 모든 서비스들을 확인해보면 kube-dns가 실행 중이다.
만약 nginx 컨테이너 파드가 1개 있다고 하면 /etc/resolv.conf 라는 config 파일을 가지고 dns domain name에 해당하는 ip주소를 요청하게 된다. 컨테이너 안에 있는 /etc/resolv.conf 에는 네임서버가 10.96.0.10 으로 설정되어있다.
10.96.0.10 으로 DNS 요청을 하면 그 DNS 요청은 kube-dns에서 처리해준다.
kubectl get pod -A 로 보면 coredns가 2개 있고 그 단일 진입점은 kube-dns의 cluster ip인 10.96.0.10 이다.
이것이 쿠버네티스에서 DNS 서비스를 지원해주는 구조이다.
kubectl apply -f deployment.yaml로 nginx 파드를 3개 만들고
kubectl apply -f svc.yaml 로 단일진입점을 만들자
nginx 파드 3개는 back 단의 애플리케이션이라고 생각해보면
front 단의 애플리케이션 또한 필요하다.
kubectl run clinet-pod --image=centos:7 -it -- /bin/bash 로 front 단의 애플리케이션 역할을 할 centos 파드를 생성하고 컨테이너에 접속한다.
컨테이너의 /ect/resolv.conf 안에 네임서버가 10.96.0.10으로 설정된걸 확인한다.
10.96.0.10는 coredns의 단일진입점이다.
curl svc-web 를 통해 service 단위로 접속할 수 있고
curl 192-168-104-61.default.pod.cluster.local 처럼 파드 단위로도 연결할 수 도 있다.
이제 파드 내 DNS를 설정해보자
client-pod 내의 /etc/resolv.conf의 dns 서버를 core dns가 아닌 customize 할 수도 있다.
custom-dns.yaml 파일의 내용은 아래와 같다.
dnsConfig에서 네임서버를 1.2.3.4로 설정하였다.
kubectl apply -f custom-dns.yaml를 실행하자
kubectl exec dns-example -it -- /bin/bash 로 dns-example 컨테이너에 접속하여 /etc/resolv.conf를 보면 nameserver 1.2.3.4로 파드의 dns서버를 커스터마이징 된걸 볼 수있다.