FQDN
Kubernetes 클러스터를 관리하다보면 도메인 이름 관련하여 한번쯤은 들어보게되는 FQDN
네트워크쪽이 복잡하게 구성되어있는 만큼 정확하게 알아두면 좋을 것 같아 찾아봤다.
웹에서 주소를 입력할 때 www.tistory.com / tistory.com / www.tistory.com. 어떤 것을 입력해야할지 불분명한 케이스가 있음
www는 호스트를 의미하고, tistory.com 부분은 도메인을 의미한다.
FQDN은 www.tistory.com.을 의미한다.
호스트와 도메인을 모두 합친 마지막에 .는 네임스페이스 경로를 명확히 하기 위해 포함된다. (Root를 의미)
계층구조로 되어있는 것을 보면
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정책을 정하는 방식도 존재하는데, 추가로 더 공부해봐야할 것 같다.
'개발 > 개발공부' 카테고리의 다른 글
Kubernetes cordon, drain / pod schedule, 제거, node (1) | 2023.04.01 |
---|---|
Go-git / golang, git client, 깃, github (0) | 2023.03.19 |
React StyledComponents / 리액트, css, style, 기능 (0) | 2023.03.06 |
Golang ORM SQLBoiler / Go, DB, ORM (0) | 2023.03.03 |
Golang ORM library / gorm, xorm, sqlboiler, 비교 (2) | 2023.02.19 |
댓글