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입니다.
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으로 도메인이 맞는지 확인해보세요.
참고자료
- kubedns 명세: https://github.com/kubernetes/dns/blob/master/docs/specification.md
- kubernetes dns 호출방법: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
- kubernetes에서 추천하는 kubedns pod: https://kubernetes.io/docs/tasks/access-application-cluster/configure-dns-cluster/
- kubeadm에서 coredns를 어떻게 설치할까?: https://coredns.io/plugins/kubernetes/
- coredns kubernetes syntax: https://coredns.io/plugins/kubernetes/
- dns 서비스 사용자 정의하기: https://kubernetes.io/ko/docs/tasks/administer-cluster/dns-custom-nameservers/
'전공영역 공부 기록' 카테고리의 다른 글
Ansible mysql 플러그인을 잘못 사용해서 발생한 오류 (0) | 2024.07.26 |
---|---|
의도하지 않는 DNS요청을 pod (0) | 2024.07.21 |
ansible playbook에서 AWS Secret 값을 가져오는 방법 (0) | 2024.07.16 |
harbor저장소에 docker login할 때 발생하는 오류 (0) | 2024.07.16 |
VPC CNI에서 network policy를 비활성화하다가 마주친 오류 (0) | 2024.07.16 |