CoreDNS의 역할

작성자 김아름 수정일 2022-10-12 08:47

#coredns, #dns, #kubernetes, #쿠버네티스

들어가며

  • DNS는 Domain Name Sysrtem 입니다.

  • 사람이 쉽게 해석할 수 있는 도메인 명을 IP로 변환하는 기능을 의미합니다.

  • 쿠버네티스 클러스터 내 pod에서 어떤 도메인을 찾고자 할 때 네임서버로 사용되는 CoreDNS에 대해 알아봅시다.



CoreDNS란?

CoreDNS는 service나 pod의 도메인 서비스는 지원해주는 DNS 서버입니다.

api가 service를 만들게 되면, coreDNS는 service의 이름과 service의 cluster IP를 DNS의 name IP로 등록합니다.

즉, CoreDNS는 클러스터를 지속적으로 모니터링 하며

새로운 서비스 혹은 pod가 추가되는 경우, 도메인 서버에 이를 업데이트합니다.


CoreDNS pod에 대한 service는 kube-system 네임스페이스에 kube-dns라는 이름으로 실행되고 있습니다.

kubectl get svc -n kube-system | grep dns
NAME                                            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                        AGE
kube-dns                                        ClusterIP   6.5.0.10     <none>        53/UDP,53/TCP,9153/TCP         75d


kubelet은 새로운 pod가 생성될 때, pod의 /etc/resolv.conf 파일에 kube-dns의 clusterIP를 네임서버로 등록합니다.

그 이유로 pod내에서 다른 pod로의 접속이 가능하게 됩니다.

/etc/resolv.conf
해당 파일은, DNS 서버 목록을 기록한 파일입니다.
컴퓨터는 /etc/hosts 파일에 도메인 명이 존재하지 않는 경우,
/etc/resolv.conf 파일에서 도메인 명을 검색할 도메인 서버의 주소를 찾습니다.


실제로, 한 pod내로 들어가 다른 pod로 접속해보겠습니다.

  1. 접속할 pod 선택
    kubectl get po -owide
    devainexus-0                                              1/1     Running     3          43d   6.2.219.75    master
    test-jupyter0e33b-0                                    2/2     Running     0          17h   6.2.219.122   master
    test-jupyter0e33b-0 pod로 접속한 뒤, devainexus-0  pod를 호출해 보겠습니다.

  2. pod 접속
    kubectl exec <pod name> -it -- /bin/bash

  3. /etc/resolv.conf 파일 확인
    cat /etc/resolv.conf
    nameserver 6.5.0.10
    search sodaflow.svc.cluster.local svc.cluster.local cluster.local
    options ndots:5
    위 결과값의 namserver가, kube-dns의 clusterIP임을 알 수 있습니다.

  4. 다른 pod 호출
    접속하고자 하는 pod의 service의 이름만 알고 있으면, coreDNS가 정보를 가지고 있기 때문에 curl명령으로 접속이 가능합니다.
    curl <service name>.<namespace>.svc.cluster.local
    
    curl devainexus.sodaflow.svc.cluster.local --head
    HTTP/1.1 200 OK
    Date: Wed, 21 Sep 2022 01:18:19 GMT
    Server: Nexus/3.29.2-02 (OSS)
    X-Content-Type-Options: nosniff
    X-Frame-Options: DENY
    X-XSS-Protection: 1; mode=block
    Content-Type: text/html
    Last-Modified: Wed, 21 Sep 2022 01:18:19 GMT
    Pragma: no-cache
    Cache-Control: no-cache, no-store, max-age=0, must-revalidate, post-check=0, pre-check=0
    Expires: 0
    Content-Length: 9332



마무리

  • CoreDNS의 역할에 대해 알아보았습니다.

  • 추가로, 실제로 pod내에서 다른 pod의 호출이 가능한 지를 확인해보았습니다.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300