Ativar gateways de vários clusters


Nesta página, mostramos como ativar o controlador de gateway do GKE de vários clusters, um controlador hospedado pelo Google que provisiona balanceadores de carga externos e internos, para seus clusters do GKE. Para saber como usar os recursos de gateway e HTTPRoute para o balanceamento de carga de contêiner, consulte Como implantar gateways ou Como implantar gateways de vários clusters.

O controlador de gateway do GKE de vários clusters instala as seguintes GatewayClasses de vários clusters:

  • gke-l7-global-external-managed-mc para gateways externos globais de vários clusters
  • gke-l7-regional-external-managed-mc para gateways de cluster externo externos regionais
  • gke-l7-rilb-mc para gateways regionais de vários clusters
  • gke-l7-gxlb-mc para gateways externos externos clássicos de vários clusters

Saiba mais sobre os recursos dos vários GatewayClasses no GKE.

Preços

Todos os recursos do Compute Engine implantados usando o controlador de gateway são cobrados no projeto em que os clusters do GKE residem. O controlador de gateway regional é oferecido sem custo adicional como parte do GKE Standard e Autopilot. Os preços dos gateways de vários clusters são descritos na página de preços de gateway e entrada de vários clusters.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update.

Requisitos do GKE Gateway Controller

  • Para o Standard, o GKE versão 1.24 ou posterior.
  • Para o Autopilot, o GKE versão 1.26 ou posterior.
  • Google Cloud CLI versão 407.0.0 ou mais recente.
  • A API Gateway é compatível apenas com clusters nativos da VPC.
  • Se você estiver usando o GatewayClasses interno, ative uma sub-rede somente proxy.
  • O cluster precisa ter o complemento HttpLoadBalancing ativado.
  • Se você estiver usando o Istio, será necessário fazer upgrade do Istio para uma das seguintes versões:
    • 1.15.2 ou mais recente
    • 1.14.5 ou mais recente
    • 1.13.9 ou mais recente
  • Se você estiver usando a VPC compartilhada, será necessário atribuir o papel Compute Network User à conta de serviço do GKE referente ao projeto de serviço no projeto host.

Requisitos de gateway de vários clusters

Além dos requisitos do controlador de gateway do GKE, para implantações de gateway de vários clusters, verifique se você executou as seguintes tarefas:

  • Ative a API Gateway no cluster de configuração.
  • Ativar a federação de identidade da carga de trabalho do GKE nos clusters.
  • Conclua os pré-requisitos gerais da frota para registrar os clusters.
  • Ative as seguintes APIs necessárias de gateways de vários clusters no projeto:

    • API Traffic Director
    • API Multi-cluster Services
    • API Multi Cluster Ingress

    Execute o comando a seguir para ativar as APIs necessárias, caso elas ainda não estejam ativadas:

    gcloud services enable \
      trafficdirector.googleapis.com \
      multiclusterservicediscovery.googleapis.com \
      multiclusteringress.googleapis.com \
      --project=PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto em que os clusters do GKE estiverem em execução.

Restrições e limitações

As mesmas limitações e problemas conhecidos dos gateways de cluster único também se aplicam aos gateways de vários clusters.

Além das limitações de gateway de cluster único, as seguintes limitações se aplicam a gateways de vários clusters:

  • O balanceamento de carga para back-ends em diferentes regiões não é compatível com a GatewayClass interna regional gke-l7-rilb-mc. Para saber mais sobre os diferentes recursos compatíveis com cada GatewayClass, consulte Recursos do GatewayClass.

  • Um Service não tem suporte como backendRefs com gateway de vários clusters. O gateway de vários clusters só é compatível com ServiceImport como um backendRefs válido.

  • O balanceamento de carga entre projetos não é suportado. Todos os clusters (de destino e de configuração) anexados ao mesmo gateway de vários clusters precisam ser implantados no mesmo projeto host de VPC compartilhada ou projeto de serviço. Para mais informações sobre as topologias de VPC compartilhada compatíveis com o gateway de vários clusters, consulte Usar o gateway de vários clusters com a VPC compartilhada.

  • O gateway de vários clusters depende do MCS para lidar com a descoberta de serviços entre clusters. Assim, as exposições de gateway de vários clusters estão sujeitas a todos os Requisitos de serviço multicluster.

Cotas

O Gateway do GKE usa as cotas do Cloud Load Balancing para limitar o número de recursos que o controlador de gateway pode criar para gerenciar o tráfego de entrada roteado para clusters do GKE.

Configurar o ambiente para gateways de vários clusters

Ele requer vários clusters do GKE para concluir os exemplos em Como implantar gateways de vários clusters. Todos os clusters são registrados na mesma frota para que os serviços e gateways de vários clusters possam operar em todos eles.

As etapas a seguir implantarão três clusters do GKE em duas regiões diferentes no seu projeto:

  • us-west1-a/gke-west-1
  • us-west1-a/gke-west-2
  • us-east1-b/gke-east-1

