서비스 검색 및 DNS

이 페이지에서는 Google Kubernetes Engine(GKE)에서 서비스 검색 및 관리형 DNS를 구현하는 방법을 설명합니다. Kubernetes 클러스터의 DNS 사용 방법에 대한 일반적인 개요는 서비스 및 Pod용 DNS를 참조하세요.

서비스 검색 및 kube-dns 부가기능

Kubernetes에서 서비스 검색은 서비스의 IP 주소에 매핑되는 자동 생성 서비스 이름으로 구현됩니다. 서비스 이름은 표준 사양: my-svc.my-namespace.svc.my-zone을 따릅니다. Pod는 example.com과 같은 외부 서비스에도 이름을 통해 액세스할 수 있습니다. Kubernetes의 DNS 동작에 대한 자세한 내용은 서비스 및 Pod용 DNS를 참조하세요.

GKE는 서비스 이름 확인 및 외부 이름 확인을 위해 관리형 DNS를 제공합니다. 이는 모든 GKE 클러스터에 기본적으로 배포되는 클러스터 부가기능인 kube-dns에 의해 구현됩니다. kube-dns는 중복 kube-dns Pod를 클러스터의 노드에 예약하는 배포로 실행합니다. kube-dns Pod는 kube-system 네임스페이스에 있습니다. kube-dns 배포는 kube-dns Pod를 그룹화하여 단일 IP 주소에 제공하는 해당 서비스를 통해 액세스합니다. 기본적으로 클러스터의 모든 Pod는이 서비스를 사용하여 DNS 쿼리를 확인합니다.

이전 단락에서 설명한 Pod와 kube-dns 서비스 간의 관계를 보여주는 다이어그램

kube-dns는 클러스터의 DNS 요구에 맞게 확장됩니다. 이 확장은 모든 GKE 클러스터에 기본적으로 배포되는 kube-dns-autoscaler가 제어합니다. kube-dns-autoscaler는 클러스터의 노드 및 코어 수에 따라 kube-dns 배포의 복제본 수를 조정합니다.

Pod DNS 구성 방법

각 노드에서 실행되는 kubelet 에이전트는 Pod의 etc/resolv.conf를 구성하여 kube-dns 서비스의 ClusterIP를 사용합니다. 이 구성의 예시는 아래에 나와 있으며, 이 예시에서 kube-dns 서비스의 IP 주소는 10.0.0.10입니다(이 IP 주소는 다른 클러스터에서 달라짐).

# cat /etc/resolv.conf
nameserver 10.0.0.10
search default.svc.cluster.local svc.cluster.local cluster.local c.my-project-id.internal google.internal
options ndots:5

kube-dns는 클러스터 도메인(cluster.local)의 신뢰할 수 있는 네임서버이며 외부 이름을 재귀적으로 분석합니다. 닉네임은 myservice와 같이 정규화되지 않은 이름이며 지역 검색 경로로 먼저 채워집니다. 예를 들면 myservice.default.svc.cluster.local, myservice.svc.cluster.local, myservice.cluster.local, myservice.c.my-project-id.internal, myservice.google.internal입니다.

다음 단계

  • 대용량의 DNS 쿼리가 필요한 클러스터에 NodeLocal DNSCache를 사용하여 확장 가능한 DNS 확인을 제공하는 방법을 알아봅니다.