이 페이지에서는 클러스터의 컨트롤 플레인과 클러스터 노드의 네트워크 격리를 변경하는 방법을 보여줍니다. 클러스터의 격리 모드 변경은 Private Service Connect를 사용하여 컨트롤 플레인과 노드를 비공개로 연결하는 클러스터에만 지원됩니다.
클러스터 격리를 변경하는 이유
기본적으로 Private Service Connect를 사용하는 클러스터를 만들 때 GKE는 외부 IP 주소(외부 엔드포인트)를 컨트롤 플레인에 할당합니다. 즉, 외부 IP 주소가 있는 모든 VM이 컨트롤 플레인에 연결할 수 있습니다.
승인된 네트워크를 구성하면 클러스터 컨트롤 플레인에 액세스할 수 있는 IP 주소 범위를 제한할 수 있지만 클러스터 컨트롤 플레인은 Google Cloud 소유의 IP 주소에서 계속 액세스할 수 있습니다. 예를 들어 Google Cloud에 할당된 외부 IP 주소가 있는 모든 VM은 컨트롤 플레인 외부 IP 주소에 액세스할 수 있습니다. 그러나 해당 사용자 인증 정보가 없는 VM은 노드에 액세스할 수 없습니다.
이점
네트워크 격리는 다음과 같은 이점을 제공합니다.
- 동일한 클러스터에 비공개 노드와 공개 노드를 혼합하여 구성할 수 있습니다. 이렇게 하면 외부 IP 주소가 인터넷의 공개 서비스에 액세스하지 않아도 되는 노드에서 비용이 절감됩니다.
- Google Cloud 소유의 IP 주소 또는 외부 IP 주소에서 컨트롤 플레인 액세스를 차단하여 클러스터 컨트롤 플레인을 완전히 격리할 수 있습니다.
이 페이지에서는 다음 작업을 수행하여 이 기본 동작을 변경하는 방법을 보여줍니다.
- Google Cloud 소유 IP 주소에서 컨트롤 플레인에 대한 액세스를 사용 설정 또는 사용 중지. 이 작업을 통해 Google Cloud 소유 IP 주소가 있는 모든 VM이 컨트롤 플레인에 액세스하지 못합니다. 자세한 내용은 Google Cloud 소유 IP 주소의 컨트롤 플레인 액세스 차단을 참조하세요.
- 컨트롤 플레인의 외부 엔드포인트에 대한 공개 액세스를 사용 설정 또는 사용 중지. 이 작업은 클러스터를 완전히 격리하며 컨트롤 플레인을 공개 IP 주소에서 액세스할 수 없습니다. 자세한 내용은 클러스터 컨트롤 플레인 격리를 참조하세요.
- 노드에서 공개 IP 주소를 삭제. 이 작업은 워크로드를 완전히 격리합니다. 자세한 내용은 노드 풀 격리를 참조하세요.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
Google Cloud VM, Cloud Run, Cloud Run Functions에서 컨트롤 플레인 액세스 차단
기본적으로 Private Service Connect가 공개로 사전 정의된 클러스터를 만든 경우 승인된 네트워크 기능이 기본적으로 사용 중지됩니다.
Private Service Connect가 비공개로 사전 정의된 클러스터를 만든 경우 승인된 네트워크 기능이 기본적으로 사용 설정됩니다. GKE 컨트롤 플레인에 항상 액세스할 수 있는 IP 주소를 알아보려면 컨트롤 플레인 엔드포인트에 대한 액세스를 참고하세요.
Google Cloud VM, Cloud Run, Cloud Run Functions에서 클러스터의 컨트롤 플레인에 대한 액세스를 삭제하려면 gcloud CLI 또는 Google Cloud 콘솔을 사용합니다.
gcloud
--no-enable-google-cloud-access
플래그를 사용하도록 클러스터를 업데이트합니다.gcloud container clusters update CLUSTER_NAME \ --no-enable-google-cloud-access
CLUSTER_NAME
을 클러스터 이름으로 바꿉니다.--no-enable-google-cloud-access
플래그가 적용되었는지 확인합니다.gcloud container clusters describe CLUSTER_NAME | grep "gcpPublicCidrsAccessEnabled"
출력은 다음과 비슷합니다.
gcpPublicCidrsAccessEnabled: false
Console
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
수정할 클러스터의 이름을 클릭합니다.
네트워킹의 컨트롤 플레인 승인된 네트워크 필드에서 edit 컨트롤 플레인 승인된 네트워크 수정을 클릭합니다.
Google Cloud 공개 IP 주소를 통한 액세스 허용 체크박스를 선택 해제합니다.
변경사항 저장을 클릭합니다.
Google Cloud 소유 IP 주소의 컨트롤 플레인 액세스 허용
Google Cloud 소유 공개 IP 주소에서 클러스터 컨트롤 플레인으로의 액세스를 허용하려면 다음 명령어를 실행하세요.
gcloud
gcloud container clusters update CLUSTER_NAME \
--enable-google-cloud-access
CLUSTER_NAME
을 클러스터 이름으로 바꿉니다.
Google Cloud 소유의 IP 주소가 클러스터 컨트롤 플레인에 액세스할 수 있습니다.
Console
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
수정할 클러스터의 이름을 클릭합니다.
네트워킹의 컨트롤 플레인 승인된 네트워크 필드에서 edit 컨트롤 플레인 승인된 네트워크 수정을 클릭합니다.
Google Cloud 공개 IP 주소를 통한 액세스 허용 체크박스를 선택합니다.
변경사항 저장을 클릭합니다.
Private Service Connect를 사용하는 클러스터에서 컨트롤 플레인에 대한 외부 액세스 사용 중지
공개로 생성된 클러스터
기본적으로 GKE 공개 클러스터를 만들 때 GKE는 외부 IP 주소(외부 엔드포인트)를 컨트롤 플레인에 할당합니다. GKE가 이 외부 엔드포인트를 할당 해제하도록 하면 GKE는 비공개 엔드포인트를 사용 설정합니다. 클러스터 관리 프로세스를 실행하는 Google Cloud 서비스를 제외하고 외부 IP 주소에서 컨트롤 플레인에 대한 액세스가 중지됩니다. 사용 설정된 비공개 엔드포인트 및 제한사항에 대한 자세한 내용은 Private Service Connect를 사용하는 공개 클러스터를 참조하세요.
공개로 생성된 클러스터의 컨트롤 플레인 격리를 변경하려면 gcloud CLI를 사용합니다.
--enable-private-endpoint
플래그를 사용하도록 클러스터를 업데이트합니다.gcloud container clusters update CLUSTER_NAME \ --enable-private-endpoint
CLUSTER_NAME
을 공개 클러스터의 이름으로 바꿉니다.--enable-private-endpoint
플래그가 적용되었는지 확인합니다.gcloud container clusters describe CLUSTER_NAME | grep "enablePrivateEndpoint"
출력은 다음과 비슷합니다.
enablePrivateEndpoint:true
비공개로 생성된 클러스터
기본적으로 GKE 비공개 클러스터를 만들 때 GKE는 외부 IP 주소(외부 엔드포인트)와 내부 IP 주소(내부 엔드포인트)를 컨트롤 플레인에 할당합니다. 이 외부 엔드포인트를 할당 해제할 수 있지만 내부 엔드포인트는 할당 해제할 수 없습니다.
GKE가 외부 엔드포인트를 할당 해제하도록 하면 외부 IP 주소에서 컨트롤 플레인에 대한 외부 액세스가 사용 중지됩니다.
비공개로 생성된 클러스터에서 외부 엔드포인트를 삭제하려면 gcloud CLI 또는 Google Cloud 콘솔을 사용합니다.
gcloud
--enable-private-endpoint
플래그를 사용하도록 클러스터를 업데이트합니다.gcloud container clusters update CLUSTER_NAME \ --enable-private-endpoint
CLUSTER_NAME
을 공개 클러스터의 이름으로 바꿉니다.--enable-private-endpoint
플래그가 적용되었는지 확인합니다.gcloud container clusters describe CLUSTER_NAME | grep "enablePrivateEndpoint"
출력은 다음과 비슷합니다.
enablePrivateEndpoint: true
Console
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
수정할 클러스터의 이름을 클릭합니다.
클러스터 기본사항의 외부 엔드포인트 필드에서 edit 외부 컨트롤 플레인 액세스 수정을 클릭합니다.
Google Cloud 공개 IP 주소를 통한 액세스 허용 체크박스를 선택 해제합니다.
변경사항 저장을 클릭합니다.
Private Service Connect를 사용하는 클러스터에서 컨트롤 플레인에 대한 외부 액세스 사용 설정
공개 또는 비공개로 생성된 클러스터의 컨트롤 플레인에 외부 IP 주소(외부 엔드포인트)를 할당하려면 gcloud CLI 또는 Google Cloud 콘솔을 사용합니다.
gcloud
다음 명령어를 실행합니다.
gcloud container clusters update CLUSTER_NAME \
--no-enable-private-endpoint
CLUSTER_NAME
을 공개 클러스터의 이름으로 바꿉니다.
외부 IP 주소가 클러스터 컨트롤 플레인에 액세스할 수 있습니다.
Console
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
수정할 클러스터의 이름을 클릭합니다.
클러스터 기본사항의 외부 엔드포인트 필드에서 edit 외부 컨트롤 플레인 액세스 수정을 클릭합니다.
외부 IP 주소를 사용한 액세스 컨트롤 플레인 체크박스를 선택합니다.
변경사항 저장을 클릭합니다.
노드 풀 격리
GKE 비공개 IP 주소만 사용하여 노드 풀을 프로비저닝하도록 할 수 있습니다. 공개 노드 풀을 비공개 모드로 업데이트하면 공개 인터넷 액세스가 필요한 워크로드가 실패할 수 있습니다. 노드 격리를 변경하기 전에 Private Service Connect 클러스터 제한사항을 참조하세요. 공개 또는 비공개로 생성된 클러스터에서 이 설정을 수정할 수 있습니다.
Autopilot
Autopilot 클러스터에서 GKE가 비공개 노드에서만 프로비저닝하도록 기존 포드에 taint를 추가합니다.
GKE가 비공개 노드에서 포드를 예약하도록 요청하려면 다음 nodeSelector를 포드 사양에 추가합니다.
cloud.google.com/private-node=true
GKE는 비공개 노드에서 포드를 다시 만듭니다. 워크로드 중단을 방지하려면 각 워크로드를 독립적으로 마이그레이션하고 마이그레이션을 모니터링합니다.
공유 VPC를 사용하는 경우 클러스터 격리 모드를 변경한 후 비공개 Google 액세스를 사용 설정합니다. Cloud NAT를 사용하는 경우 비공개 Google 액세스를 사용 설정할 필요가 없습니다.
Standard
gcloud
기존 노드 풀의 비공개 IP 주소를 통해 노드를 프로비저닝하려면 다음 명령어를 실행합니다.
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--enable-private-nodes
다음을 바꿉니다.
NODE_POOL_NAME
: 수정하려는 노드 풀의 이름입니다.CLUSTER_NAME
: GKE 클러스터의 이름입니다.공유 VPC를 사용하는 경우 클러스터 격리 모드를 변경한 후 비공개 Google 액세스를 사용 설정합니다. Cloud NAT를 사용하는 경우 비공개 Google 액세스를 사용 설정할 필요가 없습니다.
Console
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
클러스터 목록에서 클러스터 이름을 클릭합니다.
클러스터 페이지에서 노드 탭을 클릭합니다.
노드 풀에서 노드 풀 이름을 클릭합니다.
수정을 클릭합니다.
비공개 노드 사용 설정 체크박스를 선택합니다.
저장을 클릭합니다.
노드 풀 격리 되돌리기
Standard 클러스터에서 GKE가 공개 IP 주소로 노드 풀을 프로비저닝하도록 하려면 다음 명령어를 실행합니다.
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--no-enable-private-nodes
다음을 바꿉니다.
NODE_POOL_NAME
: 수정하려는 노드 풀의 이름입니다.CLUSTER_NAME
: GKE 클러스터의 이름입니다.
공개 IP 주소는 클러스터 노드에 액세스할 수 있습니다.
제한사항
클러스터 격리 모드를 변경하기 전에 다음 제한사항을 고려하세요.
- Private Service Connect를 사용하는 클러스터의 격리 모드만 변경할 수 있습니다.
- 레거시 네트워크에서 실행되는 공개 클러스터에는 격리 모드를 변경할 수 없습니다.
- 공개 노드 풀을 비공개 모드로 업데이트한 후에는 다음 시나리오에서 공개 인터넷 액세스가 필요한 워크로드가 실패할 수 있습니다.
- 비공개 Google 액세스가 사용 설정되지 않은 공유 VPC 네트워크의 클러스터입니다. GKE가 할당된 노드 이미지를 다운로드하도록 비공개 Google 액세스를 수동으로 사용 설정합니다. 공유 VPC 네트워크에 없는 클러스터의 경우 GKE가 비공개 Google 액세스를 자동으로 사용 설정합니다.
- Cloud NAT가 사용 설정되지 않았거나 커스텀 NAT 솔루션이 정의되지 않은 인터넷에 액세스해야 하는 워크로드입니다. 인터넷으로 이그레스 트래픽을 허용하려면 커스텀 NAT 솔루션 또는 Cloud NAT를 사용 설정합니다.
공개 또는 비공개로 생성된 Private Service Connect 클러스터
공개로 생성되고 Private Service Connect를 사용하는 클러스터에는 비공개 엔드포인트가 사용 설정됩니다. 이 비공개 엔드포인트에서는 사용자가 구성하는 신규 또는 기존 웹훅의 URL에 있는 내부 IP 주소가 지원되지 않습니다. 이 비호환성을 완화하려면 다음을 수행합니다.
- URL로 비공개 주소를 사용하는 웹훅을 설정합니다.
- 선택자 없이 헤드리스 서비스를 만듭니다.
- 필요한 대상의 해당 엔드포인트를 만듭니다.
공개로 생성된 Private Service Connect 클러스터
공개로 생성된 Private Service Connect 클러스터에서만 클러스터 네트워크의 모든 비공개 IP 주소가 항상 클러스터 비공개 엔드포인트에 연결할 수 있습니다. 컨트롤 플레인 액세스에 대한 자세한 내용은 컨트롤 플레인 액세스가 승인된 네트워크를 참조하세요.