Isso criará a seguinte topologia de cluster:

Topologia de cluster que mostra a relação entre regiões, frota e projeto.

Esses clusters do GKE são usados para demonstrar o balanceamento de carga multirregional e a divisão de tráfego azul-verde com vários clusters usando gateways externos e internos.

Implantar clusters

Nestas etapas, você implantará três clusters do GKE nas regiões us-east1 e us-west1.

  1. Crie um cluster do GKE em us-west1 chamado gke-west-1:

    gcloud container clusters create gke-west-1 \
        --gateway-api=standard \
        --zone=us-west1-a \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --project=PROJECT_ID
    

    Substitua:

    • PROJECT_ID: o ID do projeto em que os clusters do GKE estão em execução;
    • VERSION: a versão do GKE, 1.24 ou posterior.
  2. Crie outro cluster do GKE em us-west1 (ou na mesma região do cluster anterior) chamado gke-west-2:

    gcloud container clusters create gke-west-2 \
        --gateway-api=standard \
        --zone=us-west1-a \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --project=PROJECT_ID
    
  3. Crie um cluster do GKE em us-east1 (ou uma região diferente do anterior) chamado gke-east-1.

    gcloud container clusters create gke-east-1 \
        --gateway-api=standard \
        --zone=us-east1-b \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --project=PROJECT_ID
    

Configurar credenciais do cluster

Nesta etapa, são configuradas credenciais de cluster com nomes marcantes. Isso facilita a alternância entre os clusters ao implantar recursos em vários clusters.

  1. Busque as credenciais dos clusters gke-west-1, gke-west-2 e gke-east-1:

    gcloud container clusters get-credentials gke-west-1 --zone=us-west1-a --project=PROJECT_ID
    gcloud container clusters get-credentials gke-west-2 --zone=us-west1-a --project=PROJECT_ID
    gcloud container clusters get-credentials gke-east-1 --zone=us-east1-b --project=PROJECT_ID
    

    Isso armazena as credenciais localmente para que você possa usar o cliente do kubectl para acessar os servidores da API de cluster. Por padrão, um nome gerado automaticamente é criado para a credencial.

  2. Renomeie os contextos do cluster para facilitar a consulta posterior:

    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-1 gke-west-1
    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-2 gke-west-2
    kubectl config rename-context gke_PROJECT_ID_us-east1-b_gke-east-1 gke-east-1
    

    Substitua PROJECT_ID pelo ID do projeto em que os clusters estão implantados.

Registrar clusters na frota

  1. Depois que os três clusters tiverem sido criados, você precisará registrá-los na frota do seu projeto. Agrupar os clusters do GKE em uma frota permite que eles sejam segmentados por um gateway de vários clusters.

    gcloud container fleet memberships register gke-west-1 \
         --gke-cluster us-west1-a/gke-west-1 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud container fleet memberships register gke-west-2 \
         --gke-cluster us-west1-a/gke-west-2 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud container fleet memberships register gke-east-1 \
         --gke-cluster us-east1-b/gke-east-1 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
  2. Confirme se os clusters foram registrados na frota:

    gcloud container fleet memberships list --project=PROJECT_ID
    

    A saída será semelhante a esta:

    NAME        EXTERNAL_ID                           LOCATION
    gke-east-1  45a80b37-4b00-49aa-a68b-b430fce1e3f0  us-east1
    gke-west-2  ac7087a5-f5ee-401e-b430-57f3af141239  us-west1
    gke-west-1  549efe3a-b18e-4eb9-8796-e50b7967cde2  us-west1
    

Ativar serviços de vários clusters na frota

  1. Ative os serviços de vários clusters na frota dos clusters registrados. Isso ativa o controlador MCS dos três clusters registrados nas suas frotas, que começa a detectar e exportar serviços.

    gcloud container fleet multi-cluster-services enable \
        --project PROJECT_ID
    
  2. Conceda as permissões de gerenciamento de Identity and Access Management (IAM, na sigla em inglês) exigidas pelo controlador de gateway:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role "roles/compute.networkViewer" \
        --project=PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto em que os clusters estão implantados.

  3. Confirme se os MCS estão ativado para os clusters registrados. Você verá as assinaturas dos três clusters registrados. Pode levar vários minutos para que todos os clusters sejam exibidos.

    gcloud container fleet multi-cluster-services describe --project=PROJECT_ID
    

    O resultado será assim:

    createTime: '2023-10-12T06:14:33.466903587Z'
    membershipStates:
      projects/441323991697/locations/us-east1/memberships/gke-east-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:28.395318091Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:30.534594027Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-2:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:29.110582109Z'
    name: projects/pierre-louis-playground/locations/global/features/multiclusterservicediscovery
    resourceState:
      state: ACTIVE
    spec: {}
    updateTime: '2023-10-12T06:15:31.027276757Z'
    

Ativar o gateway de vários clusters na frota

O controlador de gateway do GKE de vários clusters rege a implantação de gateways de vários clusters.

