このページでは、マルチクラスタ サービス(MCS)の一般的なシナリオについて説明します。このページで説明するシナリオは、次の特徴があります。
- 2 つの GKE クラスタ: 最初の GKE クラスタは、自身のプロジェクトのフリートに登録されます。これはフリート ホスト プロジェクトです。2 番目の GKE クラスタが同じフリートに登録されていますが、シナリオによっては、同じプロジェクト内に存在しない場合もあります。どちらの GKE クラスタも VPC ネイティブ クラスタです。
- 同じ VPC ネットワーク: 両方の GKE クラスタが同じ共有 VPC ネットワーク内のサブネットを使用します。
- 両方のクラスタで GKE 用 Workload Identity 連携が有効になっています。
用語
共有 VPC ホスト プロジェクトと GKE フリート ホスト プロジェクトという用語は意味が異なります。
- 共有 VPC ホスト プロジェクトは、共有 VPC ネットワークを含むプロジェクトです。
- GKE フリート ホスト プロジェクトは、クラスタを登録するフリートを含むプロジェクトです。
シナリオ
次の表に、MCS の一般的なシナリオを示します。
シナリオ | フリート ホスト プロジェクト(最初のクラスタを含むプロジェクト) | 2 番目のクラスタのロケーション |
---|---|---|
同じ共有 VPC サービス プロジェクト内のクラスタ | 共有 VPC サービス プロジェクト | 最初のクラスタと同じ共有 VPC サービス プロジェクト |
フリート ホスト プロジェクトとしての共有 VPC ホスト プロジェクト(共有 VPC ホスト プロジェクトの 1 つのクラスタ、共有 VPC サービス プロジェクトの 2 つ目のクラスタ) | 共有 VPC ホスト プロジェクト | 共有 VPC サービス プロジェクト |
異なる共有 VPC サービス プロジェクトのクラスタ | 共有 VPC サービス プロジェクト | 別の共有 VPC サービス プロジェクト |
前提条件
MCS の複数のプロジェクトにまたがる構成を設定する前に、次の点について理解しておいてください。
同じ共有 VPC サービス プロジェクト内のクラスタ
このセクションでは、同じ共有 VPC サービス プロジェクトに既存の 2 つの GKE クラスタが存在する MCS 構成例について説明します。
- 両方のクラスタが
SHARED_VPC_HOST_PROJ
で同じ共有 VPC ネットワークを使用します。 - GKE 用 Workload Identity 連携が有効になっている最初の VPC ネイティブ GKE クラスタ
FIRST_CLUSTER_NAME
がFLEET_HOST_PROJ
に作成されます。このシナリオでは、フリート ホスト プロジェクトはSHARED_VPC_HOST_PROJ
に接続されたサービス プロジェクトです。 - GKE 用 Workload Identity 連携が有効になっている 2 番目の VPC ネイティブ GKE クラスタ
SECOND_CLUSTER_NAME
もFLEET_HOST_PROJ
に作成されます。
必要な API を有効にする
必要な API を有効にします。API がすでに有効になっているかどうかは、Google Cloud CLI の出力で確認できます。
Cloud DNS API を有効にします。
gcloud services enable dns.googleapis.com \ --project SHARED_VPC_HOST_PROJ
このシナリオでは、フリート ホスト プロジェクトは共有 VPC ホスト プロジェクトに接続されているサービス プロジェクトです。共有 VPC ホスト プロジェクトに共有 VPC ネットワークが存在するため、Cloud DNS API を有効にする必要があります。GKE はホスト プロジェクトに Cloud DNS 限定公開マネージド ゾーンを作成し、共有 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 API、Resource Manager API、Multi-Cluster Service Discovery 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
フリート ホスト プロジェクトでマルチクラスタ サービスを有効にすると、サービス アカウント
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com
が作成されます。
IAM バインディングを作成する
共有 VPC ホスト プロジェクトに対する MCS サービス エージェントのロールを、フリート ホスト プロジェクトの MCS サービス アカウントに付与する IAM バインディングを作成します。
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
自身のプロジェクトに対するネットワーク ユーザー ロールをフリート ホスト プロジェクトの MCS サービス アカウントに付与する IAM バインディングを作成します。
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 用 Workload Identity 連携を使用するため、フリート ホスト プロジェクトの MCS インポータ GKE サービス アカウントには、自身のプロジェクトに対するネットワーク ユーザー ロールが必要です。
次のように置き換えます。
SHARED_VPC_HOST_PROJ
: 共有 VPC ホスト プロジェクトのプロジェクト IDFLEET_HOST_PROJ_NUMBER
: フリート ホスト プロジェクトのプロジェクト番号(このシナリオの共有 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
: このフリート内のこのクラスタの一意の識別子。たとえば、最初の GKE クラスタの名前を使用できます。FLEET_HOST_PROJ
: フリート ホスト プロジェクトのプロジェクト ID(このシナリオでは、共有 VPC ホスト プロジェクトと同じ)。LOCATION
: ゾーンクラスタの場合は、クラスタを含む Compute Engine ゾーン。リージョン クラスタの場合は、クラスタを含む Compute Engine リージョン。FIRST_CLUSTER_NAME
: 最初のクラスタの名前。
2 番目のクラスタをフリート ホスト プロジェクトに登録します。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
: このフリート内のこのクラスタの一意の識別子。たとえば、2 番目の GKE クラスタの名前を使用できます。FLEET_HOST_PROJ
: フリート ホスト プロジェクトのプロジェクト ID(このシナリオでは、共有 VPC ホスト プロジェクトと同じ)。LOCATION
: ゾーンクラスタの場合は、クラスタを含む Compute Engine ゾーン。リージョン クラスタの場合は、クラスタを含む Compute Engine リージョン。SECOND_CLUSTER_NAME
: 2 番目のクラスタの名前。
クラスタに共通の Namespace を作成する
各クラスタに、Service を共有する Namespace があることを確認します。必要に応じて、各クラスタで次のコマンドを使用して Namespace を作成します。
kubectl create ns NAMESPACE
NAMESPACE
は Namespace の名前に置き換えます。
フリート ホスト プロジェクトとしての共有 VPC ホスト プロジェクト
このセクションでは、既存の 2 つの GKE クラスタを含む MCS 構成の例について説明します。
- GKE 用 Workload Identity 連携が有効になっている最初の VPC ネイティブ GKE クラスタ
FIRST_CLUSTER_NAME
がFLEET_HOST_PROJ
に作成されました。このシナリオでは、フリート ホスト プロジェクトは共有 VPC ホスト プロジェクトでもあります。 - GKE 用 Workload Identity 連携が有効になっている 2 つ目の VPC ネイティブ GKE クラスタ
SECOND_CLUSTER_NAME
がSECOND_CLUSTER_PROJ
に作成されました。
必要な API を有効にする
必要な API を有効にします。API がすでに有効になっているかどうかは、Google Cloud CLI の出力で確認できます。
Cloud DNS API を有効にします。
gcloud services enable dns.googleapis.com \ --project FLEET_HOST_PROJ
このシナリオでは、フリート ホスト プロジェクトは共有 VPC ホスト プロジェクトでもあります。共有 VPC ホスト プロジェクトに共有 VPC ネットワークが存在するため、Cloud DNS API を有効にする必要があります。GKE はホスト プロジェクトに Cloud DNS 限定公開マネージド ゾーンを作成し、共有 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
が作成されます。フリート ホスト プロジェクトと 2 番目のクラスタのプロジェクトの両方で、Cloud Service Mesh API、Resource Manager API、Multi-Cluster Service Discovery 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
フリート ホスト プロジェクトでマルチクラスタ サービスを有効にすると、サービス アカウント
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com
が作成されます。
IAM バインディングを作成する
2 番目のクラスタのプロジェクトに対する GKE サービス エージェントのロールをフリート ホスト プロジェクトの GKE フリート サービス アカウントに付与する IAM バインディングを作成します。
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 番目のクラスタのプロジェクトに対する MCS サービス エージェントのロールをフリート ホスト プロジェクトの MCS サービス アカウントに付与する IAM バインディングを作成します。
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
自身のプロジェクトに対するネットワーク ユーザー ロールを各プロジェクトの MCS サービス アカウントに付与する IAM バインディングを作成します。
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 連携を使用するため、各プロジェクトの MCS インポータの GKE サービス アカウントには、自身のプロジェクトに対するネットワーク ユーザー ロールが必要です。
次のように置き換えます。
SECOND_CLUSTER_PROJ
: 2 番目のクラスタのプロジェクトのプロジェクト IDFLEET_HOST_PROJ
: 最初のクラスタのプロジェクトのプロジェクト ID。FLEET_HOST_PROJ_NUMBER
: フリート ホスト プロジェクトのプロジェクト番号(このシナリオの場合、共有 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
: このフリート内のこのクラスタの一意の識別子。たとえば、最初の GKE クラスタの名前を使用できます。FLEET_HOST_PROJ
: フリート ホスト プロジェクトのプロジェクト ID(このシナリオでは、共有 VPC ホスト プロジェクトと同じ)。LOCATION
: ゾーンクラスタの場合は、クラスタを含む Compute Engine ゾーン。リージョン クラスタの場合は、クラスタを含む Compute Engine リージョン。FIRST_CLUSTER_NAME
: 最初のクラスタの名前。
2 番目のクラスタをフリートに登録します。2 番目のクラスタはフリートと同じプロジェクトにないため、このコマンドには
--gke-uri
フラグを使用する必要があります。クラスタの完全な URI を取得するには、gcloud container clusters list --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
: このフリート内のこのクラスタの一意の識別子。たとえば、2 番目の GKE クラスタの名前を使用できます。FLEET_HOST_PROJ
: フリート ホスト プロジェクトのプロジェクト ID(このシナリオでは、共有 VPC ホスト プロジェクトと同じ)。LOCATION
:LOCATION
は次のように置き換えます。- クラスタがゾーンクラスタの場合は、クラスタの Compute Engine ゾーン
- クラスタがリージョン クラスタの場合は、クラスタの Compute Engine リージョン
SECOND_CLUSTER_PROJECT
: 2 番目のクラスタを含むプロジェクト。SECOND_CLUSTER_NAME
: 2 番目のクラスタの名前。
クラスタに共通の Namespace を作成する
各クラスタに、Service を共有する Namespace があることを確認します。必要に応じて、各クラスタで次のコマンドを使用して Namespace を作成します。
kubectl create ns NAMESPACE
NAMESPACE
は Namespace の名前に置き換えます。
異なる共有 VPC サービス プロジェクトのクラスタ
このセクションでは、異なる共有 VPC サービス プロジェクトにある既存の 2 つの GKE クラスタを含む MCS 構成例について説明します。
- 両方のクラスタが
SHARED_VPC_HOST_PROJ
で同じ共有 VPC ネットワークを使用します。 - GKE 用 Workload Identity 連携が有効になっている最初の VPC ネイティブ GKE クラスタ
FIRST_CLUSTER_NAME
がFLEET_HOST_PROJ
に作成されました。このシナリオでは、フリート ホスト プロジェクトはSHARED_VPC_HOST_PROJ
に接続されたサービス プロジェクトです。 - GKE 用 Workload Identity 連携が有効になっている 2 つ目の VPC ネイティブ GKE クラスタ
SECOND_CLUSTER_NAME
がSECOND_CLUSTER_PROJ
に作成されました。このシナリオでは、SECOND_CLUSTER_PROJ
もSHARED_VPC_HOST_PROJ
に接続されるサービス プロジェクトです。
必要な API を有効にする
必要な API を有効にします。API がすでに有効になっているかどうかは、Google Cloud CLI の出力で確認できます。
Cloud DNS API を有効にします。
gcloud services enable dns.googleapis.com \ --project SHARED_VPC_HOST_PROJ
このシナリオでは、フリート ホスト プロジェクトは共有 VPC ホスト プロジェクトに接続されているサービス プロジェクトです。共有 VPC ホスト プロジェクトに共有 VPC ネットワークが存在するため、Cloud DNS API を有効にする必要があります。GKE はホスト プロジェクトに Cloud DNS 限定公開マネージド ゾーンを作成し、共有 VPC ネットワークに対して承認します。
GKE Hub(フリート)API。GKE Hub API は、フリート ホスト プロジェクト
FLEET_HOST_PROJ
でのみ有効にする必要があります。gcloud services enable gkehub.googleapis.com \ --project FLEET_HOST_PROJ
フリート ホスト プロジェクトでこの API を有効にすると、サービス アカウント
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com
が作成されます。フリート ホスト プロジェクトと 2 番目のクラスタのプロジェクトの両方で、Cloud Service Mesh API、Resource Manager API、Multi-Cluster Service Discovery 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
フリート ホスト プロジェクトでマルチクラスタ サービスを有効にすると、サービス アカウント
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com
が作成されます。
IAM バインディングを作成する
2 番目のクラスタのプロジェクトに対する GKE サービス エージェントのロールをフリート ホスト プロジェクトの GKE Hub サービス アカウントに付与する IAM バインディングを作成します。
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 番目のクラスタのプロジェクトに対する MCS サービス エージェントのロールをフリート ホスト プロジェクトの MCS サービス アカウントに付与する IAM バインディングを作成します。
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
共有 VPC ホスト プロジェクトに対する MCS サービス エージェントのロールを、フリート ホスト プロジェクトの MCS サービス アカウントに付与する IAM バインディングを作成します。
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
自身のプロジェクトに対するネットワーク ユーザー ロールを各プロジェクトの MCS サービス アカウントに付与する IAM バインディングを作成します。
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 連携を使用するため、各プロジェクトの MCS インポータの GKE サービス アカウントには、自身のプロジェクトに対するネットワーク ユーザー ロールが必要です。
前のコマンドで、必要に応じて次のように置き換えます。
SECOND_CLUSTER_PROJ
: 2 番目のクラスタのプロジェクトのプロジェクト ID。SHARED_VPC_HOST_PROJ
: 共有 VPC ホスト プロジェクトのプロジェクト 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
: このフリート内のこのクラスタの一意の識別子。たとえば、最初の GKE クラスタの名前を使用できます。FLEET_HOST_PROJ
: フリート ホスト プロジェクトのプロジェクト ID(このシナリオでは、共有 VPC ホスト プロジェクトと同じ)。LOCATION
: ゾーンクラスタの場合は、クラスタを含む Compute Engine ゾーン。リージョン クラスタの場合は、クラスタを含む Compute Engine リージョン。FIRST_CLUSTER_NAME
: 最初のクラスタの名前。
2 番目のクラスタをフリートに登録します。2 番目のクラスタはフリートと同じプロジェクトにないため、このコマンドには
--gke-uri
フラグを使用する必要があります。クラスタの完全な URI を取得するには、gcloud container clusters list --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
: このフリート内のこのクラスタの一意の識別子。たとえば、2 番目の GKE クラスタの名前を使用できます。FLEET_HOST_PROJ
: フリート ホスト プロジェクトのプロジェクト ID(このシナリオでは、共有 VPC ホスト プロジェクトと同じ)。LOCATION
:LOCATION
は次のように置き換えます。- クラスタがゾーンクラスタの場合は、クラスタの Compute Engine ゾーン
- クラスタがリージョン クラスタの場合は、クラスタの Compute Engine リージョン
SECOND_CLUSTER_PROJECT
: 2 番目のクラスタを含むプロジェクト。SECOND_CLUSTER_NAME
: 2 番目のクラスタの名前。
クラスタに共通の Namespace を作成する
各クラスタに、Service を共有する Namespace があることを確認します。必要に応じて、各クラスタで次のコマンドを使用して Namespace を作成します。
kubectl create ns NAMESPACE
NAMESPACE
は Namespace の名前に置き換えます。
次のステップ
- MCS の使用方法を確認する。