Configurar serviços em vários clusters com a VPC partilhada

Esta página descreve cenários comuns dos serviços multicluster (MCS). Os cenários apresentados nesta página partilham as seguintes características:

  • Dois clusters do GKE: o primeiro cluster do GKE está registado na frota do seu próprio projeto. Este é o projeto anfitrião da frota. O segundo cluster do GKE está registado na mesma frota, embora, consoante o cenário, possa não estar no mesmo projeto. Ambos os clusters do GKE são clusters nativos de VPC.
  • Mesma rede VPC: ambos os clusters do GKE usam sub-redes na mesma rede VPC partilhada.
  • A federação de identidade da carga de trabalho para o GKE está ativada em ambos os clusters.

Terminologia

Os termos projeto anfitrião da VPC partilhada e projeto anfitrião da frota do GKE têm significados diferentes.

  • O projeto anfitrião de VPC partilhada é o projeto que contém a rede VPC partilhada.
  • O projeto anfitrião da frota do GKE é o projeto que contém a frota na qual regista os clusters.

Cenários

A tabela seguinte descreve cenários comuns de MCS:

Cenário Projeto anfitrião da frota (projeto que contém o primeiro cluster) A localização do segundo cluster
Clusters no mesmo projeto de serviço de VPC partilhada Um projeto de serviço de VPC partilhada O mesmo projeto de serviço da VPC partilhada que o primeiro cluster
Projeto anfitrião de VPC partilhada como projeto anfitrião da frota (Um cluster no projeto anfitrião de VPC partilhada e um segundo cluster num projeto de serviço de VPC partilhada) O projeto anfitrião da VPC partilhada Um projeto de serviço de VPC partilhada
Clusters em diferentes projetos de serviço de VPC partilhada Um projeto de serviço de VPC partilhada Um projeto de serviço de VPC partilhada diferente

Pré-requisitos

Antes de configurar uma configuração entre projetos do MCS, certifique-se de que conhece:

Clusters no mesmo projeto de serviço de VPC partilhada

Esta secção fornece um exemplo de configuração do MCS que envolve dois clusters do GKE existentes, ambos no mesmo projeto de serviço da VPC partilhada:

  • Ambos os clusters usam a mesma rede VPC partilhada no SHARED_VPC_HOST_PROJ.
  • O primeiro cluster do GKE nativo da VPC FIRST_CLUSTER_NAME, com a Workload Identity Federation para o GKE ativada, é criado no FLEET_HOST_PROJ. O projeto anfitrião da frota é um projeto de serviço ligado ao SHARED_VPC_HOST_PROJ neste cenário.
  • O segundo cluster do GKE nativo de VPC SECOND_CLUSTER_NAME, com a federação de identidade da força de trabalho para o GKE ativada, também é criado no FLEET_HOST_PROJ.

Ative as APIs necessárias

Ative as APIs necessárias. O resultado da Google Cloud CLI mostra se uma API já foi ativada.

  1. Ative a API Cloud DNS:

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

    Neste cenário, o projeto anfitrião da frota é um projeto de serviço ligado ao projeto anfitrião da VPC partilhada. A API Cloud DNS tem de estar ativada no projeto anfitrião da VPC partilhada porque é aí que a rede da VPC partilhada está localizada. O GKE cria zonas privadas geridas do Cloud DNS no projeto anfitrião e autoriza-as para a rede de VPC partilhada.

  2. Ative a API GKE Hub (frota). A API GKE Hub tem de estar ativada apenas no projeto anfitrião da frota.

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

    A ativação desta API no projeto anfitrião da frota cria ou garante que existe a seguinte conta de serviço: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Ative as APIs Cloud Service Mesh, Resource Manager e Multi-cluster Service Discovery no projeto anfitrião da frota:

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

