본문 바로가기
CSP (Cloud Service Provider)/GCP

GKE 비공개 클러스터(Private Cluster)만들기

by BTC_문돌이 2022. 4. 25.

안녕하세요~! GCP의 Hallo팀 입니다. 오늘은 지난번에 소개해드렸던 GKE 비공개 클러스터를 직접 만들어 보겠습니다.

GKE에서 비공개 클러스터는 공개 인터넷에서 마스터에 액세스할 수 없도록 하는 클러스터입니다. 비공개 클러스터에서 노드는 공개 IP 주소가 주어지지 않고 비공개 IP 주소만을 가짐으로써 격리된 환경에서 실행됩니다. 노드와 마스터는 VPC 피어링을 사용하여 서로 통신합니다. Kubernetes Engine API에서 IP 주소 범위는 CIDR 블록으로 표현됩니다.

 

기본 영역 설정

gcloud config set compute/zone us-central1-a

 

비공개 클러스터 만들기

비공개 클러스터 중에서도 클라이언트가 공개 엔드포인트에 액세스할 수 없는 비공개 클러스터를 만들었습니다. 이는 공개 엔드포인트 액세스가 중지된 컨트롤 플래인에 대한 가장 제한된 액세스를 제공합니다. 컨트롤 플래인의 공개 엔드포인트에 대한 클라이언트 액세스가 차단되며, 컨트롤 플래인에 대한 액세스는 내부 IP 주소에서 이루어집니다.

참고: https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept?hl=ko 

gcloud container clusters create test-cluster \
    --master-ipv4-cidr 10.0.0.0/28 \
    --enable-ip-alias \
    --create-subnetwork name=test-sub1 \
    --enable-private-nodes \
    --enable-master-authorized-networks \
    --enable-private-endpoint
  • --master-ipv4-cidr 컨트롤 플래인의 내부 IP 주소 범위를 지정합니다.
  • --enable-ip-alias는 클러스터를 VPC 기반으로 만듭니다.
  • --create-subnetwork name=test-sub1은 GKE가 자동으로 test-sub1이라는 서브넷을 생성하도록 합니다.
  • --enable-private-nodes는 클러스터의 노드에 외부 IP 주소가 없음을 나타냅니다.
  • --enable-master-authorized-networks는 엔드포인트에 대한 액세스를 사용자가 승인한 IP 주소 범위로 제한합니다.
  • --enable-private-endpoint는 클러스터가 컨트롤 플래인 API 엔드포인트의 비공개 IP 주소를 사용하여 관리됨을 나타냅니다.


서브넷 및 보조 IP주소 범위 확인

결과에서 클러스터에 자동으로 생성된 서브넷의 이름을 찾습니다.

gcloud compute networks subnets list --network default

GKE 공개 클러스터의 이름 및 보조 범위와, 기본 IP주소 범위를 확인합니다.

gcloud compute networks subnets describe test-sub1 --region us-central1

결과에서 pod용 보조 범위 1개와 services용 보조 범위 1개를 확인할 수 있습니다. 

privateIPGoogleAccess가 true로 설정되어 있으며, 이를 통해 비공개 IP 주소만 있는 클러스터 호스트가 Google API 및 서비스와 통신한다는 것을 확인할 수 있습니다다.



마스터 엑세스 설정

현재 시점에서 마스터에 액세스할 수 있는 IP 주소는 다음 범위의 주소뿐입니다.

  • 하위 네트워크의 기본 범위: 노드에 사용된 범위
  • 포드에 사용된 하위 네트워크의 보조 범위

노드에서는  항상 비공개 엔드포인트를 사용합니다. 

클러스터의 VPC 네트워크에 있는 다른 VM에서는 다른 VM은 클러스터와 같은 리전에 있고 내부 IP 주소가 승인된 네트워크 목록에 있거나, 클러스터의 노드와 동일한 서브넷에 있는 경우에만 kubectl을 사용하여 비공개 엔드포인트와 통신할 수 있다. kubectl은 비공개 엔드포인트를 사용하도록 구성되어야 합니다.

공개 IP 주소에서는 엑세스가 불가능합니다.

 

그러므로 마스터에 추가 액세스 권한을 제공하려면 선택된 IP 주소 범위를 승인하거나, VM이 클러스터의 노드와 동일한 서브넷에 위치하도록 해야합니다. 그래서 VM이 클러스터의 노드와 도일한 서브넷에 위치할 수 있도록 서브넷을 지정해주었습니다.

gcloud compute instances create source-instance --zone us-central1-a \
--subnet=test-sub1 --scopes 'https://www.googleapis.com/auth/cloud-platform'

source-instance에 SSH 설정

gcloud compute ssh source-instance --zone us-central1-a

SSH 셸에서 Cloud-SDK의 kubectl 구성요소를 설치

sudo apt-get install kubectl

SSH 셸에서 Kubernetes 클러스터 액세스 권한 설정

gcloud container clusters get-credentials test-cluster --zone us-central1-a

 

노드에 외부 IP 주소가 없는지 확인

kubectl get nodes --output wide

결과에서 EXTERNAL-IP 부분이 비어있는 것을 확인할 수 있습니다. 

STATUS ... VERSION        EXTERNAL-IP   OS-IMAGE ...
Ready      v1.8.7-gke.1                 Container-Optimized OS from Google
Ready      v1.8.7-gke.1                 Container-Optimized OS from Google
Ready      v1.8.7-gke.1                 Container-Optimized OS from Google

 

exit으로 SSH 셸 종료

클러스터 삭제

gcloud container clusters delete test-cluster --zone us-central1-a

수고하셨습니다. 

 

[출처]

https://www.cloudskillsboost.google/focuses/867?locale=ko&parent=catalog&qlcampaign=1m-skills-educr-11%3A%3ATvn7wL2C63L3iSwB1He8rQ 

 

비공개 Kubernetes 클러스터 설정 | Google Cloud Skills Boost

클라우드 환경에서 비공개 클러스터 만들기 실습. 비공개 클러스터에서 노드는 공개 IP 주소가 없으므로 작업이 인터넷으로부터 분리된 환경에서 실행됩니다. 전제 조건: Kubernetes 클러스터 및 CI

www.cloudskillsboost.google

https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters?hl=ko 

 

비공개 클러스터 만들기  |  Kubernetes Engine 문서  |  Google Cloud

의견 보내기 비공개 클러스터 만들기 이 페이지에서는 VPC 기반 클러스터의 일종인 비공개 Google Kubernetes Engine(GKE) 클러스터를 만드는 방법을 설명합니다. 비공개 클러스터의 노드에는 내부 IP 주

cloud.google.com

https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept?hl=ko 

 

비공개 클러스터  |  Kubernetes Engine 문서  |  Google Cloud

의견 보내기 비공개 클러스터 이 페이지에서는 Google Kubernetes Engine(GKE)에서 비공개 클러스터가 작동하는 방식을 설명합니다. 비공개 클러스터를 만들고 관리하는 방법도 설명합니다. 비공개 클

cloud.google.com

 

댓글