서비스 디렉터리 개요

서비스 디렉터리는 Cloud 데이터 처리 추가 조항에 명시된 Google의 의무가 적용되는 서비스입니다.

서비스 디렉터리는 환경에 관계없이 일관되고 안정적인 방식으로 서비스를 게시, 검색, 연결할 수 있는 단일 위치입니다. 서비스 디렉터리는 Google Cloud, 멀티 클라우드, 온프레미스 환경의 서비스를 지원하며 단일 프로젝트에 최대 수천 개의 서비스와 엔드포인트를 확장할 수 있습니다.

서비스 디렉터리의 기능은 다음과 같습니다.

  • 네임스페이스, 서비스, 엔드포인트를 만들고 확인하기 위한 Registration and Lookup API
  • Cloud DNS 통합 서비스 디렉터리 영역을 사용하면 Virtual Private Cloud (VPC)에서 서비스를 제공할 수 있습니다.
  • 서비스 공개 상태 및 권한을 할당하고 제어하는 IAM 통합
  • 서비스 디렉터리와 상호작용하기 위한 기본 제공 Google Cloud CLIGoogle Cloud 콘솔 지원
  • 서비스 디렉터리 작업 모니터링, 감사, 디버깅을 위한 Cloud Monitoring 및 Cloud Logging 통합

서비스 디렉터리를 사용하는 이유

애플리케이션이 서비스를 채택함에 따라 서비스의 엔드포인트가 변경되면 서비스의 위치를 확인하기 어려워집니다. 하이브리드 환경에 배포된 서비스는 동일한 이름 지정 시스템을 공유하지 않을 수 있으므로 추가 장애물이 발생하여 서비스를 확인하고 연결하기가 어렵습니다. 문제를 설명하기 위해 다음을 살펴보세요.

간단한 API를 빌드하고 있고 코드에서 다른 애플리케이션을 호출해야 한다고 가정해 보겠습니다. 엔드포인트 정보가 정적 상태로 유지되는 경우 이러한 위치를 코드에 하드코딩하거나 작은 구성 파일에 저장할 수 있습니다. 그러나 마이크로서비스와 멀티 클라우드를 사용하면 인스턴스, 서비스, 환경이 모두 변경될 수 있으므로 이 문제를 해결하기가 훨씬 더 어려워집니다.

부하 분산기가 없는 서비스 디렉터리 (확대하려면 클릭)
다양한 변경 서비스 (확대하려면 클릭)

서비스 디렉터리를 사용하면 모든 서비스를 한곳에서 등록하고 HTTP, gRPC, DNS를 사용하여 확인할 수 있습니다.

이전 다이어그램을 다시 살펴보면서 이번에는 서비스 디렉터리를 추가해 보겠습니다. 다음 다이어그램에서 각 서비스 인스턴스는 서비스 디렉터리에 등록됩니다. 이러한 등록은 DNS에 즉시 반영되며 구현 및 환경과 관계없이 HTTP/gRPC를 사용하여 쿼리할 수 있습니다.

부하 분산기가 있는 서비스 디렉터리 (확대하려면 클릭)
부하 분산기가 있는 서비스 디렉터리 (확대하려면 클릭)

App Engine 및 GKE와 같은 여러 제품에서 작동하는 범용 서비스 이름을 만들 수 있습니다. Google Cloud DNS를 통해 이러한 서비스를 사용할 수 있습니다. 서비스 계정의 네트워크, 프로젝트, IAM 역할을 기반으로 서비스에 액세스 제어를 적용할 수 있습니다.

서비스 디렉터리는 다음 문제를 해결합니다.

  1. 상호 운용성: 서비스 디렉터리는 Google Cloud, 멀티 클라우드, 온프레미스에서 작동하는 범용 이름 지정 서비스입니다. 이러한 환경 간에 서비스를 이전하면서 동일한 서비스 이름을 사용하여 엔드포인트를 등록하고 확인할 수 있습니다.
  2. 서비스 관리: 서비스 디렉터리는 관리형 서비스입니다. 조직은 자체 서비스 레지스트리를 유지할 때 발생하는 고가용성, 중복, 확장, 유지보수 문제를 걱정할 필요가 없습니다.
  3. 액세스 제어: 서비스 디렉터리를 사용하면 IAM을 사용하여 서비스를 등록하고 확인할 수 있는 사용자를 제어할 수 있습니다. 팀, 서비스 계정, 조직에 서비스 디렉터리 역할을 할당합니다.
  4. 순수 DNS의 제한사항: DNS 리졸버는 TTL 및 캐싱을 준수하는 측면에서 신뢰할 수 없으며, 더 큰 레코드 크기를 처리할 수 없으며, 사용자에게 메타데이터를 제공하는 간단한 방법을 제공하지 않습니다. 서비스 디렉터리는 DNS 지원 외에도 서비스를 쿼리하고 확인하는 HTTP 및 gRPC API를 제공합니다.

