Private Cluster란 Private IP만을 사용하는 VPC 기반 Cluster입니다.[1]

Public IP가 없는 노드를 사용하기 때문에 외부 인터넷의 클라이언트가 Private Cluster의 노드 IP 주소로 연결 할 수 없습니다. 

외부 클라이언트는 직접적으로 GKE Cluster의 Node와 연결 될 수 없으며 Ingress로 노출된 서비스를 통해서 어플리케이션에 접속할 수 있습니다.


GKE Private Cluster는 제어 영역에 대해 Private IP Endpoint와 Public IP Endpoint 중 하나를 설정 할 수 있습니다.


Private Endpoint를 사용하는 경우, Cluster node가 위치한 VPC와 Google이 관리하는 제어 영역의 VPC간에 피어링이 맺어지는 형태로 내부 IP로 서로 통신할 수 있습니다. 제어 영역에 접근하기 위해서는 피어링 된 GKE Cluster VPC의 내부 IP를 가진 VM을 통해서 접근해야 합니다. 보안을 강화하기 위해 승인된 네트워크 설정을 통해 특정 "내부 IP 주소 범위"만 접근 할 수 있도록 제한할 수 있습니다.



1) GCP Console > VPC network > VPC networks > Add Subnet


Private Cluster 생성 시 Node의 Subnet으로 사용될 Subnet을 Private Google Access를 활성화 하여 생성합니다.

Private Cluster는 Public IP가 없기 때문에 VPC 내에서 트래픽 전송만이 가능하지만, Private Google Access를 활성화 하여 다른 Google API 및 서비스의 외부 IP 주소로 접속이 가능합니다.[2]




2) GCP Console > Kubernetes Engine > Clusters > Create


GKE Private Cluster를 생성합니다. 보안을 위해 제어 영역을 외부 IP로 접속 설정을 비활성화 합니다.




3) Networking > Authorized Networks


제어 영역 액세스를 위한 승인된 네트워크를 추가합니다. 

제어 영역에 대한 외부 IP 접속 설정이 비활성화 되었음으로, 승인된 네트워크의 IP 범위는 VPC 내부 IP범위로 제한됩니다.




4) GKE Cluster를 생성한 VPC를 확인하여 제어 영역이 포함된 VPC가 피어링 되어 있음을 확인 할 수 있습니다.





5) Cluster > Network > Control plane authorized networks 에서 승인된 네트워크 IP 범위를 추가할 수 있습니다.

Private Cluster의 승인된 네트워크 IP 범위 개수는 최대 100개입니다.[3]




이제 승인된 네트워크 IP 범위에 해당하는 내부 IP를 가진 Bastion VM을 통해 제어 영역으로 접속할 수 있습니다.



[1] https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept

[2] https://cloud.google.com/vpc/docs/private-google-access?hl=ko

[3] https://cloud.google.com/kubernetes-engine/docs/how-to/authorized-networks?hl=ko#limitations