本頁面說明常見的多叢集服務 (MCS) 情境。本頁面列出的情境具有下列特徵:
- 兩個 GKE 叢集:第一個 GKE 叢集已註冊至自有專案的機群。這是機群主專案。第二個 GKE 叢集註冊至同一個機群,但視情況可能不在同一個專案中。兩個 GKE 叢集都是虛擬私有雲原生叢集。
- 相同虛擬私有雲網路:兩個 GKE 叢集都使用相同共用虛擬私有雲網路中的子網路。
- 兩個叢集都已啟用 Workload Identity Federation for GKE。
術語
「共用虛擬私有雲主專案」和「GKE 叢集艦隊主專案」的意義不同。
- 共用虛擬私有雲主專案是包含共用虛擬私有雲網路的專案。
- GKE 機群主專案是含有機群的專案,您會將叢集註冊至該機群。
情境
下表說明常見的 MCS 情境:
情境 | 機群主專案 (含有第一個叢集的專案) | 第二個叢集的位置 |
---|---|---|
位於相同共用虛擬私有雲服務專案中的叢集 | 共用虛擬私有雲服務專案 | 與第一個叢集相同的共用虛擬私有雲服務專案 |
共用虛擬私有雲主專案做為機群主專案 (共用虛擬私有雲主專案中的一個叢集,共用虛擬私有雲服務專案中的第二個叢集) | 共用虛擬私有雲主專案 | 共用虛擬私有雲服務專案 |
不同共用虛擬私有雲服務專案中的叢集 | 共用虛擬私有雲服務專案 | 不同的共用虛擬私有雲服務專案 |
必要條件
設定 MCS 的跨專案設定前,請務必熟悉下列項目:
位於相同共用虛擬私有雲服務專案中的叢集
本節提供 MCS 設定範例,其中包含兩個現有的 GKE 叢集,兩者都位於同一個共用虛擬私有雲服務專案中:
- 兩個叢集在
SHARED_VPC_HOST_PROJ
中使用相同的共用虛擬私有雲網路。 - 第一個虛擬私有雲原生 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
在這個情境中,車隊主專案是連線至共用虛擬私有雲主專案的服務專案。共用虛擬私有雲網路位於共用虛擬私有雲主專案中,因此必須在該專案中啟用 Cloud DNS API。GKE 會在主專案中建立 Cloud DNS 代管不公開區域,並授權共用虛擬私人雲端網路使用這些區域。
啟用 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 繫結,在共用虛擬私有雲主專案中,將 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
由於這個情境使用 GKE 適用的工作負載身分聯盟,機群主專案的 MCS 匯入工具 GKE 服務帳戶需要自有專案的「網路使用者」角色。
更改下列內容:
SHARED_VPC_HOST_PROJ
:共用虛擬私有雲主專案的專案 IDFLEET_HOST_PROJ_NUMBER
:車隊主專案的專案編號,也就是這個情境的共用虛擬私有雲服務專案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,在本情境中與共用虛擬私有雲主專案相同。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,在本情境中與共用虛擬私有雲主專案相同。LOCATION
:如果是區域叢集,這是指包含叢集的 Compute Engine 區域;如果是區域叢集,這是指包含叢集的 Compute Engine 地區。SECOND_CLUSTER_NAME
:第二個叢集的名稱。
為叢集建立通用命名空間
請確保每個叢集都有命名空間,可供共用服務。視需要使用下列指令,在每個叢集中建立命名空間:
kubectl create ns NAMESPACE
將
NAMESPACE
替換為命名空間的名稱。
共用虛擬私有雲主專案做為機群主專案
本節提供 MCS 設定範例,其中涉及兩個現有的 GKE 叢集:
- 第一個虛擬私有雲原生 GKE 叢集
FIRST_CLUSTER_NAME
已在FLEET_HOST_PROJ
中建立,並啟用 Workload Identity Federation for GKE。在這個情境中,機群主專案也是共用虛擬私有雲主專案。 - 第二個虛擬私有雲原生 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
在這個情境中,機群主專案也是共用虛擬私有雲主專案。共用虛擬私有雲網路位於共用虛擬私有雲主專案中,因此必須在該專案中啟用 Cloud DNS API。GKE 會在主專案中建立 Cloud DNS 代管不公開區域,並授權共用虛擬私人雲端網路使用這些區域。
啟用 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_PROJ
gcloud 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.networkViewer
gcloud 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
:車隊主專案的專案編號,與這個情境的共用虛擬私有雲主專案相同
向機群註冊叢集
向機群註冊第一個叢集。由於第一個叢集與要註冊的機群位於同一個專案,因此這個指令可以使用
--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,在本情境中與共用虛擬私有雲主專案相同。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,在本情境中與共用虛擬私有雲主專案相同。LOCATION
:以以下內容取代LOCATION
:- 如果叢集是區域叢集,則為叢集的 Compute Engine 區域
- 如果叢集是地區叢集,則為叢集的 Compute Engine 地區
SECOND_CLUSTER_PROJECT
:包含第二個叢集的專案。SECOND_CLUSTER_NAME
:第二個叢集的名稱。
為叢集建立通用命名空間
請確保每個叢集都有命名空間,可供共用服務。視需要使用下列指令,在每個叢集中建立命名空間:
kubectl create ns NAMESPACE
將
NAMESPACE
替換為命名空間的名稱。
不同共用虛擬私有雲服務專案中的叢集
本節提供 MCS 設定範例,其中包含兩個現有的 GKE 叢集,分別位於不同的共用虛擬私有雲服務專案中。
- 兩個叢集在
SHARED_VPC_HOST_PROJ
中使用相同的共用虛擬私有雲網路。 - 第一個虛擬私有雲原生 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
在這個情境中,車隊主專案是連線至共用虛擬私有雲主專案的服務專案。共用虛擬私有雲網路位於共用虛擬私有雲主專案中,因此必須在該專案中啟用 Cloud DNS API。GKE 會在主專案中建立 Cloud DNS 代管不公開區域,並授權共用虛擬私人雲端網路使用這些區域。
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_PROJ
gcloud 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 繫結,在共用虛擬私有雲主專案中,將 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
gcloud 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
:共用虛擬私有雲主專案的專案 ID。在本範例中,兩個叢集都使用相同的共用 VPC 網路,但兩個叢集都不位於共用 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,在本情境中與共用虛擬私有雲主專案相同。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,在本情境中與共用虛擬私有雲主專案相同。LOCATION
:以以下內容取代LOCATION
:- 如果叢集是區域叢集,則為叢集的 Compute Engine 區域
- 如果叢集是地區叢集,則為叢集的 Compute Engine 地區
SECOND_CLUSTER_PROJECT
:包含第二個叢集的專案。SECOND_CLUSTER_NAME
:第二個叢集的名稱。
為叢集建立通用命名空間
請確保每個叢集都有命名空間,可供共用服務。視需要使用下列指令,在每個叢集中建立命名空間:
kubectl create ns NAMESPACE
將
NAMESPACE
替換為命名空間的名稱。
後續步驟
- 瞭解如何使用 MCS。