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 중 하나를 설정 할 수 있습니다.


Public Endpoint를 사용하는 경우, GKE를 사용하는 VPC와 제어 영역 VPC간에 피어링이 맺어지는 동일한 형태이지만, 제어 영역에 접근하기 위한 End point가 피어링 된 제어 영역 VPC의 내부 IP가 아닌 외부 IP를 사용합니다. 따라서 피어링 된 GKE VPC 외에도 GCP 네트워크 외부에서 Public Endpoint로 자유롭게 접근 가능합니다. 보안을 강화하기 위해 승인된 네트워크 영역의 "외부 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 범위는 외부 IP범위입니다.




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


5) Private Cluster가 Public IP를 Endpoint로 생성된 것을 확인 할 수 있습니다. 이제 해당 IP에 대하여 GCP Network 밖에서도 접근이 가능합니다. 승인된 네트워크 설정을 하였음으로, 접근 가능한 IP범위는 승인된 네트워크 범위로 한정됩니다.



Cluster > Network > Control plane authorized networks 에서 승인된 네트워크를 추가/삭제/비활성화 할 수 있습니다.

* Private Cluster에선 보안을 위해 승인된 네트워크를 사용하도록 강력히 권고하고 있습니다.

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



[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