使用共用虛擬私有雲設定多叢集服務


本頁面說明常見的多叢集服務 (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 是否已啟用。

  1. 啟用 Cloud DNS API:

    gcloud services enable dns.googleapis.com \
        --project SHARED_VPC_HOST_PROJ
    

    在這個情境中,車隊主專案是連線至共用虛擬私有雲主專案的服務專案。共用虛擬私有雲網路位於共用虛擬私有雲主專案中,因此必須在該專案中啟用 Cloud DNS API。GKE 會在主專案中建立 Cloud DNS 代管不公開區域,並授權共用虛擬私人雲端網路使用這些區域。

  2. 啟用 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

  3. 在車隊主專案中啟用 Cloud Service Mesh、Resource Manager 和多叢集服務探索 API:

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project FLEET_HOST_PROJ
    

在機群主專案中啟用多叢集服務

  1. 在機群主專案中啟用多叢集服務:

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    在 Fleet 主機專案中啟用多叢集服務時,系統會建立或確保存在下列服務帳戶:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com

建立 IAM 繫結

  1. 建立 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
    
  2. 建立 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:共用虛擬私有雲主專案的專案 ID
    • FLEET_HOST_PROJ_NUMBER:車隊主專案的專案編號,也就是這個情境的共用虛擬私有雲服務專案
    • FLEET_HOST_PROJ:第一個叢集專案的專案 ID。

向機群註冊叢集

  1. 向機群註冊第一個叢集。由於第一個叢集與要註冊的機群位於同一個專案,因此這個指令可以使用 --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:第一個叢集的名稱。
  2. 向機群主專案註冊第二個叢集。由於第二個叢集也位於機群主機專案中,因此這個指令可以使用 --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:第二個叢集的名稱。

為叢集建立通用命名空間

  1. 請確保每個叢集都有命名空間,可供共用服務。視需要使用下列指令,在每個叢集中建立命名空間:

    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 是否已啟用。

  1. 啟用 Cloud DNS API:

    gcloud services enable dns.googleapis.com \
        --project FLEET_HOST_PROJ
    

    在這個情境中,機群主專案也是共用虛擬私有雲主專案。共用虛擬私有雲網路位於共用虛擬私有雲主專案中,因此必須在該專案中啟用 Cloud DNS API。GKE 會在主專案中建立 Cloud DNS 代管不公開區域,並授權共用虛擬私人雲端網路使用這些區域。

  2. 啟用 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

  3. 在車隊主專案和第二個叢集的專案中,啟用 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
    

在機群主專案中啟用多叢集服務

  1. 在機群主專案中啟用多叢集服務:

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    在 Fleet 主機專案中啟用多叢集服務時,系統會建立或確保存在下列服務帳戶:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com

建立 IAM 繫結

  1. 建立 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
    
  2. 建立 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
    
  3. 建立 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
    • FLEET_HOST_PROJ:第一個叢集專案的專案 ID。
    • FLEET_HOST_PROJ_NUMBER:車隊主專案的專案編號,與這個情境的共用虛擬私有雲主專案相同

向機群註冊叢集

  1. 向機群註冊第一個叢集。由於第一個叢集與要註冊的機群位於同一個專案,因此這個指令可以使用 --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:第一個叢集的名稱。
  2. 向機群註冊第二個叢集。由於第二個叢集與機群不在同一個專案中,因此這個指令必須使用 --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:第二個叢集的名稱。

為叢集建立通用命名空間

  1. 請確保每個叢集都有命名空間,可供共用服務。視需要使用下列指令,在每個叢集中建立命名空間:

    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 是否已啟用。

  1. 啟用 Cloud DNS API:

    gcloud services enable dns.googleapis.com \
        --project SHARED_VPC_HOST_PROJ
    

    在這個情境中,車隊主專案是連線至共用虛擬私有雲主專案的服務專案。共用虛擬私有雲網路位於共用虛擬私有雲主專案中,因此必須在該專案中啟用 Cloud DNS API。GKE 會在主專案中建立 Cloud DNS 代管不公開區域,並授權共用虛擬私人雲端網路使用這些區域。

  2. 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

  3. 在車隊主專案和第二個叢集的專案中,啟用 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
    

在機群主專案中啟用多叢集服務

  1. 在機群主專案中啟用多叢集服務:

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    在 Fleet 主機專案中啟用多叢集服務時,系統會建立或確保存在下列服務帳戶:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com

建立 IAM 繫結

  1. 建立 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
    
  2. 建立 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
    
  3. 建立 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
    
  4. 建立 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:車隊主專案的專案號碼。

向機群註冊叢集

  1. 向機群註冊第一個叢集。由於第一個叢集與要註冊的機群位於同一個專案,因此這個指令可以使用 --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:第一個叢集的名稱。
  2. 向機群註冊第二個叢集。由於第二個叢集與機群不在同一個專案中,因此這個指令必須使用 --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:第二個叢集的名稱。

為叢集建立通用命名空間

  1. 請確保每個叢集都有命名空間,可供共用服務。視需要使用下列指令,在每個叢集中建立命名空間:

    kubectl create ns NAMESPACE
    

    NAMESPACE 替換為命名空間的名稱。

後續步驟