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 clustersgke-l7-regional-external-managed-mc
para gateways de cluster externo externos regionaisgke-l7-rilb-mc
para gateways regionais de vários clustersgke-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 Cloud Service Mesh
- 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 comobackendRefs
com gateway de vários clusters. O gateway de vários clusters só é compatível comServiceImport
como umbackendRefs
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:
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
.
Crie um cluster do GKE em
us-west1
chamadogke-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.
Crie outro cluster do GKE em
us-west1
(ou na mesma região do cluster anterior) chamadogke-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
Crie um cluster do GKE em
us-east1
(ou uma região diferente do anterior) chamadogke-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.
Busque as credenciais dos clusters
gke-west-1
,gke-west-2
egke-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.
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
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
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
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
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.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.
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/memberships/gke-west-1 \ --project=PROJECT_ID
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
ePROJECT_NUMBER
pelo ID e pelo número do projeto em que os clusters estão implantados.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'
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.
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 umGatewayClass
de vários clusters, existem no cluster de configuração.
- O recurso de entrada da frota é atualizado com um novo cluster de configuração
que não tem todos os recursos
- 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
- Para implantar o balanceamento de carga de vários clusters, consulte Como implantar gateways de vários clusters.
- Para saber mais sobre o controlador de gateway, consulte Gateway.