Cloud Endpoints의 아키텍처 개요

Endpoints는 서비스, 런타임, 도구로 구성된 분산형 API 관리 시스템입니다. Endpoints는 관리, 모니터링, 인증 기능을 제공합니다.

Endpoints에 포함된 구성요소는 다음과 같습니다.

  • ESP(Extensible Service Proxy) - Endpoints 기능을 삽입합니다.

  • Service Control - API 관리 규칙을 적용합니다.

  • Service Management - API 관리 규칙을 구성합니다.

  • Cloud SDK - 배포 및 관리를 수행합니다.

  • Google Cloud Console - 로깅, 모니터링, 공유를 수행합니다.

Endpoints 아키텍처

Endpoints 아키텍처

Endpoints 구성요소

ESP

ESP는 백엔드 앞에서 실행되고 인증, 모니터링, 로깅과 같은 Endpoints 기능을 삽입하는 NGINX 기반 프록시입니다. ESP는 Service Management에서 서비스 구성을 검색하여 수신 요청의 유효성을 검사하는데 사용합니다.

ESP는 개발자가 컨테이너화된 환경에서 이를 배포하고 JWT 및 Google ID 토큰을 검증할 수 있도록 설계되었습니다. 경량성과 고성능을 유지하기 위해 많은 캐싱 및 비동기 호출과 같은 다양한 기술이 적용되어 있습니다.

Service Control

Service Control은 키 인증, 모니터링, 로깅과 같은 API 관리 규칙을 런타임에 적용합니다. Service Control은 다음과 같은 방법을 제공합니다.

  • 확인 - 인증과 API 키를 확인하고 호출이 허용되는지 여부를 나타냅니다.

  • 보고 - 로깅와 모니터링을 위한 레코드 시스템을 알립니다.

Service Management

OpenAPI 사양을 사용하여 API의 노출 영역과 동작을 Endpoints 구성이라고 하는 텍스트 파일에 기술합니다. Cloud SDK로 Service Management에 Endpoints 구성을 배포하여 API 관리 규칙을 구성합니다. 다른 개발자와의 API 공유, 여러 프로젝트에서 API 사용 설정 또는 사용 중지, API 키 생성과 같은 다른 구성 관련 작업도 여기에서 수행됩니다.

Cloud SDK

Cloud SDK는 여러 Google Cloud 서비스를 호출하기 위해 사용할 수 있는 gcloud 명령줄 도구를 제공합니다. gcloud 명령줄 도구를 사용하여 Endpoints 구성을 Service Management로 배포할 수 있습니다.

Google Cloud Console

Cloud Console은 Google Cloud를 위한 그래픽 사용자 인터페이스입니다. Endpoints는 Cloud Console을 사용하여 ESP에서 전송되고 Service Control에서 기록되는 모니터링 및 로깅 데이터를 노출하고, API를 다른 개발자와 공유하고, 다른 개발자가 API 호출을 위해 API 키를 생성하도록 지원합니다.

배포 시나리오

ESP는 백엔드의 각 인스턴스에 따라 컨테이너에 배포되도록 설계되었습니다. 이 서버-로컬 토폴로지는 웹 대면 API는 물론 마이크로 서비스에도 적합합니다. 이 토폴로지는 일반적으로 중앙 집중식 프록시와 관련된 네트워크 홉을 방지하고, 고성능은 물론 확장성이 뛰어난 API 관리를 가능하게 합니다.

일반적으로 부하 분산은 트래픽이 ESP에 도달하기 전에 적용됩니다. App Engine에서 부하 분산은 자동으로 수행됩니다. Compute Engine에서는 Cloud Load Balancing을 통해 수행됩니다. Kubernetes 배포의 경우에는 부하 분산을 위해 인그레스 프록시를 사용할 수 있습니다. Google Kubernetes Engine에서는 부하 분산을 위해 Cloud Load Balancing 또는 인그레스 프록시를 사용할 수 있습니다.

시작 후 ESP는 Service Management에서 서비스 구성을 가져옵니다. 서비스 구성은 OpenAPI 사양 또는 서비스 구성 YAML 파일인 gRPC에서 생성되며, 인증이 필요한 메서드, API 키가 필요한 메서드와 같이 정책과 함께 관리할 API 영역을 ESP에 알려줍니다.

요청 라우팅

요청이 수신되면 ESP가 Cloud Trace의 trace 토큰을 만듭니다.

그런 다음 ESP는 API의 영역과 일치하는 들어오는 요청 경로를 찾습니다. 일치하는 경로를 찾으면 ESP가 지정된 메서드에 대한 인증 단계를 수행합니다.

JWT 검증이 필요한 경우, ESP는 서명자에 대해 적절한 공개 키를 사용하여 인증을 검증하고, JWT에서 대상 필드를 검증합니다. API 키가 필요한 경우, ESP는 Service Control API를 호출하여 키를 검증합니다.

Service Control은 검증할 키를 조회하고, 키와 연관된 프로젝트가 API를 사용 설정했는지 확인합니다. 키가 유효하지 않거나 프로젝트가 API를 사용 설정하지 않았으면 호출이 거부되고 Service Control API를 통해 로깅됩니다.

Service Control이 키를 성공적으로 검증하면 모든 원본 헤더가 포함된 요청과 JWT 검증 헤더(해당하는 경우)가 백엔드에 전달됩니다.

응답이 백엔드에서 수신되면 ESP는 응답을 호출자에게 반환하고 최종 타이밍 정보를 Trace로 전송합니다. Service Control API가 호출 포인트를 로깅하여 측정항목과 로그를 적절한 대상에 기록합니다.

Kubernetes의 ESP

다음 다이어그램은 ESP가 API 서비스 애플리케이션 컨테이너 앞에 있는 사이드카 컨테이너로 실행되는 전체 아키텍처를 보여줍니다. my-apiAPI는 my-api.com에 호스팅되고 Kubernetes 서비스를 통해 지원됩니다.

Kubernetes의 Endpoints 개요

다음 단계