準備使用 GKE Gateway API 進行設定
本文所述的設定適用於預先發布版客戶,但我們不建議新的 Cloud Service Mesh 使用者採用。詳情請參閱 Cloud Service Mesh 總覽。
本指南說明如何準備環境,以便透過 Cloud Service Mesh 使用 Google Kubernetes Engine Gateway API。大致來說,您需要執行下列步驟:
- 啟用必要的 Google Cloud API 服務。
- 部署 GKE 叢集。
- 設定 IAM 權限。
- 安裝必要的自訂資源定義 (CRD)。
- 將叢集註冊至機群。
- [選用] 啟用多叢集服務 (多叢集服務探索)。
- 啟用服務網格。
如果您未使用 GKE,請使用服務路由 API,並建立 Mesh
資源。
事前準備
請確認部署作業的元件符合下列規定:
- GKE 必須是 1.20 以上版本。
- 系統僅支援xDS 第 3 版 API 以上版本。
- 最低 Envoy 版本為 1.20.0
- 最低 gRPC 啟動產生器版本為 v0.14.0
- GKE 叢集必須處於虛擬私有雲原生 (別名 IP) 模式。
- 不支援在 Compute Engine 上自行管理的 Kubernetes 叢集 (與 GKE 相反)。
- GKE Gateway 功能列出的任何額外限制,都適用於 Cloud Service Mesh 與 GKE Gateway API 的整合。
- GKE 節點和 Pod 的服務帳戶必須具備存取 Traffic Director API 的權限。如要進一步瞭解必要權限,請參閱「啟用服務帳戶以存取 Traffic Director API」。
- 適用於每項專案的資源用量和後端服務配額限制。
啟用必要的 Google Cloud API 服務
如果專案尚未啟用必要的 API,請執行下列指令:
gcloud services enable --project=PROJECT_ID \ container.googleapis.com \ gkehub.googleapis.com \ multiclusteringress.googleapis.com \ trafficdirector.googleapis.com \ networkservices.googleapis.com
如要在車隊中納入多個叢集,請啟用
multiclusterservicediscovery
API:gcloud services enable --project=PROJECT_ID \ multiclusterservicediscovery.googleapis.com
部署 GKE 叢集
請按照這些操作說明部署 GKE 叢集。
在
us-west1-a
區域中建立名為gke-1
的 GKE 叢集:gcloud container clusters create gke-1 \ --zone=us-west1-a \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --enable-mesh-certificates \ --release-channel=regular \ --project=PROJECT_ID
--enable-ip-alias
:這個旗標會建立虛擬私有雲原生叢集,並讓 Pod 的 IP 位址可在虛擬私有雲網路中轉送。--workload-pool
:這個旗標可讓叢集加入專案的工作負載身分集區。--scopes
:這個標記會指定指派給叢集節點的 OAuth 範圍。--release-channel
:這個旗標會指定regular
管道。--enable-mesh-certificates
:如果 Cloud Service Mesh 的自動 mTLS 功能日後可能推出,這個標記就會啟用該功能。
取得叢集憑證:
gcloud container clusters get-credentials gke-1 --zone=us-west1-a
重新命名叢集環境:
kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-1 gke-1
設定資料層的 IAM 權限
在本示範部署作業中,您會將 Cloud Service Mesh 用戶端角色 roles/trafficdirector.client
授予 GKE 叢集中的所有服務帳戶和經過驗證的使用者。您必須具備這個 IAM 角色,才能授權資料層中的 Cloud Service Mesh 用戶端 (例如 Envoy) 從 Cloud Service Mesh 接收設定。
如果您不想將用戶端角色授予所有已驗證的使用者,而是偏好將角色限制在服務帳戶,請參閱 GKE Workload Identity 指南,為服務設定具有 roles/trafficdirector.client
角色的專用 Kubernetes 服務帳戶。
將
client
角色指派給服務帳戶:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \ --role "roles/trafficdirector.client"
安裝必要的自訂資源定義
安裝使用 Gateway API 和 Cloud Service Mesh 時所需的自訂資源定義 (CRD):
kubectl apply -k "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v0.6.0"
kubectl kustomize "https://github.com/GoogleCloudPlatform/gke-networking-recipes.git/gateway-api/config/mesh/crd" \ | kubectl apply -f -
執行下列指令,確認叢集是否已自動安裝必要 CRD:
kubectl get crds
輸出內容會列出下列 CRD 和其他與 Gateway API 無關的 CRD,且建立日期各不相同:
NAME CREATED AT gatewayclasses.gateway.networking.k8s.io 2023-08-08T05:29:03Z gateways.gateway.networking.k8s.io 2023-08-08T05:29:03Z grpcroutes.gateway.networking.k8s.io 2023-08-08T05:29:03Z httproutes.gateway.networking.k8s.io 2023-08-08T05:29:03Z referencegrants.gateway.networking.k8s.io 2023-08-08T05:29:04Z tcproutes.gateway.networking.k8s.io 2023-08-08T05:29:04Z tdgrpcroutes.net.gke.io 2023-08-08T05:29:23Z tdmeshes.net.gke.io 2023-08-08T05:29:23Z tlsroutes.gateway.networking.k8s.io 2023-08-08T05:29:05Z udproutes.gateway.networking.k8s.io 2023-08-08T05:29:05Z
自訂資源 tdmeshes.net.gke.io
和 tdgrpcroutes.net.gke.io
已在先前的步驟中安裝。
net.gke.io
API 群組的 CRD 專屬於 GKE。這些資源不屬於 OSS Gateway API 實作,而是位於 networking.k8s.io
API 群組。
向機群註冊叢集
成功建立叢集後,您必須向機群註冊叢集。將叢集註冊至機群後,您就能在註冊的叢集上選擇性啟用功能。
向機群註冊叢集:
gcloud container hub memberships register gke-1 \ --gke-cluster us-west1-a/gke-1 \ --location global \ --project=PROJECT_ID
確認叢集已向機群註冊:
gcloud container hub memberships list --project=PROJECT_ID
輸出結果會與下列內容相似:
NAME EXTERNAL_ID gke-1 657e835d-3b6b-4bc5-9283-99d2da8c2e1b
(選用) 啟用多叢集服務探索功能
透過多叢集服務探索功能,您可以將叢集本機服務匯出至註冊到機群的所有叢集。如果您不打算在機群中加入多個叢集,這個步驟為選用。
啟用多叢集服務探索功能:
gcloud container hub multi-cluster-services enable \ --project PROJECT_ID
授予 Multi-Cluster Service Discovery 所需的 Identity and Access Management (IAM) 角色:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role "roles/compute.networkViewer"
確認已為註冊的叢集啟用多叢集服務探索。系統可能需要幾分鐘的時間才會顯示所有叢集:
gcloud container hub multi-cluster-services describe --project=PROJECT_ID
您應該會看到
gke-1
的成員資格,類似於下列內容:createTime: '2021-04-02T19:34:57.832055223Z' membershipStates projects/PROJECT_NUM/locations/global/memberships/gke-1: state: code: OK description: Firewall successfully updated updateTime: '2021-05-27T11:03:07.770208064Z' name: projects/PROJECT_NUM/locations/global/features/multiclusterservicediscovery resourceState: state: ACTIVE spec: {} updateTime: '2021-04-02T19:34:58.983512446Z'
啟用 Cloud Service Mesh GKE 服務網格
在本節中,您將啟用服務網格。
在向機群註冊的叢集上啟用 Cloud Service Mesh GKE 服務網格:
gcloud container hub ingress enable \ --config-membership=projects/PROJECT_ID/locations/global/memberships/gke-1 \ --project=PROJECT_ID
確認這項功能已啟用:
gcloud container hub ingress describe --project=PROJECT_ID
輸出結果應該會類似下列內容:
createTime: '2021-05-26T13:27:37.460383111Z' membershipStates: projects/PROJECT_NUM/locations/global/memberships/gke-1: state: code: OK updateTime: '2021-05-27T15:08:19.397896080Z' resourceState: state: ACTIVE spec: multiclusteringress: configMembership: projects/PROJECT_ID/locations/global/memberships/gke-1 state: state: code: OK description: Ready to use updateTime: '2021-05-26T13:27:37.899549111Z' updateTime: '2021-05-27T15:08:19.397895711Z'
授予下列 Identity and Access Management (IAM) 角色,這是 Gateway API 控制器所需的角色:
- roles/container.developer:這個角色可讓控制器管理叢集內 Kubernetes 資源。
- roles/compute.networkAdmin:這個角色可讓控制器管理 Cloud Service Mesh 服務網格設定。
export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value (projectNumber)") gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \ --role "roles/container.developer"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \ --role "roles/compute.networkAdmin"
後續步驟
如要設定範例部署作業,請參閱下列指南: