Private Service Connect 정보


이 문서에서는 Google Kubernetes Engine (GKE) 클러스터의 Private Service Connect에 대해 간략하게 설명합니다. 계속 읽기 전에 VPC 네트워크와 IP 주소 지정과 같은 네트워킹 기본사항을 숙지해야 합니다.

개요

Private Service Connect (PSC)는 Google Cloud의 네트워킹 인프라의 일부로, GKE 클러스터가 Google Cloud 또는 온프레미스 환경에 호스팅된 서비스를 공개적으로 노출하지 않고도 안전하고 비공개로 사용할 수 있도록 합니다. PSC를 사용하면 Google Cloud 가 컨트롤 플레인에 내부 IP 주소를 할당하여 요청을 GKE 클러스터 관리 API로 전달하므로 트래픽이 공개 인터넷을 거치지 않고도 클러스터를 관리할 수 있습니다. PSC는 서비스 네트워킹 접근 방식을 통해 여러 네트워크를 연결하는 데 도움이 되는 일관된 프레임워크를 제공하고 서비스 제작자와 소비자가 VPC 내부의 내부 IP 주소를 사용하여 통신할 수 있도록 합니다.

PSC 인프라를 사용하는 GKE 클러스터에서는 클러스터 제어 영역과 노드 간의 모든 통신이 비공개로 이루어집니다. 복잡한 VPC 피어링 구성을 관리할 필요 없이 컨트롤 플레인 및 노드 풀 수준에서 클러스터를 격리할 수도 있습니다.

Private Service Connect를 사용 설정한 클러스터의 이점

보안: PSC는 GKE 클러스터 제어 영역과 노드 간에 비공개 연결을 설정하여 트래픽을 Google 네트워크 내에만 유지하고 공개 인터넷에서 차단합니다. 이렇게 하면 무단 액세스의 위험이 최소화됩니다.

간소화된 연결: PSC 클러스터의 경우 제어 영역 엔드포인트의 특정 서브넷을 관리할 필요가 없습니다. PSC 엔드포인트는 클러스터 네트워크 내에 완전히 위치하므로 복잡한 네트워크 구성이 필요하지 않습니다.

확장성: PSC가 사용 설정된 클러스터를 최대 1,000개까지 만들어 높은 리소스 요구사항을 충족할 수 있습니다. 반면 VPC 네트워크 피어링을 사용하는 클러스터의 경우 영역 또는 리전당 최대 75개의 클러스터를 만들 수 있습니다.

맞춤설정 가능한 구성: PSC를 사용하면 클러스터 제어 영역, 노드 풀 또는 워크로드의 격리를 독립적으로 제어하여 클러스터의 확장성과 보안을 강화할 수 있습니다. 클러스터에서 비공개 및 공개 노드 풀을 혼합하여 구성할 수 있습니다.

유연성: 클러스터를 만든 후 언제든지 격리 설정을 변경할 수 있습니다. 새 클러스터를 만들지 않고도 제어 영역에 대한 공개 액세스와 비공개 액세스 간에 전환하고 인터넷에서 노드 풀 및 워크로드 액세스 가능성을 변경할 수 있습니다.

제한사항

제어 영역에는 내부 엔드포인트와 외부 엔드포인트가 모두 있습니다. 제어 영역의 내부 엔드포인트는 구성하는 웹훅의 URL에 있는 내부 IP 주소를 지원하지 않습니다. URL에 내부 IP 주소가 있는 Webhook이 있는 경우 다음 단계에 따라 이 비호환성을 완화할 수 있습니다.

  1. 선택자 없이 헤드리스 서비스를 만듭니다. 그러면 이 서비스가 트래픽을 전달하는 엔드포인트를 수동으로 관리할 수 있습니다. 다음 예는 포트 3000에서 webhook을 리슨하는 서비스를 보여줍니다.

    apiVersion: v1
    kind: Service
    metadata:
      name: <service-name>
    spec:
      clusterIP: None
      ports:
      - port: 3000
        targetPort: 3000
    
  2. 필요한 대상의 해당 엔드포인트를 만듭니다. 예를 들어 웹훅이 URL에서 내부 IP 주소 10.0.0.1를 사용하는 경우 다음 엔드포인트를 만들 수 있습니다.

    apiVersion: v1
    kind: Endpoints
    metadata:
      name: <service-name>
    subsets:
    - addresses:
      - ip: 10.0.0.1
      ports:
      - port: 3000
    
  3. 웹훅 구성 업데이트: 웹훅 구성에서 내부 IP 주소가 포함된 URL을 삭제하고 첫 번째 단계에서 만든 서비스를 추가합니다. 예를 들면 다음과 같습니다.

    ...
    kind: ValidatingWebhookConfiguration
    ...
    webhooks:
    - name: <webhook-name>
    ...
      clientConfig:
        service:
          name: <service-name>
          namespace: <namespace>
          path: "/validate"
          port: 3000
    

    위 예시에서 웹훅의 경로는 /validate이고 포트 3000을 리슨합니다.

  4. 웹훅 확인: 웹훅이 API 서버 요청을 계속 수신할 수 있고 맞춤 로직에 따라 요청을 승인, 거부 또는 수정할 수 있는지 확인합니다. webhook을 확인하는 중에 오류가 발생하면 새 인증서를 만든 다음 새 인증서 세부정보로 webhook 구성을 업데이트해야 할 수 있습니다. 예를 들면 다음과 같습니다.

    ...
    kind: ValidatingWebhookConfiguration
    ...
    webhooks:
    - name: <webhook-name>
    ...
      clientConfig:
        ...
        caBundle: <new-certificate>
    ...
    

아키텍처

다음 다이어그램은 PSC를 사용하는 클러스터의 아키텍처 개요를 제공합니다.

GKE의 Private Service Connect 아키텍처
그림: Private Service Connect 아키텍처

다음은 PSC로 사용 설정된 클러스터의 핵심 구성요소입니다.

제어 영역: 모든 GKE 클러스터에는 제어 영역에서 관리하는 Kubernetes API 서버가 있습니다. 제어 영역은 Google 관리 프로젝트의 VPC 네트워크에 있는 가상 머신 (VM)에서 실행됩니다. 리전 클러스터에는 여러 제어 영역의 복제본이 있으며 각 복제본은 자체 VM에서 실행됩니다.

제어 영역에는 내부 클러스터 통신을 위한 내부 엔드포인트(Private Service Connect 엔드포인트)와 외부 엔드포인트가 모두 있습니다. 외부 엔드포인트를 중지할 수 있습니다. 노드와 제어 영역 간의 트래픽은 전적으로 내부 IP 주소를 통해 라우팅됩니다. 클러스터 구성에 대한 자세한 내용은 제어 영역 구성 확인하기를 참고하세요.

VPC 네트워크: 특별히 클러스터의 노드 및 포드를 위한 내부 IP 주소 범위로 서브넷을 만드는 가상 네트워크입니다.

Private Service Connect 엔드포인트: 프로젝트의 VPC 네트워크에 있는 클러스터 컨트롤 플레인의 내부 엔드포인트입니다. PSC 엔드포인트는 클러스터 제어 영역에 액세스하기 위한 진입점 역할을 합니다.

서비스 연결: 서비스 연결은 VPC 네트워크와 제작자 VPC 네트워크 간에 안전하고 비공개 연결을 설정하는 리소스입니다. 위의 다이어그램에서 볼 수 있듯이 PSC 엔드포인트는 비공개 연결을 통해 서비스 연결에 액세스하고 노드와 제어 영역 간에 트래픽이 흐르도록 허용합니다.

클러스터 액세스 구성

PSC 지원 클러스터에서 컨트롤 플레인 액세스 및 노드 액세스를 구성하는 옵션은 여러 가지가 있습니다. 클러스터를 만든 후 언제든지 이러한 구성을 변경할 수 있습니다. 클러스터 액세스를 구성하려면 네트워크 격리 맞춤설정을 참고하세요.

제어 영역 액세스

  • DNS 기반 엔드포인트만 사용하여 제어 영역에 액세스합니다 (권장). IAM 허용 정책을 만들어 컨트롤 플레인에 액세스하는 요청을 승인할 수 있습니다.

  • IP 기반 엔드포인트만 사용하여 제어 영역에 액세스합니다. 컨트롤 플레인의 외부 및 내부 엔드포인트를 모두 사용하거나 외부 엔드포인트를 사용 중지하여 Google 예약 IP 주소 (클러스터 관리 목적) 및 GKE 클러스터 내부 IP 주소에서만 액세스를 허용할 수 있습니다.

    IP 주소를 사용하는 경우 승인된 네트워크를 사용하여 클러스터의 제어 영역에 대한 액세스를 제한하는 것이 좋습니다. 승인된 네트워크를 사용하면 Google Cloud VM, Google Cloud 외부 IP로 제공되는 Cloud Run 또는 Cloud Run 함수에서 제어 영역에 대한 액세스를 차단할 수도 있습니다.

  • DNS 기반 엔드포인트 IP 기반 엔드포인트로 제어 영역에 액세스합니다.

클러스터 노드 액세스

PSC 지원 클러스터를 사용하면 혼합 모드 클러스터를 구성할 수 있습니다. 내부 또는 외부 액세스 권한이 있는 노드가 있도록 클러스터를 구성할 수 있습니다. 사용하는 클러스터 유형에 따라 노드 네트워크 구성을 변경할 수도 있습니다.

  • Autopilot 클러스터의 경우 일부 워크로드를 비공개 노드에서 실행하고 다른 워크로드를 공개 노드에서 실행하도록 구성할 수 있습니다. 예를 들어 클러스터에서 인터넷 액세스가 필요한 워크로드와 그렇지 않은 워크로드를 혼합하여 실행하고 있을 수 있습니다. 외부 IP 주소 지정이 있는 노드에 워크로드를 배포하여 이러한 워크로드에만 공개적으로 액세스할 수 있도록 할 수 있습니다.

  • 표준 클러스터의 경우 일부 노드는 내부 IP 주소로 프로비저닝하고 다른 노드는 외부 IP 주소를 사용할 수 있습니다.

Private Service Connect를 사용하는 클러스터

클러스터가 Private Service Connect를 사용하는지 확인하려면 gcloud container clusters describe 명령어를 실행합니다. 클러스터에서 Private Service Connect를 사용하는 경우 privateClusterConfig 리소스에 다음 값이 포함됩니다.

  • peeringName 필드가 비어 있거나 존재하지 않습니다.
  • privateEndpoint 필드에 할당된 값이 있습니다.

PSC로 클러스터를 사용 설정하려면 버전 1.29 이상에서 클러스터를 만드세요. 그렇지 않은 경우 버전 1.28 이하에서는 비공개 노드를 사용 설정하지 않고 클러스터를 만듭니다. 클러스터 생성 후 언제든지 이 설정을 업데이트하고 비공개 노드를 사용 설정할 수 있습니다.

다음 단계