Cloud Service Mesh용 Gateway API 설정 준비
이 페이지에서는 클러스터에 게이트웨이에 필요한 커스텀 리소스 정의를 설치하는 방법을 설명합니다.
제한사항
- 동일한 Fleet에서
gateway
config-api 클러스터와istio
config-api 클러스터를 혼합하는 것은 지원되지 않습니다. gateway
config-api 클러스터에는 멀티 클러스터 서비스 검색 및 부하 분산이 지원되지 않습니다.- 기존
--management automatic
플래그를 사용하여 클러스터를 온보딩하면 클러스터는istio
구성 API를 사용하기 시작하며gateway
API로 변경할 수 없습니다. - FQDN만 지원됩니다. 닉네임은 지원되지 않습니다.
기본 요건
먼저 이 가이드에서는 이미 Google Cloud 프로젝트를 만들고 kubectl
을 설치했다고 가정합니다.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.
GKE 클러스터 만들기 및 등록
gcloud
GKE 클러스터를 만듭니다.
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--enable-ip-alias \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--release-channel=regular \
--project=PROJECT_ID \
--gateway-api=standard \
--workload-pool=PROJECT_ID.svc.id.goog \
--workload-metadata=GKE_METADATA
각 항목의 의미는 다음과 같습니다.
- CLUSTER_NAME은 클러스터 이름입니다.
- LOCATION은 클러스터 위치입니다.
- PROJECT_ID는 클러스터의 프로젝트 ID입니다.
콘솔
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
add_box만들기를 클릭합니다.
표준 섹션에서 구성을 클릭합니다.
클러스터 기본사항 섹션에서 다음을 완료합니다.
- 클러스터의 이름을 입력합니다.
- 위치 유형에서 클러스터의 Compute Engine 리전을 선택합니다.
탐색창의 노드 풀 섹션에서 default-pool을 클릭하고 보안을 선택합니다.
액세스 범위 목록에서 각 API에 액세스 설정을 선택하고 Cloud Platform을 사용 설정됨으로 설정합니다.
탐색창의 클러스터 섹션에서 네트워킹을 클릭합니다.
클러스터 네트워킹 목록에서 Gateway API 사용 설정을 선택합니다.
탐색창의 클러스터 섹션에서 보안을 클릭합니다.
보안 목록에서 워크로드 아이덴티티 사용 설정을 선택합니다.
만들기를 클릭합니다.
클러스터가 생성된 후
Fleet에 클러스터를 등록합니다.
gcloud container fleet memberships register CLUSTER_NAME \ --gke-cluster LOCATION/CLUSTER_NAME \ --project=PROJECT_ID
클러스터가 Fleet에 등록되었는지 확인합니다.
gcloud container fleet memberships list --project=PROJECT_ID
출력은 다음과 비슷합니다.
NAME EXTERNAL_ID LOCATION my-cluster 91980bb9-593c-4b36-9170-96445c9edd39 us-west1
권한 설정
다음 명령어는 모든 인증된 사용자에게 권한을 부여하지만 GKE용 워크로드 아이덴티티 제휴를 사용하여 일부 계정에만 권한을 부여할 수 있습니다.
trafficdirector.client
역할을 부여합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \ --role "roles/trafficdirector.client"
container.developer
역할을 부여합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role "roles/container.developer"
여기서 PROJECT_NUMBER는 프로젝트 번호입니다.
compute.networkAdmin
역할을 부여합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role "roles/compute.networkAdmin"
여기서 PROJECT_NUMBER는 프로젝트 번호입니다.
Cloud Service Mesh 사용 설정
메시 기능을 사용 설정합니다.
gcloud container fleet mesh enable --project PROJECT_ID
Gateway API를 사용하도록 메시를 업데이트합니다.
gcloud alpha container fleet mesh update \ --config-api gateway \ --memberships CLUSTER_NAME \ --project PROJECT_ID
Cloud Service Mesh 리소스의 상태를 설명하여 업데이트를 확인합니다.
gcloud alpha container fleet mesh describe
기본적으로 Gateway API를 사용하도록 Fleet 새 멤버십 설정(선택사항)
또는 클러스터 생성 중에 Fleet에 등록된 새 GKE 클러스터의 Fleet 수준 기본 설정을 만들어 Gateway API로 자동 구성할 수 있습니다.
Gateway API 사용을 지정하는 YAML 파일을 만듭니다.
echo "configapi: gateway" > mesh.yaml
메시를 업데이트합니다.
gcloud alpha container fleet mesh update --project FLEET_PROJECT_ID \ --fleet-default-member-config mesh.yaml
클러스터를 만들고 한 번에 Fleet에 등록하여 기본 구성을 사용합니다.
gcloud container clusters create CLUSTER_NAME \ --project PROJECT_ID \ --fleet-project FLEET_PROJECT_ID \ --location=LOCATION \
GKE용 워크로드 아이덴티티 제휴를 사용 설정하고 노드에서 GKE 메타데이터 서버를 실행합니다.
커스텀 리소스 정의 설치
클러스터의 kubeconfig 항목을 생성합니다.
gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID
각 항목의 의미는 다음과 같습니다.
- CLUSTER_NAME은 클러스터 이름입니다.
- LOCATION은 클러스터 위치입니다.
- PROJECT_ID는 클러스터의 프로젝트 ID입니다.
GRPCRoute 커스텀 리소스 정의(CRD)를 설치합니다.
curl https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.1.0/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml \
| kubectl apply -f -
출력은 다음과 비슷합니다.
customresourcedefinition.apiextensions.k8s.io/grpcroutes.gateway.networking.k8s.io created