Nesta página, descrevemos cenários comuns de serviços de vários clusters (MCS, na sigla em inglês). Os cenários apresentados nesta página compartilham as seguintes características:
- Dois clusters do GKE: o primeiro cluster do GKE é registrado na frota do próprio projeto. Esse é o projeto host da frota. O segundo cluster do GKE está registrado na mesma frota, embora, dependendo do cenário, possa não estar no mesmo projeto. Ambos os clusters do GKE são clusters nativos de VPC.
- Mesma rede VPC: os dois clusters do GKE usam sub-redes na mesma rede VPC compartilhada.
- A federação de identidade da carga de trabalho do GKE está ativada nos dois clusters.
Terminologia
Os termos Projeto host da VPC compartilhada e Projeto host da frota do GKE têm significados diferentes.
- O projeto host da VPC compartilhada é o projeto que contém a rede VPC compartilhada.
- O projeto host da frota do GKE é o projeto que contém a frota em que você registra os clusters.
Scenarios
A tabela a seguir descreve cenários comuns de MCS:
Cenário | Projeto host da frota (projeto com o primeiro cluster) | O local do segundo cluster |
---|---|---|
Clusters no mesmo projeto de serviço de VPC compartilhada | Um projeto de serviço de VPC compartilhada | O mesmo projeto de serviço da VPC compartilhada que o primeiro cluster |
Projeto de host de VPC compartilhada como projeto de host de frota (um cluster no projeto de host de VPC compartilhada, um segundo cluster em um projeto de serviço de VPC compartilhada) | O projeto host da VPC compartilhada | Um projeto de serviço de VPC compartilhada |
Clusters em diferentes projetos de serviço de VPC compartilhada | Um projeto de serviço de VPC compartilhada | Um projeto de serviço de VPC compartilhada diferente |
Pré-requisitos
Antes de definir uma configuração entre projetos do MCS, conclua as etapas a seguir:
- Familiarize-se com os conceitos de VPC compartilhada.
- Verifique se você está familiarizado com a configuração de clusters com a VPC compartilhada.
- Entenda as limitações e os problemas conhecidos do MCS.
Clusters no mesmo projeto de serviço de VPC compartilhada
Nesta seção, você verá um exemplo de configuração do MCS que envolve dois clusters do GKE no mesmo projeto de serviço de VPC compartilhada:
- Os dois clusters usam a mesma rede VPC compartilhada no
SHARED_VPC_HOST_PROJ
. - O primeiro cluster do GKE nativo de VPC
FIRST_CLUSTER_NAME
, com a federação de identidade da carga de trabalho do GKE ativada, é criado noFLEET_HOST_PROJ
. O projeto host da frota é um projeto de serviço conectado aoSHARED_VPC_HOST_PROJ
nesse cenário. - O segundo cluster do GKE nativo de VPC
SECOND_CLUSTER_NAME
, com a federação de identidade da carga de trabalho do GKE ativada, também é criado noFLEET_HOST_PROJ
.
Ativar APIs obrigatórias
Ative as APIs necessárias. A saída da Google Cloud CLI mostrará se uma API já foi ativada.
Ative a API Cloud DNS:
gcloud services enable dns.googleapis.com \ --project SHARED_VPC_HOST_PROJ
Nesse cenário, o projeto host da frota é um projeto de serviço conectado ao projeto host da VPC compartilhada. A API Cloud DNS precisa estar ativada no projeto host da VPC compartilhada, que é onde a rede VPC compartilhada está localizada. O GKE cria zonas particulares gerenciadas do Cloud DNS no projeto host e as autoriza para a rede VPC compartilhada.
Ative a API GKE Hub (frota). A API GKE Hub precisa estar ativada apenas no projeto host da frota.
gcloud services enable gkehub.googleapis.com \ --project FLEET_HOST_PROJ
A ativação dessa API no projeto host da frota cria ou garante que a seguinte conta de serviço exista:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com
.Ative as APIs Cloud Service Mesh, Resource Manager e Multi-cluster Service Discovery no projeto host da frota:
gcloud services enable trafficdirector.googleapis.com \ cloudresourcemanager.googleapis.com \ multiclusterservicediscovery.googleapis.com \ --project FLEET_HOST_PROJ
Ativar serviços de vários clusters no projeto host da frota
Ative os serviços de vários clusters no projeto de host da frota:
gcloud container fleet multi-cluster-services enable \ --project FLEET_HOST_PROJ
A ativação de serviços de vários clusters no projeto de host da frota cria ou garante que a seguinte conta de serviço exista:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com
.
Criar vinculações do IAM
Crie a vinculação do IAM concedendo à conta de serviço MCS do projeto host da frota o papel "Agente de serviço" do MCS no projeto host da VPC compartilhada:
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
Crie a vinculação do IAM concedendo à conta de serviço MCS do projeto host da frota o papel de usuário da rede para seu próprio projeto:
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
Como esse cenário usa a federação de identidade da carga de trabalho do GKE, a conta de serviço MCS do Importer GKE do projeto host da frota precisa do papel de usuário da rede para o próprio projeto.
Substitua:
SHARED_VPC_HOST_PROJ
: o ID do projeto do projeto host da VPC compartilhadAFLEET_HOST_PROJ_NUMBER
: o número do projeto host da frota, que é o projeto do serviço da VPC compartilhada para esse cenárioFLEET_HOST_PROJ
, o ID do projeto do primeiro cluster;
Registrar os clusters na frota
Registre o primeiro cluster na frota. A sinalização
--gke-cluster
pode ser usada para esse comando, porque o primeiro cluster está localizado no mesmo projeto que a frota em que ele está sendo registrado.gcloud container fleet memberships register MEMBERSHIP_NAME_1 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
Substitua:
MEMBERSHIP_NAME_1
: um identificador exclusivo do cluster na frota. Por exemplo, use o nome do primeiro cluster do GKE.FLEET_HOST_PROJ
: o ID do projeto host da frota, idêntico ao projeto host da VPC compartilhada neste cenário.LOCATION
: para clusters zonais, a zona do Compute Engine que contém o cluster. para clusters regionais, a região do Compute Engine que contém o cluster.FIRST_CLUSTER_NAME
: o nome do primeiro cluster.
Registre o segundo cluster no projeto host da frota. A sinalização
--gke-cluster
pode ser usada para esse comando porque o segundo cluster também está localizado no projeto host da frota.gcloud container fleet memberships register MEMBERSHIP_NAME_2 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-cluster=LOCATION/SECOND_CLUSTER_NAME
Substitua:
MEMBERSHIP_NAME_2
: um identificador exclusivo do cluster na frota. Por exemplo, use o nome do segundo cluster do GKE.FLEET_HOST_PROJ
: o ID do projeto host da frota, idêntico ao projeto host da VPC compartilhada neste cenário.LOCATION
: para clusters zonais, a zona do Compute Engine que contém o cluster. para clusters regionais, a região do Compute Engine que contém o cluster.SECOND_CLUSTER_NAME
: o nome do segundo cluster.
Criar um namespace comum para os clusters
Verifique se cada cluster tem um namespace para compartilhar os serviços. Se necessário, crie um namespace usando o comando a seguir em cada cluster:
kubectl create ns NAMESPACE
Substitua
NAMESPACE
por um namespace.
Projeto de host de VPC compartilhada como projeto de host de frota
Nesta seção, você verá um exemplo de configuração do MCS que envolve dois clusters do GKE:
- O primeiro cluster do GKE nativo de VPC
FIRST_CLUSTER_NAME
, com a federação de identidade da carga de trabalho do GKE ativada, foi criado noFLEET_HOST_PROJ
. O projeto host da frota também é o projeto host da VPC compartilhada nesse cenário. - O segundo cluster do GKE nativo de VPC
SECOND_CLUSTER_NAME
, com a federação de identidade da carga de trabalho do GKE ativada, foi criado noSECOND_CLUSTER_PROJ
.
Ativar APIs obrigatórias
Ative as APIs necessárias. A saída da Google Cloud CLI mostrará se uma API já foi ativada.
Ative a API Cloud DNS:
gcloud services enable dns.googleapis.com \ --project FLEET_HOST_PROJ
Nesse cenário, o projeto host da frota também é o projeto host da VPC compartilhada. A API Cloud DNS precisa estar ativada no projeto host da VPC compartilhada, que é onde a rede VPC compartilhada está localizada. O GKE cria zonas particulares gerenciadas do Cloud DNS no projeto host e as autoriza para a rede VPC compartilhada.
Ative a API GKE Hub (frota). A API GKE Hub precisa estar ativada apenas no projeto host da frota.
gcloud services enable gkehub.googleapis.com \ --project FLEET_HOST_PROJ
Ativar a API GKE Hub no projeto host da frota cria ou garante que a seguinte conta de serviço exista:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com
.Ative as APIs Cloud Service Mesh, Resource Manager e Multi-cluster Service Discovery, tanto no projeto host da frota quanto no projeto do segundo cluster:
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
Ativar serviços de vários clusters no projeto host da frota
Ative os serviços de vários clusters no projeto de host da frota:
gcloud container fleet multi-cluster-services enable \ --project FLEET_HOST_PROJ
A ativação de serviços de vários clusters no projeto de host da frota cria ou garante que a seguinte conta de serviço exista:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com
.
Criar vinculações do IAM
Crie a vinculação do IAM concedendo à conta de serviço da frota do GKE do projeto host da frota o papel de agente de serviço do GKE no projeto do segundo cluster:
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
Crie a vinculação do IAM concedendo à conta de serviço MCS do projeto de host de frota o papel de agente de serviço do MCS no segundo projeto do cluster:
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
Crie a vinculação do IAM concedendo à conta de serviço MCS de cada projeto o papel de usuário da rede para o próprio projeto:
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
Como esse cenário usa a federação de identidade da carga de trabalho do GKE, a conta de serviço MCS do Importer GKE de cada projeto precisa do papel de usuário da rede para o próprio projeto.
Substitua:
SECOND_CLUSTER_PROJ
: o ID do projeto do segundo cluster;FLEET_HOST_PROJ
, o ID do projeto do primeiro cluster;FLEET_HOST_PROJ_NUMBER
: o número do projeto host da frota, que é o mesmo que o projeto host da VPC compartilhada para esse cenário;
Registrar os clusters na frota
Registre o primeiro cluster na frota. A sinalização
--gke-cluster
pode ser usada para esse comando, porque o primeiro cluster está localizado no mesmo projeto que a frota em que ele está sendo registrado.gcloud container fleet memberships register MEMBERSHIP_NAME_1 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
Substitua:
MEMBERSHIP_NAME_1
: um identificador exclusivo do cluster na frota. Por exemplo, use o nome do primeiro cluster do GKE.FLEET_HOST_PROJ
: o ID do projeto host da frota, idêntico ao projeto host da VPC compartilhada neste cenário.LOCATION
: para clusters zonais, a zona do Compute Engine que contém o cluster. para clusters regionais, a região do Compute Engine que contém o cluster.FIRST_CLUSTER_NAME
: o nome do primeiro cluster.
Registre o segundo cluster na frota. A sinalização
--gke-uri
precisa ser usada para esse comando porque o segundo cluster não está localizado no mesmo projeto que a frota. É possível conseguir o URI completo do cluster ao executargcloud 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
Substitua:
MEMBERSHIP_NAME_2
: um identificador exclusivo do cluster na frota. Por exemplo, use o nome do segundo cluster do GKE.FLEET_HOST_PROJ
: o ID do projeto host da frota, idêntico ao projeto host da VPC compartilhada neste cenário.LOCATION
: substituaLOCATION
por:- a zona do Compute Engine do cluster, se ele for um cluster zonal
- a região do Compute Engine do cluster, se ele for regional
SECOND_CLUSTER_PROJECT
: o projeto que contém o segundo cluster.SECOND_CLUSTER_NAME
: o nome do segundo cluster.
Criar um namespace comum para os clusters
Verifique se cada cluster tem um namespace para compartilhar os serviços. Se necessário, crie um namespace usando o comando a seguir em cada cluster:
kubectl create ns NAMESPACE
Substitua
NAMESPACE
por um namespace.
Clusters em diferentes projetos de serviço de VPC compartilhada
Nesta seção, você verá um exemplo de configuração do MCS que envolve dois clusters do GKE existentes em um projeto de serviço de VPC compartilhada diferente.
- Os dois clusters usam a mesma rede VPC compartilhada no
SHARED_VPC_HOST_PROJ
. - O primeiro cluster do GKE nativo de VPC
FIRST_CLUSTER_NAME
, com a federação de identidade da carga de trabalho do GKE ativada, foi criado noFLEET_HOST_PROJ
. O projeto host da frota é um projeto de serviço conectado aoSHARED_VPC_HOST_PROJ
nesse cenário. - O segundo cluster do GKE nativo de VPC
SECOND_CLUSTER_NAME
, com a federação de identidade da carga de trabalho do GKE ativada, foi criado noSECOND_CLUSTER_PROJ
. OSECOND_CLUSTER_PROJ
também é um projeto de serviço conectado aoSHARED_VPC_HOST_PROJ
nesse cenário.
Ativar APIs obrigatórias
Ative as APIs necessárias. A saída da Google Cloud CLI mostrará se uma API já foi ativada.
Ative a API Cloud DNS:
gcloud services enable dns.googleapis.com \ --project SHARED_VPC_HOST_PROJ
Nesse cenário, o projeto host da frota é um projeto de serviço conectado ao projeto host da VPC compartilhada. A API Cloud DNS precisa estar ativada no projeto host da VPC compartilhada, que é onde a rede VPC compartilhada está localizada. O GKE cria zonas particulares gerenciadas do Cloud DNS no projeto host e as autoriza para a rede VPC compartilhada.
API GKE Hub (frota). A API GKE Hub precisa ser ativada apenas no projeto host da frota
FLEET_HOST_PROJ
.gcloud services enable gkehub.googleapis.com \ --project FLEET_HOST_PROJ
A ativação dessa API no projeto host da frota cria ou garante que a seguinte conta de serviço exista:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com
.Ative as APIs Cloud Service Mesh, Resource Manager e Multi-cluster Service Discovery, tanto no projeto host da frota quanto no projeto do segundo cluster:
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
Ativar serviços de vários clusters no projeto host da frota
Ative os serviços de vários clusters no projeto de host da frota:
gcloud container fleet multi-cluster-services enable \ --project FLEET_HOST_PROJ
A ativação de serviços de vários clusters no projeto de host da frota cria ou garante que a seguinte conta de serviço exista:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com
.
Criar vinculações do IAM
Crie a vinculação do IAM concedendo à conta de serviço do GKE Hub da conta de serviço do projeto host da frota no papel de agente de serviço do GKE no projeto do segundo cluster:
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
Crie a vinculação do IAM concedendo à conta de serviço MCS do projeto de host de frota o papel de agente de serviço do MCS no segundo projeto do cluster:
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
Crie a vinculação do IAM concedendo à conta de serviço MCS do projeto host da frota o papel "Agente de serviço" do MCS no projeto host da VPC compartilhada:
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
Crie a vinculação do IAM concedendo à conta de serviço MCS de cada projeto o papel de usuário da rede para o próprio projeto:
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
Como esse cenário usa a federação de identidade da carga de trabalho do GKE, a conta de serviço MCS do Importer GKE de cada projeto precisa do papel de usuário da rede para o próprio projeto.
Substitua os seguintes itens conforme necessário nos comandos anteriores:
SECOND_CLUSTER_PROJ
, o ID do projeto do segundo cluster;SHARED_VPC_HOST_PROJ
: o ID do projeto do projeto host da VPC compartilhada. Neste exemplo, os dois clusters usam a mesma rede VPC compartilhada, mas nenhum deles está localizado no projeto host da VPC compartilhada.FLEET_HOST_PROJ
, o ID do projeto do primeiro cluster;FLEET_HOST_PROJ_NUMBER
: o número do projeto host da frota.
Registrar os clusters na frota
Registre o primeiro cluster na frota. A sinalização
--gke-cluster
pode ser usada para esse comando, porque o primeiro cluster está localizado no mesmo projeto que a frota em que ele está sendo registrado.gcloud container fleet memberships register MEMBERSHIP_NAME_1 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
Substitua:
MEMBERSHIP_NAME_1
: um identificador exclusivo do cluster na frota. Por exemplo, use o nome do primeiro cluster do GKE.FLEET_HOST_PROJ
: o ID do projeto host da frota, idêntico ao projeto host da VPC compartilhada neste cenário.LOCATION
: para clusters zonais, a zona do Compute Engine que contém o cluster. para clusters regionais, a região do Compute Engine que contém o cluster.FIRST_CLUSTER_NAME
: o nome do primeiro cluster.
Registre o segundo cluster na frota. A sinalização
--gke-uri
precisa ser usada para esse comando porque o segundo cluster não está localizado no mesmo projeto que a frota. É possível conseguir o URI completo do cluster ao executargcloud 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
Substitua:
MEMBERSHIP_NAME_2
: um identificador exclusivo do cluster na frota. Por exemplo, use o nome do segundo cluster do GKE.FLEET_HOST_PROJ
: o ID do projeto host da frota, idêntico ao projeto host da VPC compartilhada neste cenário.LOCATION
: substituaLOCATION
por:- a zona do Compute Engine do cluster, se ele for um cluster zonal
- a região do Compute Engine do cluster, se ele for regional
SECOND_CLUSTER_PROJECT
: o projeto que contém o segundo cluster.SECOND_CLUSTER_NAME
: o nome do segundo cluster.
Criar um namespace comum para os clusters
Verifique se cada cluster tem um namespace para compartilhar os serviços. Se necessário, crie um namespace usando o comando a seguir em cada cluster:
kubectl create ns NAMESPACE
Substitua
NAMESPACE
por um namespace.
A seguir
- Saiba como usar o MCS.