Ative os serviços em vários clusters no projeto anfitrião da frota

  1. Ative os serviços em vários clusters no projeto anfitrião da frota:

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

    A ativação de serviços multicluster no projeto anfitrião da frota cria ou garante que existe a seguinte conta de serviço: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Crie vinculações de IAM

  1. Crie uma associação da IAM que conceda à conta de serviço do MCS do projeto anfitrião da frota a função de agente do serviço MCS no projeto anfitrião da VPC partilhada:

    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 uma associação de IAM que conceda à conta de serviço do MCS do projeto anfitrião da frota a função de utilizador da rede para o 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
    

    Uma vez que este cenário usa a Workload Identity Federation para o GKE, a conta de serviço do GKE do importador do MCS do projeto anfitrião da frota precisa da função de utilizador da rede para o seu próprio projeto.

    Substitua o seguinte:

    • SHARED_VPC_HOST_PROJ: o ID do projeto do projeto anfitrião da VPC partilhada
    • FLEET_HOST_PROJ_NUMBER: o número do projeto do projeto anfitrião do conjunto, que é o projeto de serviço de VPC partilhada para este cenário
    • FLEET_HOST_PROJ: o ID do projeto do projeto do primeiro cluster.

Registe os clusters na frota

  1. Registe o primeiro cluster na frota. A flag --gke-cluster pode ser usada para este comando porque o primeiro cluster está localizado no mesmo projeto que a frota na qual está a ser registado.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Substitua o seguinte:

    • MEMBERSHIP_NAME_1: um identificador exclusivo para este cluster nesta frota. Por exemplo, pode usar o nome do primeiro cluster do GKE.
    • FLEET_HOST_PROJ: o ID do projeto do projeto de anfitrião da frota, idêntico ao projeto de anfitrião da VPC partilhada 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. Registe o segundo cluster no projeto anfitrião da frota. A flag --gke-cluster pode ser usada para este comando porque o segundo cluster também está localizado no projeto de anfitrião da frota.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/SECOND_CLUSTER_NAME
    

    Substitua o seguinte:

    • MEMBERSHIP_NAME_2: um identificador exclusivo para este cluster nesta frota. Por exemplo, pode usar o nome do segundo cluster do GKE.
    • FLEET_HOST_PROJ: o ID do projeto do projeto de anfitrião da frota, idêntico ao projeto de anfitrião da VPC partilhada 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.

Crie um espaço de nomes comum para os clusters

  1. Certifique-se de que cada cluster tem um espaço de nomes para partilhar serviços. Se necessário, crie um espaço de nomes com o seguinte comando em cada cluster:

    kubectl create ns NAMESPACE
    

    Substitua NAMESPACE por um nome para o espaço de nomes.

Projeto anfitrião da VPC partilhada como projeto anfitrião da frota

Esta secção apresenta um exemplo de configuração do MCS que envolve dois clusters do GKE existentes:

  • O primeiro cluster do GKE nativo de VPC FIRST_CLUSTER_NAME, com a Workload Identity Federation para o GKE ativada, foi criado em FLEET_HOST_PROJ. O projeto anfitrião da frota também é o projeto anfitrião da VPC partilhada neste cenário.
  • O segundo cluster do GKE nativo de VPC SECOND_CLUSTER_NAME, com a federação de identidade da carga de trabalho para o GKE ativada, foi criado em SECOND_CLUSTER_PROJ.

Ative as APIs necessárias

Ative as APIs necessárias. O resultado da Google Cloud CLI mostra se uma API já foi ativada.

  1. Ative a API Cloud DNS:

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

    Neste cenário, o projeto anfitrião da frota também é o projeto anfitrião da VPC partilhada. A API Cloud DNS tem de estar ativada no projeto anfitrião da VPC partilhada, uma vez que é aí que a rede VPC partilhada está localizada. O GKE cria zonas privadas geridas do Cloud DNS no projeto anfitrião e autoriza-as para a rede da VPC partilhada.

  2. Ative a API GKE Hub (frota). A API GKE Hub tem de estar ativada apenas no projeto anfitrião da frota.

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

    A ativação da API GKE Hub no projeto anfitrião da frota cria ou garante que existe a seguinte conta de serviço: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Ative as APIs Cloud Service Mesh, Resource Manager e Multi-cluster Service Discovery, no projeto anfitrião 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
    

Ative os serviços em vários clusters no projeto anfitrião da frota

  1. Ative os serviços em vários clusters no projeto anfitrião da frota:

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

    A ativação de serviços multicluster no projeto anfitrião da frota cria ou garante que existe a seguinte conta de serviço: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Crie vinculações de IAM

  1. Crie uma associação de IAM que conceda à conta de serviço do GKE da frota do projeto anfitrião a função 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 uma associação de IAM que conceda à conta de serviço do MCS do projeto anfitrião da frota a função de agente do serviço MCS no projeto do segundo 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 uma associação da IAM que conceda à conta de serviço do MCS de cada projeto a função de utilizador da rede para o respetivo 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
    

    Uma vez que este cenário usa a Workload Identity Federation para o GKE, a conta de serviço do GKE do importador do MCS de cada projeto precisa da função Utilizador da rede para o seu próprio projeto.

    Substitua o seguinte:

    • SECOND_CLUSTER_PROJ: o ID do projeto do projeto do segundo cluster
    • FLEET_HOST_PROJ: o ID do projeto do projeto do primeiro cluster.
    • FLEET_HOST_PROJ_NUMBER: o número do projeto do projeto anfitrião do grupo de veículos, que é o mesmo que o projeto anfitrião da VPC partilhada para este cenário

Registe os clusters na frota

  1. Registe o primeiro cluster na frota. A flag --gke-cluster pode ser usada para este comando porque o primeiro cluster está localizado no mesmo projeto que a frota na qual está a ser registado.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Substitua o seguinte:

    • MEMBERSHIP_NAME_1: um identificador exclusivo para este cluster nesta frota. Por exemplo, pode usar o nome do primeiro cluster do GKE.
    • FLEET_HOST_PROJ: o ID do projeto do projeto anfitrião do grupo de dispositivos, idêntico ao projeto anfitrião da VPC partilhada 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. Registe o segundo cluster na frota. A flag --gke-uri tem de ser usada para este comando porque o segundo cluster não está localizado no mesmo projeto que a frota. Pode obter o URI completo do cluster executando 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 o seguinte:

    • MEMBERSHIP_NAME_2: um identificador exclusivo para este cluster nesta frota. Por exemplo, pode usar o nome do segundo cluster do GKE.
    • FLEET_HOST_PROJ: o ID do projeto do anfitrião da frota, idêntico ao projeto do anfitrião da VPC partilhada neste cenário.
    • LOCATION: substituir LOCATION por:
      • A zona do Compute Engine do cluster, se o cluster for um cluster zonal
      • A região do Compute Engine do cluster, se o cluster for um cluster regional
    • SECOND_CLUSTER_PROJECT: o projeto que contém o segundo cluster.
    • SECOND_CLUSTER_NAME: o nome do segundo cluster.

Crie um espaço de nomes comum para os clusters

  1. Certifique-se de que cada cluster tem um espaço de nomes para partilhar serviços. Se necessário, crie um espaço de nomes com o seguinte comando em cada cluster:

    kubectl create ns NAMESPACE
    

    Substitua NAMESPACE por um nome para o espaço de nomes.

Clusters em diferentes projetos de serviço de VPC partilhada

Esta secção fornece um exemplo de configuração do MCS que envolve dois clusters do GKE existentes, cada um num projeto de serviço de VPC partilhada diferente.

  • Ambos os clusters usam a mesma rede VPC partilhada no SHARED_VPC_HOST_PROJ.
  • O primeiro cluster do GKE nativo de VPC FIRST_CLUSTER_NAME, com a Workload Identity Federation para o GKE ativada, foi criado em FLEET_HOST_PROJ. O projeto de alojamento da frota é um projeto de serviço ligado ao SHARED_VPC_HOST_PROJ neste cenário.
  • O segundo cluster do GKE nativo de VPC SECOND_CLUSTER_NAME, com a federação de identidade da carga de trabalho para o GKE ativada, foi criado em SECOND_CLUSTER_PROJ. O SECOND_CLUSTER_PROJ também é um projeto de serviço ligado ao SHARED_VPC_HOST_PROJ neste cenário.

Ative as APIs necessárias

