이것이 점프 투 공작소

쿠버네티스의 DNS 서버와 Pod의 LivenessProbe 을 통한 상태확인 본문

k8s

쿠버네티스의 DNS 서버와 Pod의 LivenessProbe 을 통한 상태확인

겅겅겅 2023. 5. 19. 20:01

쿠버네티스가 어떻게 리소스간 디스커버리를 하는지 정리해보았습니다!

/etc/hosts

리눅스 시스템에 존재하는 도메인이름을 ip로 변경해주는 파일입니다.

왼쪽은 ip주소 오른쪽은 도메인이름으로 작성됩니다.

도메인 이름으로 요청을 보내게 되면 서버는 가장 먼저 로컬 캐시를 확인 후 /etc/hosts 파일을 찾아 ip 변환작업을 진행합니다.

메모리에 올라가있는 데이터이기에 etc/hosts 파일을 수정했다면 아래 명령어를 통해 network데몬을 재시작 해주어야합니다.

sudo /etc/init.d/networking restart

/etc/resolv.conf

DNS서버 다른말로 Name서버를 설정하는 파일입니다.

로컬에 존재하는 /etc/hosts 파일에 요청한 도메인에 대한 정보가 없다면 /etc/resolv.conf파일에 적힌 DNS서버에 해당 도메인에 대한 ip정보를 요청합니다.

/etc/resolv.conf 파일에 아래와 같이 적혀있다면 자동으로 찾을 도메인 주소가 적혀있는 것 입니다.

telnet www 라고만 요청을 해도 해당 search를 가진 서버에서는 www.naver.com 으로 인식합니다.

search naver.com

 

1. kube-dns (쿠버네티스의 DNS서버)

쿠버네티스에서는 최초 클러스터가 생성될때 kube-system namespace안 에 kube-dns 라는 리소스가 생성됩니다.

그 중 svc service/kube-dns를 쿠버네티스의 DNS서버로 사용합니다.

생성된 쿠버네티스 서비스들은 각각 resolv.conf 파일의 namespace 부분에 service/kube-dns IP를 가지게되며 이를 통해 서비스간 디스커버리를 할 수 있습니다.

 

2. 리소스의 etc/resolv.conf 파일 확인

kubectl exec 'pod이름' -n 'namespace이름' -- cat /etc/resolv.conf

위 명령어를 통해 생성된 pod의 resolv.conf 파일을 조회해보면 nameserver에 앞서 조회한 service/kube-dns IP를 확인 할 수 있습니다.

추가로 FQDN은 아래와 같은 형식으로 생성됩니다.

<service-name>.<service-namespace>.svc.cluster.local

3. DNS이름을 이용한 디스커버리 및 요청

kubectl exec <전송을 보내려는 pod이름> -n <전송을 보내려는 pod의 namespace> -- curl -s < 전송받을 서비스의 namespace명 >.<전송을 보내려는 서비스 이름>