[Kubernetes] CoreDNS

bluewhale·2021년 8월 3일
0

kubernetes

목록 보기
6/11
post-thumbnail

DNS란?

DNS는 Domain Name System의 약자이다. DNS는 사람이 쉽게 해석할 수 있는 도메인명(ex, www.bluewhale.com)을 IP 주소(179.10.2.10)로 변환하는 기능을 의미한다. DNS는 /etc/hosts 파일에 저장된 도메인-IP 맵핑 정보를 읽거나, 이를 갖고 있는 네임 서버와의 통신을 통해 이루어진다.

DNS in Linux

Linux 환경에서 DNS를 사용하는 방법은 크게 2가지가 있다.

/etc/hosts

/etc/hosts 파일은 컴퓨터가 도메인명으로 IP를 찾을 때 가장 먼저 열어보는 파일이다. 윈도우에서는 C:\Windows\System32\drivers\etc\hosts 경로에 파일이 위치한다.

파일을 열어보면 아래와 같이 localhost가 이미 추가되어 있는 것을 볼 수 있다.

$ cat /etc/hosts

# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost

/etc/hosts 파일에서 localhost외에 127.0.0.1에 대한 새로운 도메인명(ex, loopback)을 추가하고 아래의 명령어로 network 데몬을 재실행하면, 새로운 도메인 명이 정상적으로 추가된 것을 확인할 수 있다.

$ cat /etc/hosts
...
127.0.0.1	localhost loopback
...
# linux
$ sudo /etc/init.d/networking restart

# mac
$ sudo ifconfig en0 down
$ sudo ifconfig en0 up

$ curl http://loopback:8080
Hello World!

/etc/resolv.conf

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

통신사나 PC 환경에 따라, 도메인 서버의 주소가 다를 수 있다. 대표적인 도메인 서버로는 구글의 8.8.8.8이 있다.

$ cat /etc/resolv.conf

nameserver 8.8.8.8

DNS in Kubernetes (CoreDNS)

CoreDNS

CoreDNS는 CNCF 재단에서 관리하는 프로젝트이다. CoreDNS는 v.1.12 이후로 kubernetes에서 사용을 권장하고 있는 도메인 서버 서비스이다. CoreDNS는 클러스터를 지속적으로 모니터링하며, 새로운 Service 혹은 Pod이 추가되는 경우, 도메인 서버에 이를 업데이트한다.

minikube로 클러스터를 설치한 경우, CoreDNS 서비스가 이미 자동으로 실행되고 있는 것을 확인할 수 있다.

CoreDNS Pod에 대한 서비스는 kube-system 네임스페이스에 kube-dns라는 이름으로 실행되고 있다.

DNS setting in Pod

kubelet은 새로운 Pod이 생성될 때에, Pod의 /etc/resolv.conf 파일에 clusterDNS 서버의 IP 주소를 추가하여, Pod에서 my-service.default.svc.cluster.local과 같은 클러스터 내부의 DNS를 사용할 수 있도록 해준다.

kubelet은 바이너리 실행 시, clusterDNS와 관련된 설정을 인자로 받는다. minikube에서는 아래의 경로에서 찾을 수 있다.

$ minikube ssh
$ sudo cat /var/lib/kubelet/config.yaml

...
clusterDNS: # cluster DNS 서버의 주소
- 10.96.0.10
...

실제로, kubelet에 의해 실행된 Pod에 접속하여, /etc/resolv.conf 파일을 열어보면 CoreDNS의 IP 주소가 네임서버로 추가되어 있는 것을 확인할 수 있다.

$ kubectl exec -it my-pod -- /bin/sh
$ cat /etc/resolv.conf

nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
profile
안녕하세요

0개의 댓글