개발/개발공부

FQDN / Fully Qualified Domain Name, 도메인, Kubernetes cluster domain

치킨개발자 2023. 3. 12. 12:14
728x90

FQDN


Kubernetes 클러스터를 관리하다보면 도메인 이름 관련하여 한번쯤은 들어보게되는 FQDN

네트워크쪽이 복잡하게 구성되어있는 만큼 정확하게 알아두면 좋을 것 같아 찾아봤다.

 

웹에서 주소를 입력할 때 www.tistory.com / tistory.com / www.tistory.com. 어떤 것을 입력해야할지 불분명한 케이스가 있음 

www는 호스트를 의미하고, tistory.com 부분은 도메인을 의미한다.

FQDN은 www.tistory.com.을 의미한다. 

호스트와 도메인을 모두 합친 마지막에 .는 네임스페이스 경로를 명확히 하기 위해 포함된다. (Root를 의미)

https://ko.wikipedia.org/wiki/%EC%A0%84%EC%B2%B4_%EC%A3%BC%EC%86%8C_%EB%8F%84%EB%A9%94%EC%9D%B8_%EB%84%A4%EC%9E%84#/media/%ED%8C%8C%EC%9D%BC:DNS_schema.svg

계층구조로 되어있는 것을 보면 

1. root domain (.) 으로 시작

2. (.) 을 기준으로 도메인과 호스트를 차례대로 찾아감

3. .이 더이상 없으면 끝

이런식으로 구성되어 있다.

Kubernetes FQDN


Kubernetes에서 Pod에 적용된 FQDN설정을 확인해보려면 /etc/resolv.conf 파일을 확인해보면 된다.

% kubectl exec --tty --stdin chicken-dev -- /bin/sh
% cat /etc/resolv.conf
nameserver 10.96.0.10
search chicken-dev.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

chicken-dev라는 pod에 접속하여 /etc/resolv.conf 파일을 확인해본 결과이다.

nameserver는 DNS 쿼리를 보내는 곳, CoreDNS Service 오브젝트의 IP 주소

search는 DNS lookup할 도메인 주소의 경로들을 표시

ndots는 FQDN에 포함될 dot(.)의 최소 개수

를 의미한다.

timeout이 중요한 서비스를 할때 search 옵션에 대해 유의해야하는데,

test.com이라는 도메인으로 요청을 보낼 때

처음에는 test.com. 으로 요청을 하고, 차례로 search에 존재하는 목록을 뒤에 붙이며 질의한다.

1. test.com.
2. test.com.chicken-dev.svc.cluster.local.
3. test.com.svc.cluster.local.
4. test.com.cluster.local.

을 차례로 질의한다는 뜻이다.

timeout에 아주 민감한 서비스라면 문제가 생길 수 있다.

ndots는 dot의 개수로 정해진 값의 이하의 dot이라면 내부 질의를 통해 먼저 확인하는 것이고,

dot의 개수가 더 많다면 외부DNS에 질의를 날리는 그런 구조로 보인다.

 

일반적으로 파드에는 DNS 주소가 적용되는 기본 정책이 있다.

chicken-dev라는 네임스페이스의 파드에 IP 주소 172.17.0.3이 있고, 클러스터의 도메인 이름이 cluster.local이면, 파드는 다음과 같은 DNS 주소를 갖는다.

172-17-0-3.chicken-dev.pod.cluster.local.

서비스에 의해 노출된 모든 파드는 다음과 같은 DNS 주소를 갖는다.

<pod-ip-address>.<service-name>.<my-namespace>.svc.cluster-domain.example.

 

Pod별로 DNS정책을 정하는 방식도 존재하는데, 추가로 더 공부해봐야할 것 같다.

반응형