Cloud/k8s-CKA

[CKA] 30. CoreDNS

jinkwon.kim 2023. 7. 25. 22:49
728x90
반응형

개요

kubernetes에서 DNS가 어떻게 동작하는지 알아보겠습니다. 

DNS Record 할당 범위

k8s에서는 Service와 POD를 위해서 DNS Record를 생성합니다.

Core DNS의 동작 범위

Core DNS Record 규칙

전체 그림

DNS Recor설정 상세

Service가 생성되면 CoreDNS에 아래와 같은 DNS  Record가 자동으로 생성이 됩니다.

그래서 DNS Record 덕분에 namespace를 분리하면 동일한 이름의 service를 생성 가능 합니다.
 
첫 번째 줄을 풀어서 설명하면 
web-service는 apps라는 namespace에 있고 type은 svc(service)이고 cluster.local에 존재하며 IP를 10.107.37.188이라고
해석을 할 수 있습니다. 

Pod에서의 DNS 설정 확인

Pod에서는 /etc/resolv.conf 에서 현재  설정된 dns 설정을 볼 수 있습니다. 
그리고 여기에서 search 항목이 핵심입니다.  모든 domain에 대한 검색 설정이 걸려있기 때문입니다.
 
아래는 /etc/resolv.conf 설정 파일입니다. 

search default.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.96.0.10
options ndots:5

결론적으로 우리가 service에 대하여 FQDN(Fully Qualified Domain Name)이 가능했던 이유는 search 항목에서 모든 domain에 대한 검색 설정이 걸려있기 때문입니다. 참고로 Pod에 대한 domain 설정은 기본적으로 설정되어있지 않습니다. Pod에 대한 FQDN 설정을 하려면 cluster 초기 단계부터 아래와 같은 설정을 추가해주어야 합니다. 
 
"Pod의 DNS를 활성화하려면, Kubernetes 클러스터를 설정할 때 --kubelet-config 플래그를 사용하고, KubeletConfiguration에서 podDNSConfig 항목을 다음과 같이 설정해야 합니다."
 

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
clusterDomain: cluster.local
clusterDNS:
  - 10.96.0.10
podDNSPolicy: "ClusterFirstWithHostNet"

하지만 이설정은 일반적이지는 않으며 service를 통한 접근을 권장하고 있습니다. 그런데도 혹시나 저와 같이 테스트 한번 해보고 싶으신 분들은 container안의 /etc/resolv.conf 에서 search 항목을 아래와 같이 pod에 대한 domain을 추가하면 정상 동작합니다. 
search default.svc.cluster.local svc.cluster.local cluster.local default.pod.cluster.local pod.cluster.local

CoreDNS 설정 확인

CoreDNS 설정은 configmap으로 되어있어서 아래 명령으로 확인 가능 합니다. 단 DNS Record는 확인이 안 됩니다.
CoreDNS에 DNS Record는 직접 붙는 것은 어렵기 때문에 nslookup이나 dig 등으로밖에 확인 안 됩니다.
 #kubectl describe configmap coredns -n kube-system

ame:         coredns
Namespace:    kube-system
Labels:       <none>
Annotations:  <none>

Data
====
Corefile:
----
.:53 {
    errors
    health {
       lameduck 5s
    }
    ready
    kubernetes cluster.local in-addr.arpa ip6.arpa {
       pods insecure
       fallthrough in-addr.arpa ip6.arpa
       ttl 30
    }
    prometheus :9153
    forward . /etc/resolv.conf {
       max_concurrent 1000
    }
    cache 30
    loop
    reload
    loadbalance
}


BinaryData
====

Events:  <none>

정리

CoreDNS는 k8s를 위한 DNS Server이며 Service 생성/삭제 시 자동으로 CoreDNS에 등록/삭제가 된다.
CoreDNS는 service를 위해서 대부분 사용이됩니다.

Next Post

[CKA] 31. service - plugin

728x90
반응형

'Cloud > k8s-CKA' 카테고리의 다른 글

[CKA] 32. docker의 image layer관리 (storage driver)  (0) 2023.08.15
[CKA] 31. service - plugin  (0) 2023.07.27
[CKA] - network 문제 해결 tip  (0) 2023.07.25
[CKA] 29. service - default  (0) 2023.07.23
[CKA] 28. Pod의 Networking 과 Weave CNI  (0) 2023.07.20