Adicionar sub-redes a clusters

Nesta página, mostramos como atribuir mais sub-redes a um cluster nativo de VPC. As sub-redes extras atribuídas a um cluster permitem criar novos pools de nós em que os endereços IPv4 para nós e pods vêm dos intervalos de sub-redes extras.

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 exemplos de tarefas que referenciamos no Cloud de Confiance by S3NS conteúdo, consulte Funções e tarefas comuns do usuário do GKE tasks.

Visão geral

Ao criar um novo cluster do GKE nativo de VPC, você seleciona uma sub-rede padrão para o cluster. 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 extras a um cluster nativo de VPC, permitindo um crescimento significativo do cluster. Cada sub-rede extra recém-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:

  • 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 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

Esta seção descreve os requisitos e limitações que se aplicam ao atribuir e usar sub-redes extras a um cluster. É necessário atender a todos os requisitos antes de atribuir sub-redes extras.

  • Verifique se o cluster do GKE é nativo de VPC e executa a versão 1.30.3-gke.1211000 ou mais recente do GKE. Clusters baseados em rotas e clusters em redes legadas não oferecem suporte a sub-redes extras.
  • É possível atribuir até oito sub-redes extras por cluster.
  • As sub-redes extras fornecem apenas endereços IPv4 para nós e pods. As sub-redes extras não podem ser usadas para fornecer endereços IPv6 para nós ou pods.
  • Somente novos pools de nós podem usar as sub-redes extras, 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. Como alternativa, é possível especificar 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.
  • Sub-redes extras não podem ser usadas com gateways de vários clusters.
  • Se você usar suporte a várias redes para pods, os intervalos de endereços IPv4 principal e de pods de uma sub-rede extra não poderão se sobrepor a nenhum intervalo CIDR configurado na configuração de várias redes. As sub-redes extras configuradas se aplicam apenas à rede padrão. Essa limitação significa que nenhuma interface de rede extra nos nós e pods pode usar os endereços IP fornecidos por essas sub-redes extras.
  • Ao adicionar uma sub-rede a clusters que têm 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 extras

Esta seção descreve os requisitos do balanceador de carga que se aplicam ao usar sub-redes extras 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 Entrada, gateway ou serviço LoadBalancer externo em um cluster com sub-redes extras, o cluster precisa executar a versão 1.33.2-gke.4780000 ou mais recente do GKE.
  • Objetos de Ingress externos que usam o controlador de Ingress 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 novos serviços LoadBalancer internos. Portanto, é necessário excluir e recriar todos os serviços atuais no cluster depois de ativar a criação de subconjuntos do GKE.
  • Para criar um balanceador de carga de rede de passagem externa baseado em serviço de back-end, novos serviços LoadBalancer externos precisam incluir o campo spec.loadBalancerClass definido como networking.gke.io/l4-regional-external. Esse campo afeta apenas novos serviços LoadBalancer externos e não se aplica aos serviços LoadBalancer externos atuais. Exclua e recrie todos os serviços LoadBalancer externos que foram criados sem o campo spec.loadBalancerClass. Esse campo exige a versão 1.33.1-gke.1779000 ou mais recente do GKE.

    O tipo de back-end usado (back-ends de NEG GCE_VM_IP ou 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 pods

  1. Crie uma nova sub-rede e adicione um novo intervalo de endereços IPv4 secundário da sub-rede. 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-access
    

    Substitua:

    • 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. Para mais informações, consulte 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.

  2. Atualize o cluster para usar a sub-rede extra usando a CLI gcloud:

       gcloud container clusters update CLUSTER_NAME \
         --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME
    

    Substitua:

    • CLUSTER_NAME: o nome do cluster atual.
    • SUBNET_NAME: o nome da nova sub-rede criada.
    • 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

  1. Crie uma nova sub-rede em na mesma região e rede VPC que o cluster. Defina o intervalo de endereços IPv4 principal da sub-rede como um intervalo de endereços IPv4 extra para nós.

  2. Para cada intervalo de endereços IPv4 de pods extra necessário, adicione um novo intervalo de endereços IPv4 secundário da sub-rede à sub-rede criada na etapa anterior.

  3. Atualize o cluster para usar a sub-rede extra usando a CLI gcloud. O exemplo a seguir adiciona uma sub-rede que tem dois intervalos de endereços IPv4 secundários da 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_2
    

    Substitua:

    • CLUSTER_NAME: o nome do cluster atual.
    • SUBNET_NAME: o nome da nova sub-rede criada.
    • POD_RANGE_NAME_1 e POD_RANGE_NAME_2: os nomes dos intervalos de endereços IPv4 secundários da sub-rede que você quer usar para intervalos de endereços IPv4 de pods.

Verificar as sub-redes

Por cluster: para conferir os detalhes de todas as sub-redes associadas a um cluster, execute o comando a seguir:

   gcloud container clusters describe CLUSTER_NAME

Substitua CLUSTER_NAME pelo nome do cluster.

O resultado será assim:

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 comando a seguir:

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á assim:

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, ao criar um novo pool de nós e várias sub-redes estiverem disponíveis, o GKE seleciona automaticamente uma sub-rede adequada para o pool de nós com base nos requisitos de endereços IP 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 extra). Se você não especificar um intervalo IPv4 de pods, o GKE selecionará automaticamente um intervalo secundário disponível na 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 retornará um erro.

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --subnetwork=SUBNET_NAME

