[Kubernetes] Kubernetes DNS를 이해 해 보자.
- 쿠버네티스 클러스터에 kube-system이라는 Namespace에는 kube-dns라는 Service 타입의 오브젝트가 떠있음.
- 새로운 Service를 생성하게되면(svc-web이라는 서비스를 생성하였고 그 서비스의 IP는 10.96.100.100 이라 가정)
그 서비스의 정보인 [svc-web : 10.96.100.100] 이라는 정보가 kube-dns에 등록 되어짐.
- 즉 svc-web.default.svc.cluster.local에 연결 해달라는것은 10.96.100.100에 연결해 달라는 것과 같다.
- kube-dns 그 자체도 하나의 Service 타입 오브젝트이기 때문에 자체적인 Cluster IP를 가지고 있는데 그 IP는 보통 10.96.0.10 인 경우가 많다.
- 모든 Pod는 생성될때 /etc/resolv.conf 파일을 가지고 있게 되는데. 이 파일 안에는 nameserver = 10.96.0.10 라는 내용이 적혀 있다.
- 보통 /etc/resolv.conf 파일은 아래와 같이 되어있다.
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local csaa2fcloud.internal
ndots 5
- 클러스터에서 curl svc-web 까지만 입력해도 생략된 부분이 자동으로 채워지면서, 해당 서비스로 찾아 갈 수 있음.
- 만약 다른 DNS 서비스를 사용하고 싶다면, Pod를 배포할 때 yaml 파일에 아래와 같이 정의하면 된다.
dnsPolicy: "None"
dnsConfig:
nameservers:
-1.2.3.4
searches:
- dns-exampe.svc.cluster-domain.example
- my.dns.search.suffix
options:
- name: ndots
value: "2"
- name: edns0