서비스 디렉터리와 함께 Cloud DNS 사용

Cloud DNS는 Google의 인프라에서 실행되는 빠르고 확장 가능하며 안정적인 도메인 이름 시스템(DNS) 서비스입니다.

Cloud DNS는 공개 DNS 영역 외에도Google Cloud의 비공개 네트워크를 위한 관리형 내부 DNS 솔루션을 제공합니다. 비공개 DNS 영역을 사용하면 가상 머신 (VM) 인스턴스, 부하 분산기 또는 기타 리소스의 이름을 내부적으로 지정할 수 있습니다. 이러한 비공개 DNS 영역에 대한 DNS 쿼리는 비공개 네트워크로 제한됩니다.

다음 다이어그램은 서비스 디렉터리 영역을 사용하여 DNS 조회를 통해 서비스 이름을 사용할 수 있는 방법을 보여줍니다.

서비스 디렉터리와 함께 Cloud DNS 사용 (확대하려면 클릭)
서비스 디렉터리와 함께 Cloud DNS 사용 (확대하려면 클릭)

개별 구성요소 개요:

  1. 엔드포인트는 서비스 디렉터리 API를 사용하여 서비스 디렉터리에 직접 등록됩니다. 서비스 디렉터리에Google Cloud 및Google Cloud 가 아닌 서비스를 모두 등록할 수 있습니다.
  2. 외부 클라이언트와 내부 클라이언트 모두 https://servicedirectory.googleapis.com에서 이러한 서비스를 조회할 수 있습니다.
  3. DNS 요청을 사용 설정하려면 서비스 디렉터리 네임스페이스와 연결된 Cloud DNS에서 서비스 디렉터리 영역을 만듭니다.
  4. 내부 클라이언트는 DNS, HTTP, gRPC를 사용하여 이 서비스를 확인할 수 있습니다. 외부 클라이언트 (비공개 네트워크에 있지 않은 클라이언트)는 HTTP 또는 gRPC를 사용하여 서비스 이름을 확인해야 합니다.

구성 예시

DNS를 통해 서비스를 노출하는 방법

다음 다이어그램은 마이크로서비스 아키텍처가 서비스 디렉터리에서 모델링되고 DNS를 사용하여 제공되는 방식을 보여줍니다. 서비스 디렉터리는 서비스와 엔드포인트를 완전히 유지하지만 비공개 영역은 Cloud DNS에 있습니다.

DNS를 통해 서비스 노출 (확대하려면 클릭)
DNS를 통해 서비스 노출 (확대하려면 클릭)

이 다이어그램 (왼쪽)에서 payments 서비스는 이름이 backend-namespace이고 리전이 us-east1이며 프로젝트가 gcp-project인 네임스페이스에 등록되어 있습니다. 네임스페이스가 비공개 영역 example.com에 연결되어 있습니다.

DNS 조회를 수행하기 위해 클라이언트는 도메인 이름 _payments._tcp.payments.example.comSRV 레코드를 요청합니다. 이 레코드는 결제 서비스의 엔드포인트의 포트 번호 및 주소 레코드로 확인됩니다.

다음 단계

  • 서비스 디렉터리 네임스페이스를 설정하고, 네임스페이스에서 서비스를 만들고, 서비스에 엔드포인트를 할당하는 방법을 알아보려면 서비스 디렉터리 구성을 참고하세요.
  • 기존 네임스페이스를 활용하는 서비스 디렉터리 영역을 만드는 방법을 알아보려면 서비스 디렉터리 DNS 영역 구성을 참고하세요.
  • DNS를 사용하여 기존 서비스 디렉터리 영역을 쿼리하는 방법을 알아보려면 DNS를 사용하여 쿼리를 참고하세요.
  • 서비스 디렉터리를 사용할 때 발생할 수 있는 일반적인 문제에 대한 해결책을 찾으려면 문제 해결을 참고하세요.