서비스 검색 및 DNS


이 페이지에서는 Google Kubernetes Engine(GKE)에서 서비스 검색 및 클러스터 DNS를 구현하는 방법을 설명합니다.

서비스 검색

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

GKE의 클러스터 DNS

새 Autopilot 클러스터는 Cloud DNS를 사용하며 DNS 제공업체를 수정할 수 없습니다.

표준 클러스터의 경우 GKE는 서비스 이름 및 외부 이름을 확인할 수 있도록 다음과 같은 클러스터 DNS 옵션을 제공합니다.

  • kube-dns: 기본적으로 모든 GKE 클러스터에 배포되는 클러스터 부가기능입니다.
  • Cloud DNS: Cloud DNS를 활용하고 kube-dns와 같이 클러스터 내 DNS 서버를 관리할 필요가 없는 클라우드 관리형 클러스터 DNS 인프라입니다.

GKE용 서비스 디렉터리에 서비스를 등록할 수도 있습니다.

GKE는 또한 kube-dns 또는 Cloud DNS와 함께 사용할 수 있는 선택적 부가기능으로 NodeLocal DNSCache를 제공합니다.

kube-dns

kube-dns는 표준 클러스터의 기본 DNS 제공업체이며 1.25.9-gke.400 및 1.26.4-gke.500 이전 버전을 실행하는 Autopilot 클러스터의 유일한 DNS 제공업체입니다.

kube-dns는 kube-dns 포드를 클러스터의 노드에 예약하는 배포로 실행됩니다.

kube-dns에 대한 자세한 내용은 kube-dns 사용을 참조하세요.

Cloud DNS

Cloud DNS는 버전 1.25.9-gke.400 이상과 버전 1.26.4-gke.500 이상을 실행하는 Autopilot 클러스터의 유일한 DNS 제공업체입니다.

Cloud DNS는 kube-dns와 같이 클러스터가 호스팅되는 DNS 제공업체 없이도 포드 및 서비스 DNS 변환 기능을 제공합니다. Cloud DNS 컨트롤러는 ClusterIP, 헤드리스 및 외부 이름 서비스용 Cloud DNS에 포드 및 서비스의 DNS 레코드를 자동으로 프로비저닝합니다.

Cloud DNS를 구성하는 방법은 GKE에 Cloud DNS 사용을 참조하세요.

NodeLocal DNSCache

NodeLocal DNSCache는 모든 클러스터 노드에서 DNS 캐시 포드를 예약하는 DaemonSet로 실행됩니다. 이 DNS 캐시는 DNS 조회 지연 시간을 개선하고 DNS 조회 시간을 더 일관성 있게 하며 kube-dns 또는 Cloud DNS에 대한 DNS 쿼리 수를 줄일 수 있습니다.

NodeLocal DNSCache를 구성하는 방법은 NodeLocal DNSCache 설정을 참조하세요.

단일 클러스터 외부 서비스 검색

다음 방법 중 하나를 사용하여 단일 클러스터 범위를 벗어나는 서비스 검색을 구성할 수 있습니다.

Cloud DNS VPC 범위

클러스터 DNS에 Cloud DNS를 사용하는 클러스터는 GKE 클러스터 범위 또는 Virtual Private Cloud(VPC) 범위라는 두 가지 모드 중 하나로 작동해야 합니다.

클러스터 범위에서 클러스터를 구성할 때 DNS 레코드는 <svc>.<ns>.svc.cluster.local 스키마를 사용하여 클러스터 내에서만 확인할 수 있습니다. 이는 kube-dns와 동일한 동작입니다.

VPC 범위에서 클러스터를 구성하면 클러스터 서비스의 DNS 레코드를 전체 VPC 내에서 확인할 수 있습니다. 즉, 동일한 VPC의 클라이언트 또는 Cloud VPN이나 Cloud Interconnect를 통해 VPC에 연결된 클라이언트는 GKE 클러스터 서비스의 DNS 레코드를 직접 확인할 수 있습니다. 비GKE 클라이언트가 DNS 레코드를 확인할 수 있도록 고유한 클러스터 DNS 이름을 구성할 수도 있습니다. 예를 들어 비GKE 클라이언트는 gke-svc.ns.svc.cluster2에서 gke-svc.ns.svc.cluster1을 확인할 수 있습니다.

VPC 범위 DNS에 대한 자세한 내용은 GKE에 Cloud DNS 사용을 참조하세요.

멀티 클러스터 서비스

멀티 클러스터 서비스는 기존 서비스 객체를 활용하는 GKE에 멀티 클러스터 서비스 검색 및 부하 분산을 제공합니다. 멀티 클러스터 서비스는 단일 가상 IP 주소로 모든 GKE 클러스터에서 검색 및 액세스할 수 있습니다. 이 동작은 단일 클러스터에서 액세스할 수 있는 ClusterIP 서비스와 동일합니다.

멀티 클러스터 서비스는 클러스터에서 서비스를 집계하고 <svc>.<ns>.svc.clusterset.local 스키마를 사용하여 단일 멀티 클러스터 DNS 레코드로 주소를 지정할 수 있도록 합니다. 이는 멀티 클러스터 서비스를 사용하는 모든 GKE 클러스터에서 일관성 있고 주소 지정이 가능한 특정 서비스에 고유한 이름을 제공합니다.

멀티 클러스터 서비스에 대한 자세한 내용은 멀티 클러스터 서비스를 참조하세요.

GKE용 서비스 디렉터리

GKE용 서비스 디렉터리는 모든 Kubernetes 배포에서 단일 서비스 뷰를 제공합니다. 서비스 디렉터리를 통해 GKE 및 비GKE 서비스를 모두 단일 레지스트리에 등록할 수 있습니다. 서비스 디렉터리는 다음이 필요한 경우에 특히 유용합니다.

  • Kubernetes 및 비Kubernetes 애플리케이션이 서로를 검색하는 단일 레지스트리
  • 관리형 서비스 검색 도구
  • 다른 클라이언트에서 액세스할 수 있는 서비스 메타데이터 저장
  • 서비스 수준별로 액세스 권한 설정

서비스 디렉터리 서비스는 DNS, HTTP, gRPC를 통해 확인할 수 있습니다. 서비스 디렉터리는 Cloud DNS와 통합되며 서비스 디렉터리의 서비스와 일치하는 Cloud DNS 레코드를 채울 수 있습니다.

자세한 내용은 GKE용 서비스 디렉터리 구성을 참조하세요.

/etc/resolv.conf

ClusterFirst DNS 정책을 사용하는 포드의 경우 /etc/resolv.conf 값은 클러스터에서 사용 설정된 기능에 따라 다릅니다.

GKE용 Cloud DNS NodeLocal DNSCache /etc/resolv.conf
사용 설정됨 사용 설정됨 169.254.20.10
사용 설정됨 사용 중지됨 169.254.169.254
사용 중지됨 사용 설정됨 kube-dns 서비스 IP 주소
사용 중지됨 사용 중지됨 kube-dns 서비스 IP 주소

다음 단계

  • GKE용 Cloud DNS 사용 방법 알아보기
  • NodeLocal DNSCache를 사용하여 대량의 DNS 쿼리가 필요한 클러스터에 확장 가능한 DNS 변환 기능을 제공하는 방법 알아보기