Google Kubernetes Engine의 Google Cloud Platform 서비스 사용

이 문서는 Google Kubernetes Engine(GKE)의 Google Cloud Platform(GCP) 서비스를 사용하는 방법을 보여줍니다. GKE에서 실행되는 앱에서 Cloud Storage 또는 Cloud SQL과 같은 GCP 서비스를 사용하는 경우 사용하는 서비스에 맞게 환경을 구성해야 합니다. 이 문서는 일반적인 아키텍처 패턴과 관련 작업을 설명하고 구성 예를 설명하는 문서에 대한 링크를 제공합니다.

목표

  • GCP 서비스를 사용하려면 서비스 계정과 비밀번호 키를 구성합니다.
  • Cloud SQL 데이터베이스를 사용하려면 Cloud SQL 프록시 Docker 이미지를 구성합니다.
  • Compute Engine VM에서 실행되는 커스텀 서비스를 사용하려면 내부 부하 분산을 구성합니다.
  • 고정 IP 주소가 필요한 외부 서비스를 사용하려면 NAT 게이트웨이를 구성합니다.
  • Stackdriver Logging을 사용하여 애플리케이션 로그를 기록합니다.

일반적인 작업 이해

다음 다이어그램은 GKE의 다른 서비스를 사용하는 일반적인 아키텍처 패턴을 보여줍니다.

GKE에서 GCP 서비스를 사용하기 위한 일반적인 아키텍처 패턴의 다이어그램

다음 작업을 통해 구성할 수 있습니다.

  • Cloud API를 통해 Cloud Storage와 같은 GCP 서비스를 사용하려면 서비스 계정에 적절한 역할을 할당하고 Kubernetes secret 객체를 사용하여 앱에 연결된 비밀번호 키를 제공합니다.
  • Cloud SQL을 사용하려면 서비스 계정에 적절한 역할을 할당하고 사이드카 pod 패턴을 사용하여 pod에 Cloud SQL 프록시를 추가합니다.
  • 확장 가능한 방식으로 Compute Engine VM에서 실행되는 커스텀 서비스를 사용하려면 내부 부하 분산을 구성합니다.
  • 고정 IP 주소가 필요한 외부 서비스를 사용하려면 NAT 게이트웨이를 구성합니다.
  • Logging에서 애플리케이션 로그를 기록하려면 앱에서 표준 출력(stdout) 및 표준 오류(stderr)에 로그 메시지를 작성하도록 합니다.

다음 섹션에는 구성 단계에 대한 링크가 있습니다.

Cloud API를 통한 GCP 서비스 사용

서비스 계정과 비밀번호 키를 사용하여 Cloud API를 통해 GCP 서비스를 사용할 수 있습니다. Kubernetes는 다음 다이어그램과 같이 클러스터 내에 사용자 인증 정보를 저장하고 이를 애플리케이션 포드에 연결할 수 있도록 secret 리소스 유형을 제공합니다.

여러 포드가 액세스하는 Kubernetes '비밀' 객체의 비밀번호 키를 보여주는 다이어그램

GKE에서 실행되는 앱의 Cloud Pub/Sub를 사용하는 방법을 보여주는 예는 서비스 계정으로 Cloud Platform 인증을 참조하세요. Cloud Storage, BigQuery, Cloud Datastore, Cloud Spanner와 같은 다른 GCP 서비스에도 동일한 단계를 적용할 수 있습니다. 그러나 서비스 계정 및 서비스에 대한 적절한 역할을 선택해야 하며 각 서비스와 관련된 단계를 수행해야 할 수도 있습니다.

이 접근 방식의 한 가지 예외는 Cloud SQL입니다. 이 서비스의 경우, Cloud SQL은 Cloud SQL 프록시 클라이언트가 데이터베이스에 안전하게 액세스하는 것을 요구하기 때문에 다른 접근 방식이 필요합니다. 이 내용은 다음 섹션에 설명되어 있습니다.

Cloud SQL 프록시와 함께 Cloud SQL 사용

GKE에서 실행되는 앱에서 Cloud SQL 인스턴스에 액세스하려면 Cloud SQL 프록시 Docker 이미지를 사용합니다. 애플리케이션이 동일한 포드에서 Cloud SQL 프록시 클라이언트를 사용할 수 있도록 이미지를 애플리케이션 포드에 연결합니다. Cloud SQL 프록시 클라이언트는 다음 다이어그램과 같이 앱과 Cloud SQL 인스턴스 간에 데이터를 안전하게 전송합니다.

컨테이너(보안 연결을 사용하여 Cloud SQL과 통신)에서 Cloud SQL 프록시와 통신하는 애플리케이션을 보여주는 다이어그램

Cloud SQL 프록시 이미지를 애플리케이션 포드에 연결하는 방법에 대한 자세한 내용은 Cloud SQL: GKE에서 연결을 참조하세요.

내부 부하 분산을 통한 외부 서비스 사용

GKE에서 실행되는 앱에서 외부 서비스에 액세스하려면 앱이 서비스 엔드포인트를 검색할 수 있도록 내부 또는 외부 이름 서비스를 사용합니다. 이름 서비스를 구성하는 세 가지 방법에 대한 설명은 클러스터 내부에서 외부 서비스로 연결을 참조하세요.

외부 서비스가 Compute Engine 인스턴스에서 실행되는 경우 내부 부하 분산을 사용하여 외부 서비스를 중복 및 확장 가능하게 만들 수 있습니다. 다음 다이어그램은 이 접근 방식을 보여줍니다.

Cloud Load Balancing(다른 서비스를 실행하는 Compute Engine의 여러 인스턴스와 차례로 통신)과 통신하는 컨테이너의 애플리케이션을 보여주는 다이어그램

Compute Engine 인스턴스를 실행하는 백엔드 서비스에 대해 내부 부하 분산을 설정하는 방법에 대한 자세한 내용은 내부 부하 분산 설정을 참조하세요.

NAT 게이트웨이를 통한 외부 서비스 사용

애플리케이션 포드를 호스팅하는 VM 노드는 GKE에서 실행되는 앱의 송신 패킷을 전송합니다. VM 노드에는 송신 패킷의 소스 IP 주소로 사용되는 임시 IP 주소가 있습니다. 이 때문에 패킷을 보내는 VM 노드에 따라 앱의 소스 IP 주소가 변경될 수 있습니다. 결과적으로 외부 서비스는 패킷이 동일한 애플리케이션에서 전송되더라도 여러 소스 IP 주소에서 패킷을 받습니다. 이는 정상적인 환경에서는 문제가 되지 않습니다. 그러나 일부 외부 서비스는 단일 소스에서만 패킷을 허용하도록 구성되어 있기 때문에 고정 IP 주소에서 패킷을 보내야 하는 경우가 있습니다.

이 경우에는 NAT 게이트웨이로 작동하는 Compute Engine 인스턴스를 사용할 수 있습니다. NAT 게이트웨이에 대한 커스텀 라우팅 규칙을 만들어 다음 다이어그램과 같이 고정 IP 주소로 외부 서비스에 패킷을 보낼 수 있습니다.

외부 서비스 앞에 있는 NAT 게이트웨이와 통신하기 위해 커스텀 라우팅을 사용하는 GKE를 보여주는 다이어그램

자세한 내용은 GKE와 함께 NAT 게이트웨이 사용고가용성 및 고대역폭 NAT 게이트웨이 빌드를 참조하세요. 이 문서에서는 NAT 게이트웨이 인스턴스를 배포하고 커스텀 라우팅 규칙을 만드는 방법에 대해 설명합니다.

VM 노드에 비공개 IP 주소만 있는 비공개 클러스터를 사용할 때 동일한 아키텍처를 적용할 수 있습니다. 이 경우 NAT 게이트웨이는 비공개 서브넷에서 패킷을 수신하고 단일 공개 IP 주소를 사용하여 외부 서비스로 패킷을 전송합니다.

Stackdriver Logging에 애플리케이션 로그 전송

Stackdriver Logging은 기본적으로 GKE가 전용 영구 데이터 저장소에서 컨테이너 및 시스템 로그를 자동으로 수집, 처리, 저장하도록 허용합니다. GKE는 다음 다이어그램과 같이 노드별 로깅 에이전트를 배포하여 포드의 stdoutstderr 로그를 읽습니다.

'stdout' 및 'stderr'에 쓰는 여러 애플리케이션 pod를 보여주는 다이어그램. 해당 내용은 로깅 에이전트에 기록된 다음 Logging에 기록됨

따라서 앱에서 stdoutstderr에 로그 메시지를 작성하도록 해야 합니다. 로깅을 사용하여 GKE에서 실행되는 앱의 로그를 수집, 쿼리 및 분석하는 방법에 대한 자세한 내용은 GKE - 로깅을 참조하세요.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...