GKE-to-GKE Clustermesh 준비

GKE-to-GKE Clustermesh 준비 (GKE-to-GKE Clustermesh Preparation)

이 가이드는 clustermesh 요구사항을 충족하도록 Google Kubernetes Engine(GKE) 클러스터를 설치하고 준비하는 단계별 가이드예요. 비용 효율적인 개발·학습용 환경을 위해 서로 다른 지역에 두 개의 영역(zonal) 단일 노드 GKE 클러스터를 배포합니다.

출처: GKE-to-GKE Clustermesh Preparation

본문

이 가이드는 clustermesh 기능의 요구사항을 충족하도록 Google Kubernetes Engine (GKE) 클러스터를 설치하고 준비하는 단계별 가이드입니다.

이 가이드는 clustermesh를 배포할 비용 효율적인 환경을 만들기 위한 목적으로 서로 다른 지역에 두 개의 영역(zonal), 단일 노드 GKE 클러스터를 배포하는 방법을 설명해요. 개발/학습 목적으로 이상적입니다.

Note

아래 단계는 gcloud CLI 도구가 필요합니다.

VPC 생성

GCP 프로젝트에 VPC 네트워크를 만듭니다. 값이 이후 단계에서 참조되므로 환경 변수를 권장합니다.

#  feel free to choose your own VPC network name
export PROJECT_ID="[GCP_PROJECT_ID]"
export VPC_NETWORK="my-gke-network"

gcloud compute networks create ${VPC_NETWORK} \
  --subnet-mode=auto \
  --project ${PROJECT_ID}

gcloud compute firewall-rules create ${VPC_NETWORK}-allow-internal \
  --network ${VPC_NETWORK} \
  --allow tcp,udp,icmp \
  --source-ranges "10.128.0.0/9"

클러스터 배포

이후 단계에서 재사용할 값에 대한 추가 환경 변수를 설정합니다.

#  us-west1-a can be changed to any available location (`gcloud compute zones list`)
export CLUSTER="gke-1"
export ZONE="us-west1-a"
export POD_CIDR="10.0.0.0/18"
export SERVICES_CIDR="10.1.0.0/20"

아래는 하나의 GKE 클러스터를 배포하는 예시입니다. 더 많은 클러스터를 만들려면 서로 다른 클러스터 이름, 영역, pod CIDR, services CIDR을 사용해 단계를 다시 따르면 됩니다.

Note

예시와 다른 pod 및 services CIDR을 사용할 수 있지만, IP 주소 범위 규칙을 충족하는지 확인하세요. 무엇보다 다른 클러스터의 pods 및 services CIDR과 겹치지 않도록 하세요.

gcloud container clusters create ${CLUSTER} \
  --zone ${ZONE} \
  --node-locations ${ZONE} \
  --network=${VPC_NETWORK} \
  --enable-ip-alias \
  --cluster-ipv4-cidr=${POD_CIDR} \
  --services-ipv4-cidr=${SERVICES_CIDR} \
  --machine-type=e2-medium \
  --max-nodes=1 \
  --num-nodes=1 \
  --node-taints node.cilium.io/agent-not-ready=true:NoSchedule \
  --project ${PROJECT_ID}

# Get kubectl credentials, the command will merge the new credentials
# with the existing ~/.kube/config
gcloud container clusters get-credentials ${CLUSTER} \
  --zone ${ZONE} \
  --project ${PROJECT_ID}

노드 테인트는 Cilium이 설치될 때까지 Pod의 배포/시작을 방지하는 데 사용됩니다.

Cilium을 설치합니다.

Important

각 클러스터에 고유한 cluster.id 를 할당해야 합니다.

cilium install 1.20.2 \
    --set cluster.id=1 \
    --set cluster.name=${CLUSTER}

Cilium 상태를 확인합니다.

cilium status

각 GKE 클러스터에 대해 clustermesh 설정 과정에서 사용할 컨텍스트를 환경 변수에 저장하세요.

GKE 클러스터 컨텍스트는 프로젝트 ID, 위치, 클러스터 이름의 조합입니다.

export CONTEXT1="gke_${PROJECT_ID}_${ZONE}_${CLUSTER}"

VPC 네트워크 피어링

Google Cloud의 VPC는 범위가 전역이므로, 같은 VPC 안의 서브넷은 지역과 무관하게 이미 내부적으로 서로 통신할 수 있어요. 따라서 VPC 피어링이 필요하지 않습니다!

이제 클러스터 간 노드-투-노드 트래픽이 가능해요. clustermesh의 모든 요구사항이 충족됐습니다. clustermesh 활성화는 Cluster Mesh 설정하기에서 설명합니다.

Kubernetes 컨텍스트가 필요한 명령에는 4단계에서 내보낸 환경 변수를 참고하세요.

더 알아보기 (Learn more)