Ative gateways de vários clusters


Esta página mostra como ativar o controlador do GKE Gateway multicluster, um controlador alojado na Google que aprovisiona balanceadores de carga externos e internos para os seus clusters do GKE. Para saber como usar recursos de gateway para o equilíbrio de carga de contentores, consulte os artigos Implementar gateways ou Implementar gateways de vários clusters.

O GKE Gateway Controller de vários clusters instala as seguintes GatewayClasses de vários clusters nos seus clusters:

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

Saiba mais sobre as capacidades das várias GatewayClasses no GKE.

Preços

Todos os recursos do Compute Engine implementados através dos controladores do Gateway são cobrados ao projeto no qual os seus clusters do GKE residem. O controlador de gateway de cluster único é oferecido sem custo adicional como parte dos preços do GKE Standard e Autopilot. Os preços das gateways de vários clusters são descritos na página de preços da entrada e da gateway de vários clusters.

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ative a API Google Kubernetes Engine
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute gcloud components update para obter a versão mais recente.

Requisitos do GKE Gateway Controller

  • A API Gateway é suportada apenas em clusters nativos de VPC.
  • Se estiver a usar as GatewayClasses internas, tem de ativar uma sub-rede apenas de proxy.
  • O seu cluster tem de ter o suplemento HttpLoadBalancing ativado.
  • Se estiver a usar o Istio, tem de atualizar o Istio para uma das seguintes versões:
    • 1.15.2 ou posterior
    • 1.14.5 ou posterior
    • 1.13.9 ou posterior.
  • Se estiver a usar a VPC partilhada, no projeto anfitrião, tem de atribuir a função Compute Network User à conta de serviço do GKE para o projeto de serviço.

Requisitos do gateway de vários clusters

Além dos requisitos do controlador do GKE Gateway, para implementações do Gateway com vários clusters, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Gateway no cluster de configuração.
  • Ative a federação de identidade da força de trabalho para o GKE nos seus clusters.
  • Conclua os pré-requisitos gerais da frota para registar os seus clusters.
  • Ative as seguintes APIs necessárias de gateways multicluster no seu projeto:

    • Cloud Service Mesh API
    • API Multi-cluster Services
    • API Multi Cluster Ingress

    Execute este comando para ativar as APIs necessárias, se ainda não estiverem ativadas:

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

    Substitua PROJECT_ID pelo ID do projeto onde os seus clusters do GKE estão a ser executados.

Restrições e limitações

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

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

  • O equilíbrio de carga para back-ends em diferentes regiões não é suportado com a GatewayClass interna regional gke-l7-rilb-mc. Para saber mais sobre as diferentes funcionalidades suportadas com cada GatewayClass, consulte as capacidades da GatewayClass.

  • Um Service não é suportado como um backendRefs com o gateway de vários clusters. O gateway de vários clusters só suporta ServiceImport como um backendRefs válido.

  • Todos os clusters na frota têm de existir no projeto anfitrião da frota.

  • O equilíbrio de carga entre projetos não é suportado. Todos os clusters (cluster de configuração e clusters de destino) anexados ao mesmo gateway de vários clusters têm de ser implementados no mesmo projeto anfitrião ou projeto de serviço da VPC partilhada. Para mais informações sobre as topologias de VPC partilhada suportadas com o gateway multicluster, consulte o artigo Use o gateway multicluster com a VPC partilhada.

  • O equilíbrio de carga entre VPCs não é suportado. Todos os clusters (cluster de configuração e clusters de destino) anexados ao mesmo gateway de vários clusters têm de ser implementados na mesma VPC.

  • O gateway em vários clusters depende do MCS para processar a deteção de serviços entre clusters. Como tal, os serviços que o gateway de vários clusters expõe estão sujeitos a todos os requisitos do serviço em vários clusters.

  • Os gateways multicluster podem ter fugas de recursos do balanceador de carga nos seguintes cenários:

    • A funcionalidade de entrada da frota é atualizada com um novo cluster de configuração que não tem todos os recursos Gateway existentes no cluster de configuração atual.
    • A funcionalidade de entrada da frota está desativada enquanto existirem recursos Gateway que referenciam um GatewayClass de vários clusters no cluster de configuração.
  • O Multi-cluster Gateway é executado como um serviço global. Se o controlador do gateway de vários clusters encontrar uma falha no plano de controlo da frota (hub) regional, responde falhando estaticamente e não faz mais alterações ao equilibrador de carga até que a região volte a estar em serviço.

Quotas

O GKE Gateway usa quotas do Cloud Load Balancing para limitar o número de recursos que o controlador do Gateway pode criar para gerir o tráfego de entrada encaminhado para clusters do GKE.

Configure o seu ambiente para gateways de vários clusters

Requer vários clusters do GKE para concluir os exemplos em Implementar gateways de vários clusters. Todos os clusters estão registados na mesma frota para que os Gateways e os serviços de vários clusters possam operar entre eles.

Os passos seguintes implementam 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

Isto cria a seguinte topologia de cluster:

A topologia do cluster que mostra a relação entre as regiões, a frota e o projeto.

Estes clusters do GKE são usados para demonstrar o equilíbrio de carga em várias regiões e a divisão de tráfego azul-verde em vários clusters usando gateways externos e internos.

Implemente clusters

