Esta página mostra como encaminhar tráfego em vários clusters do Google Kubernetes Engine (GKE) em diferentes regiões através da entrada de vários clusters, com um exemplo que usa dois clusters.
Para uma comparação detalhada entre o Multi Cluster Ingress (MCI), o Multi-cluster Gateway (MCG) e o balanceador de carga com grupos de pontos finais de rede autónomos (LB e NEGs autónomos), consulte o artigo Escolha a sua API de balanceamento de carga de vários clusters para o GKE.
Para saber como implementar a entrada em vários clusters, consulte o artigo Implementar a entrada em vários clusters.
Estes passos requerem autorizações elevadas e devem ser realizados por um administrador do GKE.
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 e limitações
A Entrada em vários clusters tem os seguintes requisitos:
- Versão 290.0.0 e posterior da CLI do Google Cloud.
Se usar clusters do modo padrão, certifique-se de que cumpre os seguintes requisitos. Os clusters do Autopilot já cumprem estes requisitos.
- Os clusters têm de ter o suplemento
HttpLoadBalancing
ativado. Este suplemento está ativado por predefinição e não o deve desativar. - Os clusters têm de ser nativos de VPC.
- Os clusters têm de ter a federação de identidade da carga de trabalho para o GKE ativada.
A entrada em vários clusters tem as seguintes limitações:
- Apenas suportado com um balanceador de carga de aplicações externo.
- Não crie balanceadores de carga do Compute Engine no mesmo projeto com o prefixo
mci-
que não sejam geridos pelo Multi Cluster Ingress, caso contrário, serão eliminados.O Google Cloud usa o prefixomci-[6 char hash]
para gerir os recursos do Compute Engine que o Multi Cluster Ingress implementa. - A configuração de HTTPS requer um endereço IP estático pré-atribuído. O HTTPS não é compatível com endereços IP efémeros.
Vista geral
Neste exercício, vai realizar os seguintes passos:
- Selecione os preços que quer usar.
- Implementar clusters.
- Configure as credenciais do cluster.
- Registe os clusters numa frota.
- Especifique um cluster de configuração. Este cluster pode ser um plano de controlo dedicado ou pode executar outras cargas de trabalho.
O diagrama seguinte mostra o aspeto do seu ambiente depois de concluir o exercício:
No diagrama, existem dois clusters do GKE denominados gke-us
e
gke-eu
nas regiões europe-west1
e us-central1
. Os clusters estão
registados numa frota para que o controlador de entrada em vários clusters os possa reconhecer. Uma frota permite-lhe agrupar e normalizar logicamente os seus clusters do GKE, facilitando a administração da infraestrutura e permitindo a utilização de funcionalidades de vários clusters, como o Multi Cluster Ingress. Pode saber mais acerca das vantagens das frotas e como criá-las na documentação de gestão de frotas.
Ativar APIs
Ative as APIs necessárias no seu projeto:
gcloud services enable \
multiclusteringress.googleapis.com \
gkehub.googleapis.com \
container.googleapis.com \
multiclusterservicediscovery.googleapis.com \
--project=PROJECT_ID
Implemente clusters
Crie dois clusters do GKE denominados gke-us
e gke-eu
nas regiões europe-west1
e us-central1
.
Piloto automático
Crie o cluster
gke-us
na regiãous-central1
:gcloud container clusters create-auto gke-us \ --location=us-central1 \ --release-channel=stable \ --project=PROJECT_ID
Substitua
PROJECT_ID
pelo seu Google Cloud ID do projeto.Crie o cluster
gke-eu
na regiãoeurope-west1
:gcloud container clusters create-auto gke-eu \ --location=europe-west1 \ --release-channel=stable \ --project=PROJECT_ID
Standard
Crie os dois clusters com a federação de identidade da carga de trabalho para o GKE ativada.
Crie o cluster
gke-us
na regiãous-central1
:gcloud container clusters create gke-us \ --location=us-central1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_ID
Substitua
PROJECT_ID
pelo seu Google Cloud ID do projeto.Crie o cluster
gke-eu
na regiãoeurope-west1
:gcloud container clusters create gke-eu \ --location=europe-west1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_ID
Configure as credenciais do cluster
Configure as credenciais para os seus clusters e mude o nome dos contextos dos clusters para facilitar a alternância entre clusters quando implementar recursos.
Recupere as credenciais dos seus clusters:
gcloud container clusters get-credentials gke-us \ --location=us-central1 \ --project=PROJECT_ID gcloud container clusters get-credentials gke-eu \ --location=europe-west1 \ --project=PROJECT_ID
As credenciais são armazenadas 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 as credenciais.
Mude o nome dos contextos de cluster:
kubectl config rename-context gke_PROJECT_ID_us-central1_gke-us gke-us kubectl config rename-context gke_PROJECT_ID_europe-west1_gke-eu gke-eu
Registe clusters numa frota
Registe os seus clusters na frota do projeto da seguinte forma.
Registe os seus clusters:
gcloud container fleet memberships register gke-us \ --gke-cluster us-central1/gke-us \ --enable-workload-identity \ --project=PROJECT_ID gcloud container fleet memberships register gke-eu \ --gke-cluster europe-west1/gke-eu \ --enable-workload-identity \ --project=PROJECT_ID
Confirme se os seus clusters foram registados com êxito na frota:
gcloud container fleet memberships list --project=PROJECT_ID
O resultado é semelhante ao seguinte:
NAME EXTERNAL_ID gke-us 0375c958-38af-11ea-abe9-42010a800191 gke-eu d3278b78-38ad-11ea-a846-42010a840114
Depois de registar os clusters, o GKE implementa o pod gke-mcs-importer
no cluster.
Pode saber mais sobre o registo de clusters em Registe um cluster do GKE na sua frota.
Especifique um cluster de configuração
O cluster de configuração é um cluster do GKE que escolhe para ser o ponto de controlo central do Ingress nos clusters membros. Este cluster já tem de estar registado na frota. Para mais informações, consulte o artigo Configure o design do cluster.
Ative a entrada em vários clusters e selecione gke-us
como o cluster de configuração:
gcloud container fleet ingress enable \
--config-membership=gke-us \
--location=us-central1 \
--project=PROJECT_ID
O cluster de configuração demora até 15 minutos a registar-se. O resultado bem-sucedido é semelhante ao seguinte:
Waiting for Feature to be created...done.
Waiting for controller to start...done.
O resultado sem êxito é semelhante ao seguinte:
Waiting for controller to start...failed.
ERROR: (gcloud.container.fleet.ingress.enable) Controller did not start in 2 minutes. Please use the `describe` command to check Feature state for debugging information.
Se ocorreu uma falha no passo anterior, verifique o estado da funcionalidade:
gcloud container fleet ingress describe \
--project=PROJECT_ID
O resultado bem-sucedido é semelhante ao seguinte:
createTime: '2021-02-04T14:10:25.102919191Z'
membershipStates:
projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
state:
code: ERROR
description: '...is not a VPC-native GKE Cluster.'
updateTime: '2021-08-10T13:58:50.298191306Z'
projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
state:
code: OK
updateTime: '2021-08-10T13:58:08.499505813Z'
Para saber mais sobre a resolução de problemas de erros com o Multi Cluster Ingress, consulte Resolução de problemas e operações.
Impacto nos clusters ativos
Pode ativar o Multi Cluster Ingress com segurança através de gcloud container fleet ingress enable
num cluster em direto, uma vez que não resulta em tempo de inatividade nem afeta o tráfego no cluster.
VPC partilhada
Pode implementar um recurso MultiClusterIngress
para clusters numa rede de VPC partilhada, mas todos os clusters GKE de back-end participantes têm de estar no mesmo projeto. Não é suportado ter clusters do GKE em projetos diferentes que usam o mesmo VIP do Cloud Load Balancing.
Em redes de VPC não partilhadas, o controlador Multi Cluster Ingress gere as regras de firewall para permitir que as verificações de funcionamento sejam aprovadas do balanceador de carga para as cargas de trabalho de contentores.
Numa rede da VPC partilhada, um administrador do projeto anfitrião tem de criar manualmente as regras de firewall para o tráfego do equilibrador de carga em nome do controlador de entrada de vários clusters.
O comando seguinte mostra a regra de firewall que tem de criar se os seus clusters estiverem numa rede da VPC partilhada. Os intervalos de origem são os intervalos que o balanceador de carga usa para enviar tráfego para os back-ends. Esta regra tem de existir durante o período de funcionamento de um recurso MultiClusterIngress
.
Se os seus clusters estiverem numa rede de VPC partilhada, crie a regra de firewall:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \
--project=HOST_PROJECT \
--network=SHARED_VPC \
--direction=INGRESS \
--allow=tcp:0-65535 \
--source-ranges=130.211.0.0/22,35.191.0.0/16
Substitua o seguinte:
FIREWALL_RULE_NAME
: o nome da nova regra de firewall que escolher.HOST_PROJECT
: o ID do projeto anfitrião da VPC partilhada.SHARED_VPC
: o nome da rede VPC partilhada.
Problemas conhecidos
Esta secção descreve problemas conhecidos da entrada em vários clusters
InvalidValueError para o campo config_membership
Um problema conhecido impede que a CLI do Google Cloud interaja com a entrada em vários clusters. Este problema foi introduzido na versão 346.0.0 e corrigido na versão 348.0.0. Não recomendamos a utilização das versões 346.0.0 e 347.0.0 da CLI gcloud com o Multi Cluster Ingress.
Valor inválido para o campo "resource"
O Google Cloud Armor não consegue comunicar com os clusters de configuração do Multi Cluster Ingress em execução nas seguintes versões do GKE:
- 1.18.19-gke.1400 e posterior
- 1.19.10-gke.700 e posterior
- 1.20.6-gke.700 e posteriores
Quando configura uma política de segurança do Google Cloud Armor, é apresentada a seguinte mensagem:
Invalid value for field 'resource': '{"securityPolicy": "global/securityPolicies/"}': The given policy does not exist
Para evitar este problema, atualize o cluster de configuração para a versão 1.21 ou posterior, ou use o seguinte comando para atualizar o
BackendConfig CustomResourceDefinition
:
kubectl patch crd backendconfigs.cloud.google.com --type='json' -p='[{"op": "replace", "path": "/spec/versions/1/schema/openAPIV3Schema/properties/spec/properties/securityPolicy", "value":{"properties": {"name": {"type": "string"}}, "required": ["name" ],"type": "object"}}]'