IT/Kubernetes

[Kubernetes] Kubernetes DNS를 이해 해 보자.

고슴도치 엔지니어 2022. 5. 24. 10:05

- 쿠버네티스 클러스터에 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