Ative as APIs necessárias. O resultado da Google Cloud CLI mostra se uma API já foi ativada.

  1. Ative a API Cloud DNS:

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

    Neste cenário, o projeto anfitrião da frota é um projeto de serviço ligado ao projeto anfitrião da VPC partilhada. A API Cloud DNS tem de estar ativada no projeto anfitrião da VPC partilhada porque é aí que a rede da VPC partilhada está localizada. O GKE cria zonas privadas geridas do Cloud DNS no projeto anfitrião e autoriza-as para a rede de VPC partilhada.

  2. GKE Hub (fleet) API. A API GKE Hub tem de estar ativada apenas no projeto anfitrião da frota FLEET_HOST_PROJ.

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

    A ativação desta API no projeto anfitrião da frota cria ou garante que existe a seguinte conta de serviço: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Ative as APIs Cloud Service Mesh, Resource Manager e Multi-cluster Service Discovery, no projeto anfitrião 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
    

Ative os serviços em vários clusters no projeto anfitrião da frota

  1. Ative os serviços em vários clusters no projeto anfitrião da frota:

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

    A ativação de serviços multicluster no projeto anfitrião da frota cria ou garante que existe a seguinte conta de serviço: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Crie vinculações de IAM

  1. Crie uma associação de IAM que conceda à conta de serviço do GKE Hub do projeto anfitrião da frota a função 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 uma associação de IAM que conceda à conta de serviço do MCS do projeto anfitrião da frota a função de agente do serviço MCS no projeto do segundo 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 uma associação da IAM que conceda à conta de serviço do MCS do projeto anfitrião da frota a função de agente do serviço MCS no projeto anfitrião da VPC partilhada:

    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 uma associação da IAM que conceda à conta de serviço do MCS de cada projeto a função de utilizador da rede para o respetivo 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
    

    Uma vez que este cenário usa a Workload Identity Federation para o GKE, a conta de serviço do GKE do importador do MCS de cada projeto precisa da função Utilizador da rede para o seu próprio projeto.

    Substitua o seguinte, conforme necessário, nos comandos anteriores:

    • SECOND_CLUSTER_PROJ: o ID do projeto do projeto do segundo cluster.
    • SHARED_VPC_HOST_PROJ: o ID do projeto do projeto anfitrião da VPC partilhada. Neste exemplo, ambos os clusters usam a mesma rede VPC partilhada, mas nenhum dos clusters está localizado no projeto anfitrião da VPC partilhada.
    • FLEET_HOST_PROJ: o ID do projeto do projeto do primeiro cluster.
    • FLEET_HOST_PROJ_NUMBER: o número do projeto do projeto host da frota.

Registe os clusters na frota

  1. Registe o primeiro cluster na frota. A flag --gke-cluster pode ser usada para este comando porque o primeiro cluster está localizado no mesmo projeto que a frota na qual está a ser registado.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Substitua o seguinte:

    • MEMBERSHIP_NAME_1: um identificador exclusivo para este cluster nesta frota. Por exemplo, pode usar o nome do primeiro cluster do GKE.
    • FLEET_HOST_PROJ: o ID do projeto do projeto de anfitrião da frota, idêntico ao projeto de anfitrião da VPC partilhada 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. Registe o segundo cluster na frota. Tem de usar a flag --gke-uri para este comando porque o segundo cluster não está localizado no mesmo projeto que a frota. Pode obter o URI completo do cluster executando 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 o seguinte:

    • MEMBERSHIP_NAME_2: um identificador exclusivo para este cluster nesta frota. Por exemplo, pode usar o nome do segundo cluster do GKE.
    • FLEET_HOST_PROJ: o ID do projeto do projeto de anfitrião da frota, idêntico ao projeto de anfitrião da VPC partilhada neste cenário.
    • LOCATION: substituir LOCATION por:
      • A zona do Compute Engine do cluster, se o cluster for um cluster zonal
      • A região do Compute Engine do cluster, se o cluster for um cluster regional
    • SECOND_CLUSTER_PROJECT: o projeto que contém o segundo cluster.
    • SECOND_CLUSTER_NAME: o nome do segundo cluster.

Crie um espaço de nomes comum para os clusters

  1. Certifique-se de que cada cluster tem um espaço de nomes para partilhar serviços. Se necessário, crie um espaço de nomes com o seguinte comando em cada cluster:

    kubectl create ns NAMESPACE
    

    Substitua NAMESPACE por um nome para o espaço de nomes.

O que se segue?