Nestes passos, vai implementar três clusters do GKE nas regiões us-east1 e us-west1.

Os clusters são registados na frota do seu projeto. O agrupamento dos clusters do GKE numa frota permite que sejam segmentados por um gateway multicluster.

  1. Crie um cluster do GKE em us-west1 com o nome gke-west-1:

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

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto onde os seus clusters do GKE estão a ser executados.
    • VERSION: a versão do GKE, 1.24 ou posterior.
  2. Crie outro cluster do GKE em us-west1 (ou na mesma região que o cluster anterior) com o nome gke-west-2:

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

    gcloud container clusters create gke-east-1 \
        --gateway-api=standard \
        --location=us-east1-b \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --enable-fleet \
        --project=PROJECT_ID
    
  4. Confirme se os clusters foram registados com êxito na frota:

    gcloud container fleet memberships list --project=PROJECT_ID
    

    O resultado será semelhante ao seguinte:

    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
    

Configure as credenciais do cluster

Este passo configura as credenciais do cluster com nomes fáceis de memorizar. Isto facilita a alternância entre clusters quando implementa recursos em vários clusters.

  1. Obtenha as credenciais para o cluster gke-west-1, gke-west-2 e gke-east-1:

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

    Isto armazena as credenciais localmente para que possa usar o cliente kubectl para aceder aos servidores da API do cluster. Por predefinição, é criado um nome gerado automaticamente para a credencial.

  2. Mude o nome dos contextos de cluster para que seja mais fácil consultá-los mais tarde:

    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 onde os seus clusters estão implementados.

Ative serviços em vários clusters na frota

  1. Ative os serviços em vários clusters na sua frota para os clusters registados. Isto ativa o controlador do MCS para os três clusters registados na sua frota, para que possa começar a ouvir e exportar serviços.

    gcloud container fleet multi-cluster-services enable \
        --project PROJECT_ID
    
  2. Conceda as autorizações da gestão de identidade e de acesso (IAM) necessárias ao controlador do MCS:

    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 onde os seus clusters estão implementados.

  3. Confirme se o MCS está ativado para os clusters registados. São apresentadas as associações dos três clusters registados. Pode demorar vários minutos até que todos os clusters sejam apresentados.

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

    O resultado é semelhante ao seguinte:

    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'
    

Ative o gateway de vários clusters na frota

O controlador do GKE Gateway de vários clusters rege a implementação de Gateways de vários clusters.

Quando ativa o controlador de gateway de vários clusters, tem de selecionar o cluster de configuração. O cluster de configuração é o cluster do GKE no qual os seus recursos de gateway (Gateway, Routes, Policies) são implementados. É um local central que controla o encaminhamento nos seus clusters. Consulte o artigo Configurar o design do cluster para ajudar a decidir que cluster escolher como cluster de configuração.

  1. Ative o gateway multicluster e especifique o cluster de configuração na sua frota. Tenha em atenção que pode sempre atualizar o cluster de configuração mais tarde. Este exemplo especifica gke-west-1 como o cluster de configuração que vai alojar os recursos para gateways de vários clusters.

    gcloud container fleet ingress enable \
        --config-membership=projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1 \
        --project=PROJECT_ID
    
  2. Conceda as autorizações da gestão de identidade e de acesso (IAM) necessárias ao controlador do 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 do projeto e número do projeto onde os seus clusters estão implementados.

  3. Confirme se o controlador do GKE Gateway está ativado para a sua frota:

    gcloud container fleet ingress describe --project=PROJECT_ID
    

    O resultado é semelhante ao seguinte:

    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 cluster de configuração:

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

    O resultado é semelhante ao seguinte:

    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
    

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

  5. Mude o contexto do kubectl para o cluster de configuração:

    kubectl config use-context gke-west-1
    

Já pode começar a implementar gateways multicluster no cluster de configuração.

Resolução de problemas

Esta secção mostra como resolver problemas relacionados com a ativação do controlador do gateway de vários clusters.

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

O seguinte erro pode ocorrer quando executa o comando kubectl get gatewayclasses:

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

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

gcloud container clusters update CLUSTER_NAME \
    --gateway-api=standard \
    --location=CONTROL_PLANE_LOCATION

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster.
  • CONTROL_PLANE_LOCATION: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.

O controlador do Multi-cluster Gateway não é iniciado

Quando ativa a API Gateway no cluster de configuração e inclui os CRDs depois de a funcionalidade de entrada da frota ser ativada, o controlador do Gateway de vários clusters pode não ser iniciado.

Pode evitar este problema ativando a API Gateway antes de ativar o Fleet ingress. No entanto, se já tiver ativado a entrada de frotas, resolva este problema desativando e, em seguida, reativando a entrada de frotas:

  1. Desative a entrada da frota:

    gcloud container fleet ingress disable
    
  2. Ative a entrada da frota:

    gcloud container fleet ingress enable \
        --config-membership=CONFIG_MEMBERSHIP \
        --project=PROJECT_ID
    

Substitua o seguinte:

  • CONFIG_MEMBERSHIP: o ID da subscrição ou o identificador totalmente qualificado da subscrição. Por exemplo, projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1.
  • PROJECT_ID: o ID do projeto onde os seus clusters do GKE estão a ser executados.

O que se segue?