本頁面說明常見的多叢集服務 (MCS) 情境。本頁面列出的情境具有下列特徵:
- 兩個 GKE 叢集:第一個 GKE 叢集已註冊至專案的機群。這是機群主專案。第二個 GKE 叢集註冊至同一個機群,但視情況可能不在同一個專案中。兩個 GKE 叢集都是虛擬私有雲原生叢集。
- 相同虛擬私有雲網路:兩個 GKE 叢集都使用相同 Shared VPC 網路中的子網路。
- 兩個叢集都已啟用 Workload Identity Federation for GKE。
術語
「Shared VPC 主機專案」和「GKE 叢集艦隊主機專案」的意義不同。
- Shared VPC 主機專案是包含 Shared VPC 網路的專案。
- GKE 機群主專案是含有機群的專案,您會將叢集註冊至該機群。
情境
下表說明常見的 MCS 情境:
| 情境 | 機群主專案 (含有第一個叢集的專案) | 第二個叢集的位置 |
|---|---|---|
| 位於相同 Shared VPC 服務專案中的叢集 | Shared VPC 服務專案 | 與第一個叢集相同的 Shared VPC 服務專案 |
| Shared VPC 主機專案做為機群主機專案 (Shared VPC 主機專案中的一個叢集,Shared VPC 服務專案中的第二個叢集) | Shared VPC 主機專案 | Shared VPC 服務專案 |
| 不同 Shared VPC 服務專案中的叢集 | Shared VPC 服務專案 | 其他 Shared VPC 服務專案 |
必要條件
設定 MCS 的跨專案設定前,請務必熟悉下列事項:
位於相同 Shared VPC 服務專案中的叢集
本節提供 MCS 設定範例,其中包含兩個現有的 GKE 叢集,兩者都位於同一個 Shared VPC 服務專案中:
- 兩個叢集在
SHARED_VPC_HOST_PROJ中使用相同的 Shared VPC 網路。 - 第一個虛擬私有雲原生 GKE 叢集
FIRST_CLUSTER_NAME會在FLEET_HOST_PROJ中建立,並啟用 Workload Identity Federation for GKE。在本情境中,機群主專案是連結至SHARED_VPC_HOST_PROJ的服務專案。 - 第二個 VPC 原生 GKE 叢集
SECOND_CLUSTER_NAME也會在FLEET_HOST_PROJ中建立,並啟用 Workload Identity Federation for GKE。
啟用必要的 API
啟用必要的 API。Google Cloud CLI 的輸出內容會顯示 API 是否已啟用。
啟用 Cloud DNS API:
gcloud services enable dns.googleapis.com \ --project SHARED_VPC_HOST_PROJ在此情境中,機群主專案是連線至 Shared VPC 主專案的服務專案。您必須在 Shared VPC 主專案中啟用 Cloud DNS API,因為 Shared VPC 網路位於該處。GKE 會在主專案中建立 Cloud DNS 代管私人區域,並授權 Shared VPC 網路使用這些區域。
啟用 GKE Hub (機群) API。您只能在機群主專案中啟用 GKE Hub API。
gcloud services enable gkehub.googleapis.com \ --project FLEET_HOST_PROJ在機群主專案中啟用這項 API 時,系統會建立或確保下列服務帳戶存在:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com。在機群主專案中啟用 Cloud Service Mesh、Resource Manager 和多叢集服務探索 API:
gcloud services enable trafficdirector.googleapis.com \ cloudresourcemanager.googleapis.com \ multiclusterservicediscovery.googleapis.com \ --project FLEET_HOST_PROJ
在機群主專案中啟用多叢集服務
在機群主專案中啟用多叢集服務:
gcloud container fleet multi-cluster-services enable \ --project FLEET_HOST_PROJ在 Fleet 主專案中啟用多叢集服務時,系統會建立或確保下列服務帳戶存在:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com。
建立 IAM 繫結
建立 IAM 繫結,在 Shared VPC 主專案中,將 MCS 服務代理程式角色授予機群主專案 MCS 服務帳戶:
gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJ \ --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \ --role roles/multiclusterservicediscovery.serviceAgent建立 IAM 繫結,授予機群主專案 MCS 服務帳戶其專案的「網路使用者」角色:
gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \ --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role roles/compute.networkViewer由於這個情境使用 Workload Identity Federation for GKE,機群主專案的 MCS 匯入工具 GKE 服務帳戶需要自有專案的「網路使用者」角色。
更改下列內容:
SHARED_VPC_HOST_PROJ:Shared VPC 主專案的專案 IDFLEET_HOST_PROJ_NUMBER:機群主專案的專案編號,也就是這個情境的 Shared VPC 服務專案FLEET_HOST_PROJ:第一個叢集專案的專案 ID。
向機群註冊叢集
向機群註冊第一個叢集。由於第一個叢集與要註冊的機群位於同一個專案,因此這個指令可以使用
--gke-cluster標記。gcloud container fleet memberships register MEMBERSHIP_NAME_1 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-cluster=LOCATION/FIRST_CLUSTER_NAME更改下列內容:
MEMBERSHIP_NAME_1:這個叢集在這個機群中的專屬 ID。例如,您可以使用第一個 GKE 叢集的名稱。FLEET_HOST_PROJ:機群主專案的專案 ID,在本情境中與 Shared VPC 主專案相同。LOCATION:如果是區域叢集,則為包含叢集的 Compute Engine 區域;如果是區域叢集,則為包含叢集的 Compute Engine 區域。FIRST_CLUSTER_NAME:第一個叢集的名稱。
向機群主專案註冊第二個叢集。由於第二個叢集也位於機群主機專案中,因此這個指令可以使用
--gke-cluster旗標。gcloud container fleet memberships register MEMBERSHIP_NAME_2 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-cluster=LOCATION/SECOND_CLUSTER_NAME更改下列內容:
MEMBERSHIP_NAME_2:這個叢集在這個機群中的專屬 ID。例如,您可以使用第二個 GKE 叢集的名稱。FLEET_HOST_PROJ:機群主專案的專案 ID,在本情境中與 Shared VPC 主專案相同。LOCATION:如果是區域叢集,則為包含叢集的 Compute Engine 區域;如果是區域叢集,則為包含叢集的 Compute Engine 區域。SECOND_CLUSTER_NAME:第二個叢集的名稱。
為叢集建立通用命名空間
請確認每個叢集都有命名空間,可共用其中的服務。視需要使用下列指令,在每個叢集中建立命名空間:
kubectl create ns NAMESPACE將
NAMESPACE替換為命名空間的名稱。
Shared VPC 主機專案做為機群主機專案
本節提供 MCS 設定範例,其中涉及兩個現有的 GKE 叢集:
- 第一個虛擬私有雲原生 GKE 叢集
FIRST_CLUSTER_NAME已在FLEET_HOST_PROJ中建立,並啟用 Workload Identity Federation for GKE。在這個情境中,機群主專案也是 Shared VPC 主專案。 - 第二個虛擬私有雲原生 GKE 叢集
SECOND_CLUSTER_NAME已在SECOND_CLUSTER_PROJ中建立,並啟用 Workload Identity Federation for GKE。
啟用必要的 API
啟用必要的 API。Google Cloud CLI 的輸出內容會顯示 API 是否已啟用。
啟用 Cloud DNS API:
gcloud services enable dns.googleapis.com \ --project FLEET_HOST_PROJ在這個情境中,機群主專案也是 Shared VPC 主專案。您必須在共用虛擬私有雲主專案中啟用 Cloud DNS API,因為共用虛擬私有雲網路位於該處。GKE 會在主專案中建立 Cloud DNS 代管私人區域,並授權給 Shared VPC 虛擬私有雲網路。
啟用 GKE Hub (機群) API。您只能在機群主專案中啟用 GKE Hub API。
gcloud services enable gkehub.googleapis.com \ --project FLEET_HOST_PROJ在機群主專案中啟用 GKE Hub API 時,系統會建立或確保下列服務帳戶存在:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com。在機群主專案和第二個叢集的專案中,啟用 Cloud Service Mesh、Resource Manager 和多叢集服務探索 API:
gcloud services enable trafficdirector.googleapis.com \ cloudresourcemanager.googleapis.com \ multiclusterservicediscovery.googleapis.com \ --project FLEET_HOST_PROJgcloud services enable trafficdirector.googleapis.com \ cloudresourcemanager.googleapis.com \ multiclusterservicediscovery.googleapis.com \ --project SECOND_CLUSTER_PROJ
在機群主專案中啟用多叢集服務
在機群主專案中啟用多叢集服務:
gcloud container fleet multi-cluster-services enable \ --project FLEET_HOST_PROJ在 Fleet 主專案中啟用多叢集服務時,系統會建立或確保下列服務帳戶存在:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com。
建立 IAM 繫結
建立 IAM 繫結,將第二個叢集專案的 GKE 服務代理程式角色授予機群主專案的 GKE 機群服務帳戶:
gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \ --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com" \ --role roles/gkehub.serviceAgent建立 IAM 繫結,將車隊主機專案的 MCS 服務帳戶授予第二個叢集專案的 MCS 服務代理角色:
gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \ --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \ --role roles/multiclusterservicediscovery.serviceAgent建立 IAM 繫結,將專案的網路使用者角色授予每個專案的 MCS 服務帳戶:
gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \ --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role roles/compute.networkViewergcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \ --member "serviceAccount:SECOND_CLUSTER_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role roles/compute.networkViewer由於這個情境使用 GKE 的 Workload Identity Federation,因此每個專案的 MCS Importer GKE 服務帳戶都需要其專案的「網路使用者」角色。
更改下列內容:
SECOND_CLUSTER_PROJ:第二個叢集專案的專案 IDFLEET_HOST_PROJ:第一個叢集專案的專案 ID。FLEET_HOST_PROJ_NUMBER:機群主專案的專案編號,在此情境中與 Shared VPC 主專案相同
向機群註冊叢集
向機群註冊第一個叢集。由於第一個叢集與要註冊的機群位於同一個專案,因此這個指令可以使用
--gke-cluster旗標。gcloud container fleet memberships register MEMBERSHIP_NAME_1 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-cluster=LOCATION/FIRST_CLUSTER_NAME更改下列內容:
MEMBERSHIP_NAME_1:這個叢集在這個機群中的專屬 ID。例如,您可以使用第一個 GKE 叢集的名稱。FLEET_HOST_PROJ:機群主機專案的專案 ID,在本情境中與 Shared VPC 主機專案相同。LOCATION:如果是區域叢集,則為包含叢集的 Compute Engine 區域;如果是地區叢集,則為包含叢集的 Compute Engine 區域。FIRST_CLUSTER_NAME:第一個叢集的名稱。
向機群註冊第二個叢集。由於第二個叢集與機群不在同一個專案中,因此這個指令必須使用
--gke-uri旗標。執行gcloud container clusters list --uri即可取得完整的叢集 URI。gcloud container fleet memberships register MEMBERSHIP_NAME_2 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-uri https://container.googleapis.com/v1/projects/SECOND_CLUSTER_PROJ/locations/LOCATION/clusters/SECOND_CLUSTER_NAME更改下列內容:
MEMBERSHIP_NAME_2:這個叢集在這個機群中的專屬 ID。例如,您可以使用第二個 GKE 叢集的名稱。FLEET_HOST_PROJ:機群主專案的專案 ID,在本情境中與 Shared VPC 主專案相同。LOCATION:以以下內容取代LOCATION:- 如果叢集是區域叢集,則為叢集的 Compute Engine 區域
- 如果叢集是地區叢集,則為叢集的 Compute Engine 地區
SECOND_CLUSTER_PROJECT:包含第二個叢集的專案。SECOND_CLUSTER_NAME:第二個叢集的名稱。
為叢集建立通用命名空間
請確認每個叢集都有命名空間,可共用其中的服務。視需要使用下列指令,在每個叢集中建立命名空間:
kubectl create ns NAMESPACE將
NAMESPACE替換為命名空間的名稱。
不同 Shared VPC 服務專案中的叢集
本節提供 MCS 設定範例,其中包含兩個現有的 GKE 叢集,分別位於不同的 Shared VPC 服務專案中。
- 兩個叢集在
SHARED_VPC_HOST_PROJ中使用相同的 Shared VPC 網路。 - 第一個虛擬私有雲原生 GKE 叢集
FIRST_CLUSTER_NAME已在FLEET_HOST_PROJ中建立,並啟用 Workload Identity Federation for GKE。在本情境中,機群主專案是連線至SHARED_VPC_HOST_PROJ的服務專案。 - 第二個虛擬私有雲原生 GKE 叢集
SECOND_CLUSTER_NAME已在SECOND_CLUSTER_PROJ中建立,並啟用 Workload Identity Federation for GKE。在這個情境中,SECOND_CLUSTER_PROJ也是連結至SHARED_VPC_HOST_PROJ的服務專案。
啟用必要的 API
啟用必要的 API。Google Cloud CLI 的輸出內容會顯示 API 是否已啟用。
啟用 Cloud DNS API:
gcloud services enable dns.googleapis.com \ --project SHARED_VPC_HOST_PROJ在此情境中,機群主專案是連線至 Shared VPC 主專案的服務專案。您必須在 Shared VPC 主專案中啟用 Cloud DNS API,因為 Shared VPC 網路位於該處。GKE 會在主專案中建立 Cloud DNS 代管私人區域,並授權 Shared VPC 網路使用這些區域。
GKE Hub (機群) API。您必須只在機群主專案
FLEET_HOST_PROJ中啟用 GKE Hub API。gcloud services enable gkehub.googleapis.com \ --project FLEET_HOST_PROJ在機群主專案中啟用這項 API 時,系統會建立或確保下列服務帳戶存在:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com。在機群主專案和第二個叢集的專案中,啟用 Cloud Service Mesh、Resource Manager 和多叢集服務探索 API:
gcloud services enable trafficdirector.googleapis.com \ cloudresourcemanager.googleapis.com \ multiclusterservicediscovery.googleapis.com \ --project=FLEET_HOST_PROJgcloud services enable trafficdirector.googleapis.com \ cloudresourcemanager.googleapis.com \ multiclusterservicediscovery.googleapis.com \ --project SECOND_CLUSTER_PROJ
在機群主專案中啟用多叢集服務
在機群主專案中啟用多叢集服務:
gcloud container fleet multi-cluster-services enable \ --project FLEET_HOST_PROJ在 Fleet 主專案中啟用多叢集服務時,系統會建立或確保下列服務帳戶存在:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com。
建立 IAM 繫結
建立 IAM 繫結,將第二個叢集專案的 GKE 服務代理程式角色授予機群主專案的 GKE Hub 服務帳戶:
gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \ --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com" \ --role roles/gkehub.serviceAgent建立 IAM 繫結,將車隊主機專案的 MCS 服務帳戶授予第二個叢集專案的 MCS 服務代理角色:
gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \ --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \ --role roles/multiclusterservicediscovery.serviceAgent建立 IAM 繫結,在 Shared VPC 主專案中,將 MCS 服務代理程式角色授予機群主專案 MCS 服務帳戶:
gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJ \ --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \ --role roles/multiclusterservicediscovery.serviceAgent建立 IAM 繫結,將專案的網路使用者角色授予每個專案的 MCS 服務帳戶:
gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \ --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role roles/compute.networkViewergcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \ --member "serviceAccount:SECOND_CLUSTER_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role roles/compute.networkViewer由於這個情境使用 GKE 的 Workload Identity Federation,因此每個專案的 MCS Importer GKE 服務帳戶都需要其專案的「網路使用者」角色。
視需要在先前的指令中替換下列項目:
SECOND_CLUSTER_PROJ:第二個叢集專案的專案 ID。SHARED_VPC_HOST_PROJ:Shared VPC 主專案的專案 ID。在本範例中,兩個叢集都使用相同的 Shared VPC 網路,但兩個叢集都不位於 Shared VPC 主專案中。FLEET_HOST_PROJ:第一個叢集專案的專案 ID。FLEET_HOST_PROJ_NUMBER:機群主機專案的專案編號。
向機群註冊叢集
向機群註冊第一個叢集。由於第一個叢集與要註冊的機群位於同一個專案,因此這個指令可以使用
--gke-cluster旗標。gcloud container fleet memberships register MEMBERSHIP_NAME_1 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-cluster=LOCATION/FIRST_CLUSTER_NAME更改下列內容:
MEMBERSHIP_NAME_1:這個叢集在這個機群中的專屬 ID。例如,您可以使用第一個 GKE 叢集的名稱。FLEET_HOST_PROJ:機群主專案的專案 ID,在本情境中與 Shared VPC 主專案相同。LOCATION:如果是區域叢集,則為包含叢集的 Compute Engine 區域;如果是區域叢集,則為包含叢集的 Compute Engine 區域。FIRST_CLUSTER_NAME:第一個叢集的名稱。
向機群註冊第二個叢集。由於第二個叢集與機群不在同一個專案中,因此這個指令必須使用
--gke-uri旗標。執行gcloud container clusters list --uri即可取得完整的叢集 URI。gcloud container fleet memberships register MEMBERSHIP_NAME_2 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-uri https://container.googleapis.com/v1/projects/SECOND_CLUSTER_PROJ/locations/LOCATION/clusters/SECOND_CLUSTER_NAME更改下列內容:
MEMBERSHIP_NAME_2:這個叢集在這個機群中的專屬 ID。例如,您可以使用第二個 GKE 叢集的名稱。FLEET_HOST_PROJ:機群主專案的專案 ID,在本情境中與 Shared VPC 主專案相同。LOCATION:以以下內容取代LOCATION:- 如果叢集是區域叢集,則為叢集的 Compute Engine 區域
- 如果叢集是地區叢集,則為叢集的 Compute Engine 地區
SECOND_CLUSTER_PROJECT:包含第二個叢集的專案。SECOND_CLUSTER_NAME:第二個叢集的名稱。
為叢集建立通用命名空間
請確認每個叢集都有命名空間,可共用其中的服務。視需要使用下列指令,在每個叢集中建立命名空間:
kubectl create ns NAMESPACE將
NAMESPACE替換為命名空間的名稱。
後續步驟
- 瞭解如何使用 MCS。