이 문서에서는 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 주소가 포함되어 있다면, 다음 단계에 따라 이 호환성 문제를 해결할 수 있습니다.
이 서비스가 트래픽을 전달할 엔드포인트를 수동으로 관리할 수 있도록, 선택자 없이 헤드리스 서비스를 만듭니다. 다음은 포트 3000에서 요청을 수신 대기하는 웹훅을 대상으로 하는 서비스 예시입니다.
apiVersion: v1 kind: Service metadata: name: <service-name> spec: clusterIP: None ports: - port: 3000 targetPort: 3000
필요한 대상의 해당 엔드포인트를 만듭니다. 예를 들어 웹훅의 URL에 내부 IP 주소
10.0.0.1
을 사용하는 경우 다음 엔드포인트를 만들 수 있습니다.apiVersion: v1 kind: Endpoints metadata: name: <service-name> subsets: - addresses: - ip: 10.0.0.1 ports: - port: 3000
웹훅 구성 업데이트: 웹훅 구성에서 내부 IP 주소가 포함된 URL을 삭제하고 첫 번째 단계에서 만든 서비스를 추가합니다. 예를 들면 다음과 같습니다.
... kind: ValidatingWebhookConfiguration ... webhooks: - name: <webhook-name> ... clientConfig: service: name: <service-name> namespace: <namespace> path: "/validate" port: 3000
위 예시에서 웹훅은
/validate
경로를 포함하며 포트 3000에서 수신 대기합니다.웹훅 확인: 웹훅이 API 서버 요청을 계속 수신하고 커스텀 논리를 기반으로 요청을 승인, 거부, 수정할 수 있는지 확인합니다. 웹훅을 확인하는 중 오류가 발생하면 새 인증서를 만들고, 새 인증서 세부정보를 이용해서 웹훅 구성을 업데이트해야 합니다. 예를 들면 다음과 같습니다.
... kind: ValidatingWebhookConfiguration ... webhooks: - name: <webhook-name> ... clientConfig: ... caBundle: <new-certificate> ...
아키텍처
다음 다이어그램은 PSC를 사용하는 클러스터의 아키텍처 개요를 제공합니다.
다음은 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 외부 IP를 사용하는 Google Cloud VM, Cloud Run, Cloud Run Functions에서 컨트롤 플레인으로의 액세스도 차단할 수 있습니다.
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 이하에서는 비공개 노드를 사용 설정하지 않고 클러스터를 생성해야 합니다. 이 설정은 클러스터 생성 후에도 언제든지 수정하여 비공개 노드를 사용 설정할 수 있습니다.
다음 단계
- GKE에서 네트워크 격리 맞춤설정 방법 알아보기