Como configurar serviços de vários clusters com a VPC compartilhada


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.

Cenários

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:

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 no FLEET_HOST_PROJ. O projeto host da frota é um projeto de serviço conectado ao SHARED_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 no FLEET_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.

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

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

  3. Ative as APIs Traffic Director, 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

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

  1. 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
    
  2. 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 compartilhadA
    • FLEET_HOST_PROJ_NUMBER: o número do projeto host da frota, que é o projeto do serviço da VPC compartilhada para esse cenário
    • FLEET_HOST_PROJ, o ID do projeto do primeiro cluster;

Registrar os clusters na frota

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

  1. 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 no FLEET_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 no SECOND_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.

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

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

  3. Ative as APIs Traffic Director, Resource Manager e Multi-cluster Service Discovery no projeto host da frota e 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

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

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

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

    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: substitua LOCATION 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

  1. 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 no FLEET_HOST_PROJ. O projeto host da frota é um projeto de serviço conectado ao SHARED_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 no SECOND_CLUSTER_PROJ. O SECOND_CLUSTER_PROJ também é um projeto de serviço conectado ao SHARED_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.

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

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

  3. Ative as APIs Traffic Director, Resource Manager e Multi-cluster Service Discovery no projeto host da frota e 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

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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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

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

    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: substitua LOCATION 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

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