Ao ativar o controlador de gateway de vários clusters, você precisa selecionar seu cluster de configuração. O cluster de configuração é o cluster do GKE em que os recursos de gateway (Gateway, Rotas, Políticas) estão implantados. É um local central que controla o roteamento entre os clusters. Consulte Projeto de cluster de configuração para ajudar a decidir qual cluster escolher como o de configuração.

  1. Ative o gateway de vários clusters e especifique o cluster de configuração na sua frota. É possível atualizar o cluster de configuração posteriormente. Este exemplo especifica gke-west-1 como o cluster de configuração que hospedará os recursos dos gateways de vários clusters.

    gcloud container fleet ingress enable \
        --config-membership=projects/PROJECT_ID/locations/us-west1-a/memberships/gke-west-1 \
        --project=PROJECT_ID
    
  2. Conceda as permissões do Identity and Access Management (IAM) exigidas pelo controlador de gateway de vários clusters:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
        --role "roles/container.admin" \
        --project=PROJECT_ID
    

    Substitua PROJECT_ID e PROJECT_NUMBER pelo ID e pelo número do projeto em que os clusters estão implantados.

  3. Confirme se o controlador global do gateway do GKE está ativado para sua frota:

    gcloud container fleet ingress describe --project=PROJECT_ID
    

    O resultado será assim:

    createTime: '2023-10-12T06:23:06.732858524Z'
    membershipStates:
      projects/441323991697/locations/us-east1/memberships/gke-east-1:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815839024Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-1:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815837031Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-2:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815840985Z'
    name: projects/pierre-louis-playground/locations/global/features/multiclusteringress
    resourceState:
      state: ACTIVE
    spec:
      multiclusteringress:
        configMembership: projects/pierre-louis-playground/locations/us-west1/memberships/gke-west-1
    state:
      state:
        code: OK
        description: Ready to use
        updateTime: '2023-10-12T06:23:51.317464415Z'
    updateTime: '2023-10-12T06:30:09.439319551Z'
    
  4. Confirme se as GatewayClasses existem no seu cluster de configuração:

    kubectl get gatewayclasses --context=gke-west-1
    

    O resultado será assim:

    NAME                                  CONTROLLER                  ACCEPTED   AGE
    gke-l7-global-external-managed        networking.gke.io/gateway   True       78m
    gke-l7-global-external-managed-mc     networking.gke.io/gateway   True       4m22s
    gke-l7-gxlb                           networking.gke.io/gateway   True       78m
    gke-l7-gxlb-mc                        networking.gke.io/gateway   True       4m23s
    gke-l7-regional-external-managed      networking.gke.io/gateway   True       78m
    gke-l7-regional-external-managed-mc   networking.gke.io/gateway   True       4m22s
    gke-l7-rilb                           networking.gke.io/gateway   True       78m
    gke-l7-rilb-mc                        networking.gke.io/gateway   True       4m22s
    

    Essa saída inclui GatewayClass gke-l7-global-external-managed-mc, gke-l7-regional-external-managed-mc, gke-l7-gxlb-mc para gateways de vários clusters externos e o GatewayClass gke-l7-rilb-mc para gateways de vários clusters internos.

  5. Mude o contexto do kubectl para o cluster de controle:

    kubectl config use-context gke-west-1
    

Agora você já pode começar a implantar gateways de vários clusters no cluster de configuração.

Solução de problemas

Nesta seção, mostramos como resolver problemas relacionados à ativação do controlador de gateway de vários clusters.

GatewayClasses não estão disponíveis no cluster de configuração

O seguinte erro pode ocorrer ao executar o comando kubectl get gatewayclasses:

error: the server doesn't have a resource type "gatewayclasses"

Para resolver esse problema, instale a API Gateway no cluster:

gcloud container clusters update CLUSTER_NAME \
    --gateway-api=standard \
    --region=COMPUTE_REGION

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • COMPUTE_REGION: a região do Compute Engine do cluster. Para clusters zonais, use --zone=COMPUTE_ZONE.

Problemas conhecidos

  • Há um problema conhecido com o controlador de gateway de vários clusters que pode falhar ao iniciar. Para evitar esse problema, ative a API Gateway no cluster de configuração e inclua os CRDs antes de o recurso Entrada (frota) do hub ser ativado.
  • Os gateways de vários clusters podem vazar recursos do balanceador de carga nos seguintes cenários:
    • O recurso de entrada da frota é atualizado com um novo cluster de configuração que não tem todos os recursos Gateway existentes no cluster de configuração atual.
    • O recurso de entrada da frota está desativado enquanto recursos Gateway, que se referem a um GatewayClass de vários clusters, existem no cluster de configuração.
  • O gateway de vários clusters é executado como um serviço global. Se o controlador de gateway de vários clusters encontrar uma falha do plano de controle regional do Hub (frota), ele responderá com falha e não fará outras alterações no balanceador de carga até que a região seja retornada ao serviço.

A seguir