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 clustersgke-l7-regional-external-managed-mc
para gateways externos multicluster regionaisgke-l7-rilb-mc
para gateways internos multicluster regionaisgke-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 umbackendRefs
com o gateway de vários clusters. O gateway de vários clusters só suportaServiceImport
como umbackendRefs
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 umGatewayClass
de vários clusters no cluster de configuração.
- A funcionalidade de entrada da frota é atualizada com um novo cluster de configuração que não tem todos os recursos
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:
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.
Crie um cluster do GKE em
us-west1
com o nomegke-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.
Crie outro cluster do GKE em
us-west1
(ou na mesma região que o cluster anterior) com o nomegke-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
Crie um cluster do GKE em
us-east1
(ou numa região diferente da anterior) com o nomegke-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
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.
Obtenha as credenciais para o cluster
gke-west-1
,gke-west-2
egke-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.
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
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
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.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.
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
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
ePROJECT_NUMBER
pelo ID do projeto e número do projeto onde os seus clusters estão implementados.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'
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.
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:
Desative a entrada da frota:
gcloud container fleet ingress disable
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?
- Para implementar o equilíbrio de carga de vários clusters, consulte o artigo Implementar gateways de vários clusters.
- Para saber mais sobre o controlador Gateway, consulte Gateway.