Especificar o intervalo de endereços IPv4 de pods junto com a sub-rede

Se a sub-rede especificada tiver vários intervalos de endereços IPv4 secundários, você poderá usar a flag --pod-ipv4-range e a flag --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 o 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 nesse pool de nós.

Remover uma sub-rede não padrão

A remoção de 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 IPv4 secundários da sub-rede não padrão não podem ser usados para intervalos IPv4 de pods.

Antes de remover uma sub-rede não padrão, é necessário excluir todos os pools de nós que usam essa sub-rede. Definir a sub-rede como status de esgotamento é a primeira etapa recomendada. As sub-redes no status de esgotamento 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ê pretende remover, sem precisar desativar o escalonamento automático para todo o cluster.

Etapas para remover uma sub-rede:

  1. Defina a sub-rede não padrão como status de esgotamento. Isso impede que novos pools de nós selecionem essa sub-rede, o que é útil ao ativar o escalonamento automático no cluster.
  2. Exclua todos os pools de nós que estão usando essa sub-rede.
  3. Remova a sub-rede do cluster.

Para remover uma sub-rede não padrão do cluster, execute o comando a seguir:

   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 esgotamento, execute o comando a seguir:

   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 esgotamento.

Para cancelar o esgotamento de uma sub-rede não padrão, execute o comando a seguir:

   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 cancelar o esgotamento.

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 IPv4 secundário de sub-rede não padrão

Ao remover 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 pods em nenhum pool de nós. Se o intervalo IPv4 secundário de sub-rede não padrão removido for o único intervalo da sub-rede não padrão usado por esse cluster, o GKE também instruirá o cluster a parar de usar o endereço IPv4 principal dessa sub-rede para endereços IPv4 de nós.

Antes de remover um intervalo IPv4 secundário de sub-rede não padrão, é necessário excluir todos os pools de nós que usam o intervalo para endereços IPv4 de pods.

Para remover um intervalo IPv4 secundário de sub-rede não padrão do cluster, execute o comando a seguir:

   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 de 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 range.

Usar sub-redes extras na VPC compartilhada

Antes de continuar, verifique 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 a 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 host e de serviço.
  1. Crie uma sub-rede extra 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/14
    
  2. Receber a política do IAM. Para permitir que o cluster do GKE no projeto de serviço acesse sub-redes extras na VPC compartilhada do projeto host, é necessário configurar as permissões necessárias do IAM. Se as permissões ainda não estiverem configuradas, siga as etapas abaixo. 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_REGION
    

    A resposta contém um campo etag. Anote o valor etag.

  3. 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_STRING
    

    Substitua ETAG_STRING pelo valor etag anotado anteriormente.

  4. 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_REGION
    
  5. Verifique 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.

  6. Atualize o cluster da VPC compartilhada das sub-redes extras:

    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 criada no projeto host (por exemplo, camada 2).
  • HOST_PROJECT_ID: o ID do projeto host.
  • SERVICE_PROJECT_NUM: o nome do projeto de serviço.
  • COMPUTE_REGION: a região em que a sub-rede está localizada.

Isso permite usar as sub-redes extras em um ambiente de VPC compartilhada.

A seguir