전공영역 공부 기록

쿠버네티스에서 DNS주소 끝에 cluster.local이 붙는 이유

악분 2024. 7. 20. 16:48
반응형

 

https://youtu.be/B7IgpbOfPq8?si=b6xCbqY5oZ920lRK&t=1229

 

 

1. kubedns란?

kubedns는 쿠버네티스에서 DNS(Domain Name system)서버 역할을 수행합니다. pod에서 DNS요청이 필요할 때 kube-dns pod에게 DNS요청을 합니다. kube-dns pod IP는 고정 IP가 아니므로 kubedns 서비스의 cluster IP를 사용합니다.

 

pod에서 /etc/resolv.conf에 설정된 nameserver IP는 kube-dns 서비스 clusterIP입니다.

pod에서 확인한 nameserver IP

 

kubernetes kube-dns clusterIP

 

2. kubedns pod

kubedns pod는 애드온에 속합니다. 쉽게 표현하면 쿠버네티스가 어떤 애플리케이션으로 kubedns pod를 쓰라고 강제하지 않았습니다. kubedns 역할을 하는 애플리케이션은 쿠버네티스 DNS스펙을 충족해야 합니다.

 

쿠버네티스 1.11이상 버전에는 coredns를 추천합니다. Google Managed 쿠버네티스는 coredns를 사용안하고 kubedns를 사용한다고 합니다.

 

kubedns pod는 kube-system namespace에 있습니다.

kubectl get pod -l k8s-app=kube-dns -n kube-system

 

3. coredns 기본 설정

coredns 기본설정은 coredns configmap에 있습니다. 기본 설정은 쿠버네티스의 서비스와 파드의 IP를 기반으로 DNS 요청에 대해 응답합니다.

kubectl get configmap coredns -n kube-system -oyaml

 

4. DNS 사용 방법(+cluster.local을 쓰는이유)

pod와 쿠버네티스 서비스는 생성될 때 도메인을 가지고 있습니다.

 

pod 도메인:

pod-ipv4.namespace.pod.{DNS zone}

 

service 도메인:

service-name.namespace.svc.{DNS zone}

 

DNS zone은 coredns 설정에서 확인할 수 있습니다. coredns는 쿠버네티스 DNS zone을 cluster.local로 기본으로 정의합니다.

kubectl get configmap coredns -n kube-system -oyaml

 

따라서 coredns를 사용하는 쿠버네티스는 pod, 서비스 도메인을 아래규격으로 호출합니다.

pod 도메인:

pod-ipv4.namespace.pod.cluster.local

 

service 도메인:

service-name.namespace.svc.cluster.local

 

 

5. 예제

netshoot와 nginx를 예제로 사용했습니다.

 

5.1 pod 도메인 예제

첫 번째 예제는 pod 도메인 호출입니다. nginx-dbvxq pod의 도메인을 호출하려면, pod IP를 확인합니다.

 

nginx-dbvxq pod 도메인은 아래 규칙으로 만들어집니다. nslookup으로 도메인이 맞는지 확인해보세요.

10-244-1-26.default.pod.cluster.local

 

 

5.2 서비스 도메인 예제

두 번째 예제는 nginx 쿠버네티스 서비스 입니다. 쿠버네티스 서비스를 도메인으로 호출하려면 서비스 이름을 확인합니다.

 

nginx 서비스 도메인은 아래 규칙으로 만들어집니다. nslookup으로 도메인이 맞는지 확인해보세요.

 

참고자료

반응형