Nesta página, mostramos como atribuir sub-redes adicionais a um cluster nativo de VPC. Com sub-redes extras atribuídas a um cluster, é possível criar pools de nós em que os endereços IPv4 para nós e pods vêm dos intervalos de sub-rede adicionais.
Esta página é destinada a especialistas em redes que projetam e arquitetam a rede para a organização. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no conteúdo do Cloud de Confiance by S3NS , consulte Tarefas e funções de usuário comuns do GKE.
Visão geral
Ao criar um cluster do GKE nativo de VPC, você seleciona uma sub-rede padrão para ele. A sub-rede padrão do cluster fornece endereços IPv4 para nós, pods e serviços, conforme descrito em Intervalos de endereços IP para clusters nativos de VPC.
É possível atribuir até oito sub-redes adicionais a um cluster nativo de VPC, permitindo um crescimento significativo do cluster. Cada nova sub-rede adicional atribuída é chamada de sub-rede não padrão.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ative a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa, instale e inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando
gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
Requisitos e limitações
Nesta seção, descrevemos os requisitos e as limitações que se aplicam quando você atribui e usa outras sub-redes em um cluster. Você precisa atender a todos os requisitos antes de atribuir sub-redes adicionais.
- Verifique se o cluster do GKE é nativo de VPC e executa a versão 1.30.3-gke.1211000 ou mais recente do GKE. Os clusters baseados em rotas e os clusters em redes legadas não são compatíveis com outras sub-redes.
- É possível atribuir até oito sub-redes adicionais por cluster.
- As sub-redes adicionais fornecem apenas endereços IPv4 para nós e pods. Não é possível usar sub-redes adicionais para fornecer endereços IPv6 para nós ou pods.
- Somente novos pools de nós podem usar as sub-redes adicionais, não os pools de nós atuais. Por padrão, o GKE seleciona automaticamente uma sub-rede adequada para o pool de nós. Se preferir, especifique manualmente uma sub-rede ao criar um pool de nós.
- Os intervalos de endereços IPv4 secundários da sub-rede em uma sub-rede não padrão só podem ser usados por um único cluster.
- Se você usar o suporte a várias redes para pods, os intervalos de endereços IPv4 principais e de pods de uma sub-rede adicional não podem se sobrepor a nenhum intervalo CIDR configurado na sua configuração de várias redes. As sub-redes adicionais que você configurar serão aplicadas apenas à rede padrão. Essa limitação significa que outras interfaces de rede nos seus nós e pods não podem usar os endereços IP fornecidos por essas sub-redes adicionais.
- Quando você adiciona uma sub-rede a clusters com o Cloud Service Mesh ativado, a malha não pode rotear o tráfego para pods na sub-rede não padrão.
Requisitos do balanceador de carga para clusters com sub-redes adicionais
Esta seção descreve os requisitos do balanceador de carga que se aplicam quando você usa sub-redes adicionais no cluster. Esses requisitos se aplicam sempre que você cria um Entrada externo, um gateway externo ou um serviço LoadBalancer externo.
- Para usar um serviço externo de entrada, gateway ou LoadBalancer em um cluster com sub-redes adicionais, o cluster precisa executar a versão 1.33.2-gke.4780000 ou mais recente do GKE.
- Objetos de entrada externos que usam o controlador de entrada do GKE precisam usar o balanceamento de carga nativo de contêiner.
- Ative a criação de subconjuntos do GKE para serviços LoadBalancer internos. A criação de subconjuntos do GKE afeta apenas os serviços LoadBalancer internos novos. Portanto, é necessário excluir e recriar todos os Serviços no cluster depois de ativar a subconfiguração do GKE.
Para criar um balanceador de carga de rede de passagem externa regional baseado em serviço de back-end, os novos serviços LoadBalancer externos precisam incluir o campo
spec.loadBalancerClassdefinido comonetworking.gke.io/l4-regional-external. Esse campo afeta apenas novos serviços LoadBalancer externos e não se aplica a serviços LoadBalancer externos atuais. Exclua e recrie todos os serviços LoadBalancer externos que foram criados sem o campospec.loadBalancerClass. Este campo requer o GKE versão 1.33.1-gke.1779000 ou posterior.O tipo de back-end usado (back-ends de NEG
GCE_VM_IPou back-ends de grupo de instâncias) depende da versão do GKE ao criar o serviço LoadBalancer externo. Para mais informações, consulte Agrupamento de nós.
Adicionar uma nova sub-rede com um intervalo de endereços IPv4 de pod
Crie uma sub-rede e adicione um novo intervalo de endereços IPv4 secundário. A sub-rede precisa estar na mesma região e rede VPC que o cluster:
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK \ --region=REGION \ --range=PRIMARY_RANGE \ --secondary-range=POD_RANGE_NAME=SECONDARY_RANGE \ --enable-private-ip-google-accessSubstitua:
SUBNET_NAME: o nome da nova sub-rede;NETWORK: o nome da rede VPC que contém a nova sub-rede.REGION: a região onde a sub-rede está localizada.PRIMARY_RANGE: o intervalo IPv4 principal da nova sub-rede, em notação CIDR. Saiba mais em Intervalos de sub-rede IPv4.POD_RANGE_NAME: um nome para o intervalo secundário.SECONDARY_RANGE: o intervalo IPv4 secundário na notação CIDR. Confira os intervalos válidos em Intervalos de sub-rede IPv4.
Para mais informações, consulte Trabalhar com sub-redes.
Atualize o cluster para usar a sub-rede adicional usando a CLI gcloud:
gcloud container clusters update CLUSTER_NAME \ --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAMESubstitua:
CLUSTER_NAME: o nome do cluster atual.SUBNET_NAME: o nome da nova sub-rede que você criou.POD_RANGE_NAME: o nome do intervalo de endereços IPv4 secundário da sub-rede que você quer usar para o intervalo de endereços IPv4 do pod.
Adicionar uma nova sub-rede com vários intervalos de endereços IPv4 de pods
Crie uma sub-rede na mesma região e rede VPC do cluster. Defina o intervalo de endereços IPv4 principal da sub-rede como um intervalo de endereços IPv4 adicional para nós.
Para cada intervalo de endereços IPv4 de pod adicional necessário, adicione um novo intervalo de endereços IPv4 secundário da sub-rede à sub-rede criada na etapa anterior.
Atualize o cluster para usar a sub-rede adicional com a CLI gcloud. O exemplo a seguir adiciona uma sub-rede com dois intervalos de endereços IPv4 secundários de sub-rede para pods.
gcloud container clusters update CLUSTER_NAME \ --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_1 \ --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_2Substitua:
CLUSTER_NAME: o nome do cluster atual.SUBNET_NAME: o nome da nova sub-rede que você criou.POD_RANGE_NAME_1ePOD_RANGE_NAME_2: os nomes dos intervalos de endereços IPv4 secundários da sub-rede que você quer usar para os intervalos de endereços IPv4 do pod.
Verificar as sub-redes
Por cluster: para ver os detalhes de todas as sub-redes associadas a um cluster, execute o seguinte comando:
gcloud container clusters describe CLUSTER_NAME
Substitua CLUSTER_NAME pelo nome do cluster.
O resultado será o seguinte:
ipAllocationPolicy:
additionalIPRangesConfig:
- podIpv4RangeNames:
- pod-range-1
subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets
Por pool de nós: para conferir os detalhes de todas as sub-redes associadas a um pool de nós, execute o seguinte comando:
gcloud container node-pools describe POOL_NAME \
--cluster=CLUSTER_NAME \
Substitua:
POOL_NAME: o nome do pool de nós.CLUSTER_NAME: o nome do cluster.
O resultado será o seguinte:
name: pool-1
networkConfig:
podRange: pod-range-1
subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets
Como os pools de nós selecionam uma sub-rede
Por padrão, quando você cria um pool de nós e várias sub-redes estão disponíveis, o GKE seleciona automaticamente uma sub-rede adequada para o pool de nós com base nos requisitos e na disponibilidade de endereços IP em todas as sub-redes do cluster.
Especificar manualmente uma sub-rede durante a criação do pool de nós
Para especificar uma sub-rede ao criar um pool de nós, use a flag --subnetwork
com o comando gcloud container node-pools create. A sub-rede especificada
já precisa estar atribuída ao cluster (como a sub-rede padrão ou como uma
sub-rede adicional). Se você não especificar um intervalo IPv4 de pod, o GKE
vai selecionar automaticamente um intervalo secundário disponível da sub-rede especificada. Se a sub-rede ou o intervalo de pods especificado não tiver endereços IP disponíveis suficientes para o pool de nós, o GKE vai retornar um erro.
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--subnetwork=SUBNET_NAME
Especifique o intervalo de endereços IPv4 do pod e a sub-rede
Se a sub-rede especificada tiver vários intervalos de endereços IPv4 secundários, use as flags --pod-ipv4-range e --subnetwork para especificar qual intervalo usar para os pods no pool de nós.
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--subnetwork=SUBNET_NAME \
--pod-ipv4-range=POD_RANGE_NAME
Substitua:
POOL_NAME: um nome para o novo pool de nós;CLUSTER_NAME: o nome do cluster.LOCATION: a região ou zona do cluster.SUBNET_NAME: o nome ou caminho completo do recurso da sub-rede que você quer usar.POD_RANGE_NAME: o nome do intervalo secundário da sub-rede a ser usado para pods neste pool de nós.
Remover uma sub-rede não padrão
Remover uma sub-rede não padrão de um cluster instrui o cluster a não usar mais os intervalos da sub-rede em nenhum dos pools de nós do cluster. A remoção tem os seguintes efeitos:
- O intervalo de endereços IPv4 principal da sub-rede não padrão não pode ser usado para intervalos de endereços IPv4 de nós.
- Os intervalos de IPv4 secundários da sub-rede não padrão não podem ser usados para intervalos de IPv4 do pod.
Antes de remover uma sub-rede não padrão, exclua todos os pools de nós que a usam. A primeira etapa recomendada é definir o status da sub-rede como "em drenagem". As sub-redes no status de drenagem não serão consideradas para uso por pools de nós recém-criados. Isso impede que as operações do escalonador automático de cluster (como o escalonamento vertical do pool de nós) selecionem a sub-rede que você quer remover, sem precisar desativar o escalonamento automático para todo o cluster.
Etapas para remover uma sub-rede:
- Defina a sub-rede não padrão como o status de drenagem. Isso impede que novos pools de nós selecionem essa sub-rede, o que é útil quando você ativa o escalonamento automático no cluster.
- Exclua todos os pools de nós que estão usando essa sub-rede.
- Remova a sub-rede do cluster.
Para remover uma sub-rede não padrão do cluster, execute o seguinte comando:
gcloud container clusters update CLUSTER_NAME \
--remove-additional-ip-ranges=subnetwork=SUBNET_NAME
Substitua:
CLUSTER_NAME: o nome do cluster.SUBNET_NAME: o nome da sub-rede que você quer remover do cluster.
Para definir o status de uma sub-rede não padrão como "drenando", execute o seguinte comando:
gcloud container clusters update CLUSTER_NAME \
--drain-additional-ip-ranges=subnetwork=SUBNET_NAME
Substitua:
CLUSTER_NAME: o nome do cluster.SUBNET_NAME: o nome da sub-rede que você quer definir como status de drenagem.
Para cancelar o encerramento de uma sub-rede não padrão, execute o seguinte comando:
gcloud container clusters update CLUSTER_NAME \
--undrain-additional-ip-ranges=subnetwork=SUBNET_NAME
Substitua:
CLUSTER_NAME: o nome do cluster.SUBNET_NAME: o nome da sub-rede que você quer reverter.
Depois de remover uma sub-rede não padrão do cluster, é possível excluir a sub-rede não padrão.
Remover um intervalo de IPv4 secundário de uma sub-rede não padrão
Quando você remove um intervalo IPv4 secundário de sub-rede não padrão de um cluster, o GKE instrui o cluster a não usar esse intervalo para intervalos IPv4 de pod em nenhum pool de nós. Se o intervalo IPv4 secundário da sub-rede não padrão que você remover for o único intervalo da sub-rede não padrão usado por este cluster, o GKE também vai instruir o cluster a parar de usar o endereço IPv4 principal da sub-rede para endereços IPv4 de nós.
Antes de remover um intervalo IPv4 secundário de sub-rede não padrão, é preciso excluir todos os pools de nós que usam o intervalo para endereços IPv4 do pod.
Para remover do cluster um intervalo de IPv4 secundário de sub-rede não padrão, execute o seguinte comando:
gcloud container clusters update CLUSTER_NAME \
--remove-additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME
Substitua:
CLUSTER_NAME: o nome do cluster.SUBNET_NAME: o nome da sub-rede não padrão.POD_RANGE_NAME: o nome do intervalo IPv4 secundário da sub-rede não padrão que você quer remover do cluster.
Depois de remover um intervalo IPv4 secundário de sub-rede não padrão do cluster, você pode excluir o intervalo IPv4 secundário de sub-rede não padrão.
Usar sub-redes adicionais na VPC compartilhada
Antes de continuar, confira se você tem o seguinte:
- Um ambiente de VPC compartilhada funcional em que os projetos host e de serviço estão anexados. Para instruções, consulte Configurar um cluster com VPC compartilhada.
- Um cluster do GKE em execução localizado no projeto de serviço.
- Todas as APIs necessárias estão ativadas nos projetos de host e de serviço.
Crie uma sub-rede adicional no projeto host na mesma rede do cluster do GKE:
gcloud compute networks subnets create ADDITIONAL_SUBNET_NAME \ --project HOST_PROJECT_ID \ --network shared-net \ --range 172.16.4.0/22 \ --region COMPUTE_REGION \ --secondary-range ADDITIONAL_SUBNET_NAME-services=172.16.16.0/20,ADDITIONAL_SUBNET_NAME-pods=172.20.0.0/14Receba a política do IAM. Para permitir que o cluster do GKE no projeto de serviço acesse sub-redes adicionais na VPC compartilhada do projeto host, é necessário configurar as permissões do IAM necessárias. Se as permissões ainda não estiverem configuradas, siga estas etapas. Nenhuma ação será necessária se as permissões já existirem.
gcloud compute networks subnets get-iam-policy ADDITIONAL_SUBNET_NAME \ --project HOST_PROJECT_ID \ --region COMPUTE_REGIONA resposta contém um campo
etag. Anote o valoretag.Crie um arquivo chamado ADDITIONAL_SUBNET_NAME-policy.yaml com o seguinte conteúdo:
bindings: - members: - serviceAccount:SERVICE_PROJECT_NUM@cloudservices.s3ns-system.iam.gserviceaccount.com - serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns-system.iam.gserviceaccount.com role: roles/compute.networkUser etag: ETAG_STRINGSubstitua
ETAG_STRINGpelo valoretagque você anotou anteriormente.Defina a política do IAM para a sub-rede ADDITIONAL_SUBNET_NAME:
gcloud compute networks subnets set-iam-policy ADDITIONAL_SUBNET_NAME \ ADDITIONAL_SUBNET_NAME-policy.yaml \ --project HOST_PROJECT_ID \ --region COMPUTE_REGIONVerifique as sub-redes utilizáveis e os intervalos de endereços IP secundários, conforme descrito em Verificar sub-redes utilizáveis da VPC compartilhada.
Atualize o cluster de VPC compartilhada das sub-redes adicionais:
gcloud container clusters update CLUSTER_NAME \
--project=SERVICE_PROJECT_ID \
--location=CONTROL_PLANE_LOCATION \
--additional-ip-ranges=subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/ADDITIONAL_SUBNET_NAME,pod-ipv4-range=ADDITIONAL_SUBNET_NAME-pods
Substitua:
- CLUSTER_NAME: o nome do cluster do GKE no projeto de serviço.
- ADDITIONAL_SUBNET_NAME: o nome da sub-rede extra que você criou no projeto host (por exemplo, tier-2).
- HOST_PROJECT_ID: o ID do projeto host.
- SERVICE_PROJECT_NUM: o nome do projeto de serviço.
- COMPUTE_REGION: a região onde a sub-rede está localizada.
Isso permite que você use as sub-redes adicionais em um ambiente de VPC compartilhada.
A seguir
- Saiba mais sobre os clusters nativos de VPC.
- Saiba como adicionar intervalos de endereços IPv4 de pods.
- Saiba mais sobre como otimizar a alocação de endereços IP configurando o número máximo de pods por nó.