Configure o suporte de várias redes para pods

Esta página mostra como ativar várias interfaces em nós e pods num cluster do Google Kubernetes Engine (GKE) através do suporte de várias redes para pods.

Antes de ler esta página, certifique-se de que conhece os conceitos gerais de rede, a terminologia e os conceitos específicos desta funcionalidade, bem como os requisitos e as limitações do suporte de várias redes para pods.

Para mais informações, consulte o artigo Acerca da compatibilidade com várias redes para os Pods.

Requisitos e limitações

O suporte de várias redes para pods tem os seguintes requisitos e limitações:

Requisitos

  • Versão 1.28 ou posterior do GKE Standard.
  • GKE Autopilot versão 1.29.5-gke.1091000 e posterior ou versão 1.30.1-gke.1280000 e posterior.
  • O suporte de várias redes para pods usa as mesmas especificações ao nível da VM que a funcionalidade de várias NICs para o Compute Engine.
  • O suporte de várias redes para pods requer o GKE Dataplane V2.
  • O suporte de várias redes para agrupamentos está disponível para o SO otimizado para contentores. O suporte do Ubuntu está disponível em nós que executam a versão 1.32.3-gke.1785000 ou posterior do GKE.

Limitações gerais

  • O suporte de várias redes para pods não funciona para clusters ativados para redes de pilha dupla.
  • A VPC partilhada só é suportada na versão 1.28 ou posterior do GKE.
  • O CIDR de vários pods só é suportado na versão 1.29 ou posterior do GKE e apenas para a rede de pods predefinida.
  • As sub-redes num único cluster do GKE não podem ter intervalos CIDR sobrepostos.
  • Quando ativa o suporte de várias redes para pods, não pode adicionar nem remover interfaces de rede de nós ou redes de pods depois de criar um conjunto de nós. Para alterar estas definições, tem de recriar o conjunto de nós.
  • Por predefinição, o acesso à Internet não está disponível em interfaces adicionais de redes de pods no pod. No entanto, pode ativá-lo manualmente através do Cloud NAT.
  • Não é possível alterar o Gateway predefinido num Pod com várias interfaces através da API. O gateway predefinido tem de estar ligado à rede de pods predefinida.
  • A rede de pods predefinida tem de ser sempre incluída nos pods, mesmo que crie redes de pods ou interfaces adicionais.
  • Não pode configurar a funcionalidade de várias redes quando o Managed Hubble está configurado.
  • Para usar a VPC partilhada, certifique-se de que o cluster do GKE está a executar a versão 1.28.4 ou posterior.
  • Para implementações de VPC partilhada, todas as interfaces de rede (NICs) anexadas aos nós têm de pertencer ao mesmo projeto que o projeto anfitrião.
  • O nome dos objetos de rede introduzidos no dispositivo não pode exceder 41 carateres. O caminho completo de cada tomada de domínio UNIX é composto, incluindo o nome da rede correspondente. O Linux tem uma limitação nos comprimentos dos caminhos de sockets (inferiores a 107 bytes). Depois de ter em conta o diretório, o prefixo do nome do ficheiro e a extensão .sock, o nome da rede está limitado a um máximo de 41 carateres.
  • Não pode alterar objetos Network e GKENetworkParamSet. Para atualizar estes objetos, elimine-os e volte a criá-los.

Limitações do Device and Data Plane Development Kit (DPDK)

  • Uma NIC de VM transmitida a um pod como uma NIC do tipo Device não está disponível para outros pods no mesmo nó.
  • Os pods que usam o modo DPDK têm de ser executados no modo privilegiado para acederem a dispositivos VFIO.
  • O modo de piloto automático não suporta DPDK.
  • No modo DPDK, um dispositivo é tratado como um recurso de nó e só é anexado ao primeiro contentor (não inicial) no pod. Se quiser dividir vários dispositivos DPDK entre contentores no mesmo pod, tem de executar esses contentores em pods separados.
  • Nos nós do Ubuntu, as redes DPDK-VFIO só são suportadas com a versão 1.33.1-gke.1959000 e posteriores do GKE.

Limitações de escalabilidade

O GKE oferece uma arquitetura de rede flexível que lhe permite dimensionar o cluster. Pode adicionar redes de nós e redes de pods adicionais ao cluster. Pode dimensionar o cluster da seguinte forma:

  • Pode adicionar até 8 redes de nós adicionais a cada pool de nós do GKE. Este é o mesmo limite de escala para VMs do Compute Engine.
  • Cada pod tem de ter menos de 8 redes adicionais associadas.
  • Pode configurar até 35 redes de pods nas 8 redes de nós num único conjunto de nós. Pode dividi-lo em diferentes combinações, como:
    • 7 redes de nós com 5 redes de pods cada
    • 5 redes de nós com 7 redes de pods cada
    • 1 rede de nós com 30 redes de pods. O limite de intervalos secundários por sub-rede é 30.
  • Pode configurar até 50 redes de pods por cluster.
  • Pode configurar até um máximo de 32 pods de várias redes por nó.
  • Pode ter até 5000 nós com várias interfaces.
  • Pode ter até 100 000 interfaces adicionais em todos os pods.

Implemente pods de várias redes

Para implementar pods com várias redes, faça o seguinte:

  1. Prepare uma VPC adicional, uma sub-rede (node-network) e intervalos secundários (Pod-network).
  2. Crie um cluster do GKE com várias redes através do comando da CLI do Google Cloud.
  3. Crie um novo conjunto de nós do GKE que esteja ligado à rede de nós e à rede de pods adicionais através do comando da CLI do Google Cloud.
  4. Crie uma rede de pods e referencie a VPC, a sub-rede e os intervalos secundários corretos em objetos de várias redes com a API Kubernetes.
  5. Na configuração da carga de trabalho, faça referência ao objeto de rede preparado do Kubernetes através da API Kubernetes.

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.

Prepare uma VPC adicional

Google Cloud cria uma rede de pods predefinida durante a criação do cluster associada ao pool de nós do GKE usado durante a criação inicial do cluster do GKE. A rede de agrupamentos predefinida está disponível em todos os nós do cluster e agrupamentos. Para facilitar as capacidades de várias redes no conjunto de nós, tem de preparar VPCs existentes ou novas, que suportam redes do tipo Layer 3 e Device.

Para preparar uma VPC adicional, considere os seguintes requisitos:

  • Layer 3 e rede do tipo Netdevice:

    • Crie um intervalo secundário se estiver a usar redes do tipo Layer 3.
    • Certifique-se de que o tamanho do CIDR para o intervalo secundário é suficientemente grande para satisfazer o número de nós no conjunto de nós e o número de pods por nó que quer ter.
    • Semelhante à rede de pods predefinida, as outras redes de pods usam o aprovisionamento excessivo de endereços IP. O intervalo de endereços IP secundários tem de ter o dobro dos endereços IP por nó em comparação com o número de pods por nó.
  • Requisitos de rede do tipo Device: crie uma sub-rede normal numa VPC. Não precisa de uma sub-rede secundária.

Para ativar as capacidades de várias redes no conjunto de nós, tem de preparar as VPCs às quais quer estabelecer ligações adicionais. Pode usar uma VPC existente ou criar uma nova VPC especificamente para o conjunto de nós.

Crie uma rede VPC que suporte um dispositivo do tipo Layer 3

Para criar uma rede VPC que suporte um dispositivo do tipo Layer 3, faça o seguinte:

  • Certifique-se de que o tamanho do CIDR do intervalo secundário é suficientemente grande para satisfazer o número de nós no conjunto de nós e o número de pods por nó que quer ter.
  • Semelhante à rede de pods predefinida, as outras redes de pods usam o aprovisionamento excessivo de endereços IP. O intervalo de endereços IP secundários tem de ter o dobro dos endereços IP por nó em comparação com o número de pods por nó.

gcloud

gcloud compute networks subnets create SUBNET_NAME \
    --project=PROJECT_ID \
    --range=SUBNET_RANGE \
    --network=NETWORK_NAME \
    --region=REGION \
    --secondary-range=SECONDARY_RANGE_NAME=<SECONDARY_RANGE_RANGE>

Substitua o seguinte:

  • SUBNET_NAME: o nome da sub-rede.
  • PROJECT_ID: o ID do projeto que contém a rede VPC onde a sub-rede é criada.
  • SUBNET_RANGE: o intervalo de endereços IPv4 principal para a nova sub-rede, na notação CIDR.
  • NETWORK_NAME: o nome da rede VPC que contém a nova sub-rede.
  • REGION: a Google Cloud região em que a nova sub-rede é criada.
  • SECONDARY_RANGE_NAME: o nome do intervalo secundário.
  • SECONDARY_IP_RANGE o intervalo de endereços IPv4 secundário na notação CIDR.

Consola

  1. Na Google Cloud consola, aceda à página Redes VPC.

  2. Clique em Criar rede de VPC.

  3. No campo Nome, introduza o nome da rede. Por exemplo, l3-vpc.

  4. No menu pendente Unidade de transmissão máxima (MTU), escolha o valor de MTU adequado.

  5. Na secção Modo de criação de sub-rede, escolha Personalizado.

  6. Clique em ADICIONAR SUBNET.

  7. Na secção Nova sub-rede, especifique os seguintes parâmetros de configuração de uma sub-rede:

    1. Indique um Nome. Por exemplo, l3-subnet.

    2. Selecione uma região.

    3. Introduza um intervalo de endereços IP. Este é o intervalo IPv4 principal para a sub-rede.

      Se selecionar um intervalo que não seja um endereço RFC 1918, confirme que o intervalo não entra em conflito com uma configuração existente. Para mais informações, consulte os intervalos de sub-redes IPv4.

    4. Para definir um intervalo secundário para a sub-rede, clique em Criar intervalo de endereços IP secundário.

      Se selecionar um intervalo que não seja um endereço RFC 1918, confirme que o intervalo não entra em conflito com uma configuração existente. Para mais informações, consulte os intervalos de sub-redes IPv4.

    5. Acesso privado à Google: pode ativar o acesso privado à Google para a sub-rede quando a cria ou mais tarde, editando-a.

    6. Registos de fluxo: pode ativar os registos de fluxo de VPC para a sub-rede quando a cria ou posteriormente editando-a.

    7. Clique em Concluído.

  8. Na secção Regras de firewall, em Regras de firewall IPv4, selecione zero ou mais regras de firewall predefinidas.

    As regras abordam exemplos de utilização comuns para a conetividade a instâncias. Pode criar as suas próprias regras de firewall depois de criar a rede. O nome de cada regra predefinida começa com o nome da rede VPC que está a criar.

  9. Em Regras de firewall IPv4, para editar a regra de firewall de entrada predefinida denominada allow-custom, clique em EDITAR.

    Pode editar sub-redes, adicionar intervalos IPv4 adicionais e especificar protocolos e portas.

    A regra de firewall allow-custom não é atualizada automaticamente se adicionar sub-redes adicionais mais tarde. Se precisar de regras de firewall para as novas sub-redes, tem de atualizar a configuração da firewall para adicionar as regras.

  10. Na secção Modo de encaminhamento dinâmico, para a rede VPC. Para mais informações, consulte o modo de planeamento de rota dinâmico. Pode alterar o modo de planeamento de itinerários dinâmico mais tarde.

  11. Clique em Criar.

Crie uma rede VPC que suporte dispositivos do tipo Netdevice ou DPDK

gcloud

gcloud compute networks subnets create SUBNET_NAME \
    --project=PROJECT_ID \
    --range=SUBNET_RANGE \
    --network=NETWORK_NAME \
    --region=REGION \
    --secondary-range=SECONDARY_RANGE_NAME=<SECONDARY_RANGE_RANGE>

Substitua o seguinte:

  • SUBNET_NAME: o nome da sub-rede.
  • PROJECT_ID: o ID do projeto que contém a rede VPC onde a sub-rede é criada.
  • SUBNET_RANGE: o intervalo de endereços IPv4 principal para a nova sub-rede, na notação CIDR.
  • NETWORK_NAME: o nome da rede VPC que contém a nova sub-rede.
  • REGION: a Google Cloud região em que a nova sub-rede é criada.
  • SECONDARY_RANGE_NAME: o nome do intervalo secundário.
  • SECONDARY_IP_RANGE o intervalo de endereços IPv4 secundário na notação CIDR.

Consola

  1. Na Google Cloud consola, aceda à página Redes VPC.

  2. Clique em Criar rede de VPC.

  3. No campo Nome, introduza o nome da rede. Por exemplo, netdevice-vpc ou dpdk-vpc.

  4. No menu pendente Unidade de transmissão máxima (MTU), escolha o valor de MTU adequado.

  5. Na secção Modo de criação de sub-rede, escolha Personalizado.

  6. Na secção Nova sub-rede, especifique os seguintes parâmetros de configuração de uma sub-rede:

    1. Indique um Nome. Por exemplo, netdevice-subnet ou dpdk-vpc.

    2. Selecione uma região.

    3. Introduza um intervalo de endereços IP. Este é o intervalo IPv4 principal para a sub-rede.

      Se selecionar um intervalo que não seja um endereço RFC 1918, confirme que o intervalo não entra em conflito com uma configuração existente. Para mais informações, consulte os intervalos de sub-redes IPv4.

    4. Acesso privado à Google: escolha se quer ativar o acesso privado à Google para a sub-rede quando a cria ou mais tarde, editando-a.

    5. Registos de fluxo: pode ativar os registos de fluxo de VPC para a sub-rede quando a cria ou posteriormente editando-a.

    6. Clique em Concluído.

  7. Na secção Regras de firewall, em Regras de firewall IPv4, selecione zero ou mais regras de firewall predefinidas.

    As regras abordam exemplos de utilização comuns para a conetividade a instâncias. Pode criar as suas próprias regras de firewall depois de criar a rede. O nome de cada regra predefinida começa com o nome da rede VPC que está a criar.

  8. Em Regras de firewall IPv4, para editar a regra de firewall de entrada predefinida denominada allow-custom, clique em EDITAR.

    Pode editar sub-redes, adicionar intervalos IPv4 adicionais e especificar protocolos e portas.

    A regra de firewall allow-custom não é atualizada automaticamente se adicionar sub-redes adicionais mais tarde. Se precisar de regras de firewall para as novas sub-redes, tem de atualizar a configuração da firewall para adicionar as regras.

  9. Na secção Modo de encaminhamento dinâmico, para a rede VPC. Para mais informações, consulte o modo de planeamento de rota dinâmico. Pode alterar o modo de planeamento de itinerários dinâmico mais tarde.

  10. Clique em Criar.

Crie um cluster do GKE com capacidades de várias redes

A ativação de várias redes para um cluster adiciona as CustomResourceDefinitions (CRDs) necessárias ao servidor da API desse cluster. Também implementa um network-controller-manager, que é responsável por conciliar e gerir objetos de várias redes. Não pode modificar a configuração do cluster depois de o criar.

Crie um cluster do GKE Autopilot com capacidades de várias redes

Crie um cluster do GKE Autopilot com capacidades de várias redes:

gcloud container clusters create-auto CLUSTER_NAME \
    --cluster-version=CLUSTER_VERSION \
    --enable-multi-networking

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster.
  • CLUSTER_VERSION: a versão do cluster.

A flag --enable-multi-networking ativa as definições de recursos personalizados (CRDs) de várias redes no servidor API para este cluster e implementa um network-controller-manager que contém a reconciliação e a gestão do ciclo de vida para objetos de várias redes.

Crie um cluster padrão do GKE com capacidades de várias redes

gcloud

Crie um cluster padrão do GKE com capacidades de várias redes:

gcloud container clusters create CLUSTER_NAME \
    --cluster-version=CLUSTER_VERSION \
    --enable-dataplane-v2 \
    --enable-ip-alias \
    --enable-multi-networking

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster.
  • CLUSTER_VERSION: a versão do cluster.

Este comando inclui as seguintes flags:

  • --enable-multi-networking: ativa as definições de recursos personalizados (CRDs) de várias redes no servidor da API para este cluster e implementa um network-controller-manager que contém a reconciliação e a gestão do ciclo de vida para objetos de várias redes.
  • --enable-dataplane-v2: ativa o GKE Dataplane V2. Esta flag é necessária para ativar várias redes.

Consola

  1. Na Google Cloud consola, aceda à página Criar um cluster do Kubernetes.

    Aceda a Crie um cluster do Kubernetes

  2. Configure o cluster Standard. Para mais informações, consulte Crie um cluster zonal ou Crie um cluster regional. Ao criar o cluster, selecione a sub-rede de rede e de nós adequada.
  3. No painel de navegação, em Cluster, clique em Rede.
  4. Selecione a caixa de verificação Ativar Dataplane V2.
  5. Selecione Ativar várias redes.
  6. Clique em Criar.

Crie um node pool padrão do GKE ligado a VPCs adicionais

Crie um node pool que inclua nós ligados à rede de nós (VPC e sub-rede) e à rede de pods (intervalo secundário) criados em Criar rede de pods.

Para criar o novo conjunto de nós e associá-lo às redes adicionais no cluster do GKE:

gcloud

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSTER_NAME \
  --additional-node-network network=NETWORK_NAME,subnetwork=SUBNET_NAME \
  --additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=POD_IP_RANGE,max-pods-per-node=NUMBER_OF_PODS \
  --additional-node-network network=highperformance,subnetwork=subnet-highperf

Substitua o seguinte:

  • POOL_NAME com o nome do novo conjunto de nós.
  • CLUSTER_NAME com o nome do cluster existente ao qual está a adicionar o conjunto de nós.
  • NETWORK_NAME com o nome da rede a anexar os nós do conjunto de nós.
  • SUBNET_NAME com o nome da sub-rede na rede a usar para os nós.
  • POD_IP_RANGE o intervalo de endereços IP do agrupamento na sub-rede.
  • NUMBER_OF_PODS número máximo de agrupamentos por nó.

Este comando contém as seguintes flags:

  • --additional-node-network: Define os detalhes da interface, da rede e da sub-rede adicionais. É usado para especificar as node-networks para estabelecer ligação aos nós do conjunto de nós. Especifique este parâmetro quando quiser estabelecer ligação a outra VPC. Se não especificar este parâmetro, é usada a VPC predefinida associada ao cluster. Para redes do tipo Layer 3, especifique a flag additional-pod-network que define a rede de pods, que é exposta no cluster do GKE como o objeto Network. Quando usar a flag --additional-node-network, tem de fornecer uma rede e uma sub-rede como parâmetros obrigatórios. Certifique-se de que separa os valores de rede e sub-rede com uma vírgula e evita usar espaços.
  • --additional-pod-network: especifica os detalhes do intervalo secundário a usar para a rede de agrupamentos. Este parâmetro não é obrigatório se usar uma rede do tipo Device. Este argumento especifica os seguintes valores-chave: subnetwork, pod-ipv4-range e max-pods-per-node. Quando usar o elemento --additional-pod-network, tem de fornecer os valores pod-ipv4-range e max-pods-per-node, separados por vírgulas e sem espaços.
    • subnetwork: associa a rede de nós à rede de pods. A sub-rede é opcional. Se não o especificar, a rede de pods adicional é associada à sub-rede predefinida fornecida durante a criação do cluster.
    • --max-pods-per-node: o max-pods-per-node tem de ser especificado e tem de ser uma potência de 2. O valor mínimo é 4. O valor max-pods-per-node não pode ser superior ao valor max-pods-per-node no conjunto de nós.

Consola

  1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. No painel de navegação, clique em Clusters.

  3. Na secção Clusters do Kubernetes, clique no cluster que criou.

  4. Na parte superior da página, para criar o seu conjunto de nós, clique em Adicionar conjunto de nós.

  5. Na secção Detalhes do conjunto de nós, conclua o seguinte:

    1. Introduza um Nome para o conjunto de nós.
    2. Introduza o Número de nós a criar no node pool.
  6. No painel de navegação, em Node Pools, clique em Nodes.

    1. Na lista pendente Tipo de imagem, selecione a imagem do nó SO otimizado para contentores com containerd (cos_containerd).

  7. Quando cria uma VM, seleciona um tipo de máquina de uma família de máquinas que determina os recursos disponíveis para essa VM. Por exemplo, um tipo de máquina como e2-standard-4 contém 4 vCPUs e, por isso, pode suportar um total de até 4 VPCs. Pode escolher entre várias famílias de máquinas e cada família de máquinas está ainda organizada em séries de máquinas e tipos de máquinas predefinidos ou personalizados em cada série. Cada tipo de máquina é faturado de forma diferente. Para mais informações, consulte a folha de preços dos tipos de máquinas.

  8. No painel de navegação, selecione Rede.

  9. Na secção Redes de nós, especifique o número máximo de pods por nó. A secção Redes de nós apresenta a rede VPC usada para criar o cluster. É necessário designar redes de nós adicionais que estejam correlacionadas com os tipos de dispositivos e as redes VPC estabelecidos anteriormente.

  10. Crie uma associação de node pool:

    1. Para dispositivos do tipo Layer 3:
      1. Na secção Redes de nós, clique em ADICIONAR UMA REDE DE NÓS.
      2. Na lista pendente de redes, selecione a VPC que suporta o dispositivo do tipo camada 3.
      3. Selecione a sub-rede criada para a VPC Layer 3.
      4. Na secção Intervalos de endereços IP de alias de pods, clique em Adicionar intervalo de endereços IP de pods.
      5. Selecione a Sub-rede secundária e indique o Número máximo de pods por nó.
      6. Selecione Concluído.
    2. Para dispositivos do tipo Netdevice e DPDK:
      1. Na secção Redes de nós, clique em ADICIONAR UMA REDE DE NÓS.
      2. Na lista pendente de redes, selecione a VPC que suporta dispositivos do tipo Netdevice ou DPDK.
      3. Selecione a sub-rede criada para a VPC Netdevice ou DPDK.
      4. Selecione Concluído.
  11. Clique em Criar.

Notas:

  • Se forem especificadas várias redes de pods adicionais na mesma rede de nós, têm de estar na mesma sub-rede.
  • Não pode fazer referência ao mesmo intervalo secundário de uma sub-rede várias vezes.

Exemplo O exemplo seguinte cria um conjunto de nós denominado pool-multi-net que anexa duas redes adicionais aos nós, datapalane (rede do tipo Layer 3) e highperformance (rede do tipo netdevice). Este exemplo pressupõe que já criou um cluster do GKE com o nome cluster-1:

gcloud container node-pools create pool-multi-net \
  --project my-project \
  --cluster cluster-1 \
  --location us-central1-c \
  --additional-node-network network=dataplane,subnetwork=subnet-dp \
  --additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-blue,max-pods-per-node=8 \
  --additional-node-network network=highperformance,subnetwork=subnet-highperf

Para especificar interfaces de rede de nós e de pods adicionais, defina os parâmetros --additional-node-network e --additional-pod-network várias vezes, conforme mostrado no exemplo seguinte:

--additional-node-network network=dataplane,subnetwork=subnet-dp \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-blue,max-pods-per-node=8 \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-green,max-pods-per-node=8 \
--additional-node-network network=managementdataplane,subnetwork=subnet-mp \
--additional-pod-network subnetwork=subnet-mp,pod-ipv4-range=sec-range-red,max-pods-per-node=4

Para especificar redes de pods adicionais diretamente na interface de VPC principal do conjunto de nós, conforme mostrado no exemplo seguinte:

--additional-pod-network subnetwork=subnet-def,pod-ipv4-range=sec-range-multinet,max-pods-per-node=8

Crie uma rede de pods

Defina as redes de pods às quais os pods vão aceder definindo objetos do Kubernetes e associando-os aos recursos do Compute Engine correspondentes, como VPCs, sub-redes e intervalos secundários.

Para criar uma rede de pods, tem de definir os objetos CRD de rede no cluster.

Configure a rede de VPC Layer 3

YAML

Para a Layer 3 VPC, crie os seguintes Network e GKENetworkParamSet objetos:

  1. Guarde o seguinte manifesto de exemplo como blue-network.yaml:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: blue-network
    spec:
      type: "L3"
      parametersRef:
        group: networking.gke.io
        kind: GKENetworkParamSet
        name: "l3-vpc"
    

    O manifesto define um recurso Network denominado blue-network do tipo Layer 3. O objeto Network faz referência ao objeto GKENetworkParamSet denominado l3-vpc, que associa uma rede a recursos do Compute Engine.

  2. Aplique o manifesto ao cluster:

    kubectl apply -f blue-network.yaml
    
  3. Guarde o seguinte manifesto como l3-vpc.yaml :

    apiVersion: networking.gke.io/v1
    kind: GKENetworkParamSet
    metadata:
      name: "l3-vpc"
    spec:
      vpc: "l3-vpc"
      vpcSubnet: "subnet-dp"
      podIPv4Ranges:
        rangeNames:
        - "sec-range-blue"
    

    Este manifesto define o objeto GKENetworkParamSet denominado l3-vpc definindo o nome da VPC como l3-vpc, o nome da sub-rede como subnet-dp e o intervalo de endereços IPv4 secundários para pods como sec-range-blue.

  4. Aplique o manifesto ao cluster:

    kubectl apply -f l3-vpc.yaml
    

Consola

  1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. No painel de navegação, clique em Otimizador de funções de rede.

  3. Na parte superior da página, clique em Criar para criar a sua rede de pods.

  4. Na secção Antes de começar, valide os detalhes.

  5. Clique em SEGUINTE: LOCALIZAÇÃO DA REDE DE PODS.

  6. Na secção Localização da rede do pod, no menu pendente Cluster, selecione o cluster do GKE que tem várias redes e o GKE Dataplane V2 ativado.

  7. Clique em SEGUINTE: REFERÊNCIA DA REDE VPC.

  8. Na secção Referência da rede VPC, no menu pendente Referência da rede VPC, selecione a rede VPC usada para os pods com vários NIC.Layer 3

  9. Clique em SEGUINTE: TIPO DE REDE DE PODS.

  10. Na secção Tipo de rede de pods, selecione L3 e introduza o nome da rede de pods.

  11. Clique em SEGUINTE: INTERVALO SECUNDÁRIO DA REDE DE PODS.

  12. Na secção Intervalo secundário da rede do pod, introduza o Intervalo secundário.

  13. Clique em SEGUINTE: ROTAS DE REDE DE PODS.

  14. Na secção Rotas de rede de agrupamentos, para definir Rotas personalizadas, selecione ADICIONAR ROTA.

  15. Clique em CRIAR REDE DE PODS.

Configure a rede DPDK

YAML

Para a VPC DPDK, crie objetos Network e GKENetworkParamSet.

  1. Guarde o seguinte manifesto de exemplo como dpdk-network.yaml:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: dpdk-network
    spec:
      type: "Device"
      parametersRef:
        group: networking.gke.io
        kind: GKENetworkParamSet
        name: "dpdk"
    

    Este manifesto define um recurso Network denominado dpdk-network com um tipo de Device. O recurso Network faz referência a um objeto GKENetworkParamSet denominado dpdk para a respetiva configuração.

  2. Aplique o manifesto ao cluster:

    kubectl apply -f dpdk-network.yaml
    
  3. Para o objeto GKENetworkParamSet, guarde o seguinte manifesto como dpdk.yaml:

    apiVersion: networking.gke.io/v1
    kind: GKENetworkParamSet
    metadata:
      name: "dpdk"
    spec:
      vpc: "dpdk"
      vpcSubnet: "subnet-dpdk"
      deviceMode: "DPDK-VFIO"
    

    Este manifesto define o objeto GKENetworkParamSet denominado dpdk, define o nome da VPC como dpdk, o nome da sub-rede como subnet-dpdk e o nome de deviceMode como DPDK-VFIO.

  4. Aplique o manifesto ao cluster:

    kubectl apply -f dpdk-network.yaml
    

Consola

  1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. No painel de navegação, clique em Otimizador de funções de rede.

  3. Na parte superior da página, clique em Criar para criar a sua rede de pods.

  4. Na secção Antes de começar, valide os detalhes.

  5. Clique em SEGUINTE: LOCALIZAÇÃO DA REDE DE PODS.

  6. Na secção Localização da rede do pod, no menu pendente Cluster, selecione o cluster do GKE que tem várias redes e o GKE Dataplane V2 ativado.

  7. Clique em SEGUINTE: REFERÊNCIA DA REDE VPC.

  8. Na secção Referência da rede VPC, no menu pendente Referência da rede VPC, selecione a rede VPC usada para pods multinic dpdk.

  9. Clique em SEGUINTE: TIPO DE REDE DE PODS.

  10. Na secção Tipo de rede de pods, selecione DPDK-VFIO (Dispositivo) e introduza o Nome da rede de pods.

  11. Clique em SEGUINTE: INTERVALO SECUNDÁRIO DA REDE DE PODS. A secção de intervalo secundário da rede de repetidores não está disponível

  12. Clique em SEGUINTE: ROTAS DE REDE DE PODS. Na secção Rotas de rede de agrupamentos, selecione ADICIONAR ROTA para definir rotas personalizadas

  13. Clique em CRIAR REDE DE PODS.

Configure a rede do dispositivo de rede

Para a netdeviceVPC, crie objetos Network e GKENetworkParamSet.

YAML

  1. Guarde o seguinte manifesto de exemplo como netdevice-network.yaml:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
        name: netdevice-network
    spec:
        type: "Device"
        parametersRef:
          group: networking.gke.io
          kind: GKENetworkParamSet
          name: "netdevice"
    

    Este manifesto define um recurso Network denominado netdevice-network com um tipo de Device. Refere-se ao objeto GKENetworkParamSet com o nome netdevice.

  2. Aplique o manifesto ao cluster:

    kubectl apply -f netdevice-network.yaml
    
  3. Guarde o seguinte manifesto como netdevice.yaml :

    apiVersion: networking.gke.io/v1
    kind: GKENetworkParamSet
    metadata:
      name: netdevice
    spec:
      vpc: netdevice
      vpcSubnet: subnet-netdevice
      deviceMode: NetDevice
    

    Este manifesto define um recurso GKENetworkParamSet denominado netdevice, define o nome da VPC como netdevice, o nome da sub-rede como subnet-netdevice e especifica o modo do dispositivo como NetDevice.

  4. Aplique o manifesto ao cluster:

    kubectl apply -f netdevice.yaml
    

Consola

  1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. No painel de navegação, clique em Otimizador de funções de rede.

  3. Na parte superior da página, clique em Criar para criar a sua rede de pods.

  4. Na secção Antes de começar, valide os detalhes.

  5. Clique em SEGUINTE: LOCALIZAÇÃO DA REDE DE PODS.

  6. Na secção Localização da rede do pod, no menu pendente Cluster, selecione o cluster do GKE que tem várias redes e o GKE Dataplane V2 ativado.

  7. Clique em SEGUINTE: REFERÊNCIA DA REDE VPC.

  8. Na secção Referência da rede VPC, no menu pendente Referência da rede VPC, selecione a rede VPC usada para pods multinic de dispositivos de rede.

  9. Clique em SEGUINTE: TIPO DE REDE DE PODS.

  10. Na secção Tipo de rede de pods, selecione NetDevice (Dispositivo) e introduza o Nome da rede de pods.

  11. Clique em SEGUINTE: INTERVALO SECUNDÁRIO DA REDE DE PODS. A secção de intervalo secundário da rede de repetidores não está disponível

  12. Clique em SEGUINTE: ROTAS DE REDE DE PODS. Na secção Rotas de rede de agrupamentos, para definir rotas personalizadas, selecione ADICIONAR ROTA.

  13. Clique em CRIAR REDE DE PODS.

Configurar rotas de rede

A configuração da rota de rede permite-lhe definir rotas personalizadas para uma rede específica, que são configuradas nos pods para direcionar o tráfego para a interface correspondente no pod.

YAML

  1. Guarde o seguinte manifesto como red-network.yaml:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: red-network
    spec:
      type: "L3"
      parametersRef:
        group: networking.gke.io
        kind: GKENetworkParamSet
        name: "management"
      routes:
      -   to: "10.0.2.0/28"
    

    Este manifesto define um recurso de rede denominado red-network com um tipo de Layer 3 e uma rota personalizada "10.0.2.0/28" através dessa interface de rede.

  2. Aplique o manifesto ao cluster:

    kubectl apply -f red-network.yaml
    

Consola

  1. Aceda à página Network Function Optimizer na Google Cloud consola.

    Aceda ao otimizador de funções de rede

  2. Clique em Criar.

  3. Selecione um cluster com várias redes ativadas.

  4. Configure as preferências de rede.

  5. Clique em Criar rede de pods.

Consulte o Network preparado

Na configuração da carga de trabalho, referencie o objeto do Kubernetes preparado através da API Kubernetes.Network

Ligue o Pod a redes específicas

Para associar os pods às redes especificadas, tem de incluir os nomes dos objetos Network como anotações na configuração do pod. Certifique-se de que inclui a rede default Network e as redes adicionais selecionadas nas anotações para estabelecer as associações.

  1. Guarde o seguinte manifesto de exemplo como sample-l3-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: sample-l3-pod
      annotations:
        networking.gke.io/default-interface: 'eth0'
        networking.gke.io/interfaces: |
          [
            {"interfaceName":"eth0","network":"default"},
            {"interfaceName":"eth1","network":"blue-network"}
          ]
    spec:
      containers:
      - name: sample-l3-pod
        image: busybox
        command: ["sleep", "10m"]
        ports:
        - containerPort: 80
      restartPolicy: Always
    

    Este manifesto cria um Pod denominado sample-l3-pod com duas interfaces de rede, eth0 e eth1, associadas às redes default e blue-network, respetivamente.

  2. Aplique o manifesto ao cluster:

    kubectl apply -f sample-l3-pod.yaml
    

Ligue o Pod a várias redes

  1. Guarde o seguinte manifesto de exemplo como sample-l3-netdevice-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: sample-l3-netdevice-pod
      annotations:
        networking.gke.io/default-interface: 'eth0'
        networking.gke.io/interfaces: |
          [
            {"interfaceName":"eth0","network":"default"},
            {"interfaceName":"eth1","network":"blue-network"},
            {"interfaceName":"eth2","network":"netdevice-network"}
          ]
    spec:
      containers:
      - name: sample-l3-netdevice-pod
        image: busybox
        command: ["sleep", "10m"]
        ports:
        - containerPort: 80
      restartPolicy: Always
    

    Este manifesto cria um agrupamento denominado sample-l3-netdevice-pod com três interfaces de rede, eth0, eth1 e eth2 associadas, respetivamente, às redes default, blue-network e netdevice.

  2. Aplique o manifesto ao cluster:

    kubectl apply -f sample-l3-netdevice-pod.yaml
    

Pode usar a mesma anotação em qualquer ReplicaSet (Deployment ou DaemonSet) na secção de anotações do modelo.

Configuração de exemplo de um Pod com várias interfaces:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
2: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default
    link/ether 2a:92:4a:e5:da:35 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.60.45.4/24 brd 10.60.45.255 scope global eth0
      valid_lft forever preferred_lft forever
10: eth1@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default qlen 1000
    link/ether ba:f0:4d:eb:e8:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.16.1.2/32 scope global eth1
      valid_lft forever preferred_lft forever

Validação

  • Certifique-se de que cria clusters com --enable-multi-networking apenas se --enable-dataplane-v2 estiver ativado.
  • Verifique se todos os node pools no cluster estão a executar imagens do SO otimizado para contentores no momento da criação do cluster e do node pool.
  • Verifique se os conjuntos de nós são criados com --additional-node-network ou --additional-pod-network apenas se a rede múltipla estiver ativada no cluster.
  • Certifique-se de que a mesma sub-rede não é especificada duas vezes como argumento --additional-node-network para um conjunto de nós.
  • Verifique se o mesmo intervalo secundário não está especificado como o argumento --additional-pod-network para um conjunto de nós.
  • Siga os limites de escala especificados para objetos de rede, tendo em conta o número máximo de nós, agrupamentos e endereços IP permitidos.
  • Verifique se existe apenas um objeto GKENetworkParamSet que se refere a um intervalo secundário e uma sub-rede específicos.
  • Verifique se cada objeto de rede se refere a um objeto GKENetworkParamSet diferente.
  • Verifique se o objeto de rede, se for criado com uma sub-rede específica com a rede Device, não está a ser usado no mesmo nó com outra rede com um intervalo secundário. Só pode validar esta opção no tempo de execução.
  • Verifique se os vários intervalos secundários atribuídos aos conjuntos de nós não têm endereços IP sobrepostos.

Resolva problemas de parâmetros de várias redes no GKE

Quando cria um cluster e um conjunto de nós, Google Cloud implementa determinadas verificações para garantir que apenas são permitidos parâmetros de várias redes válidos. Isto garante que a rede está configurada corretamente para o cluster.

A partir da versão 1.32 do GKE e posteriores, o high-perf-config-daemon só é necessário quando existe uma rede DPDK-VFIO no nó. Para verificar o high-perf-config-daemon, confirme que a etiqueta do nó cloud.google.com/run-high-perf-config-daemons: "true" está presente. A ausência dos plug-ins ou das etiquetas de nós necessários para o tipo de rede específico pode indicar uma configuração incompleta ou incorreta.

Se não conseguir criar cargas de trabalho de várias redes, pode verificar o estado do pod e os eventos para ver mais informações:

kubectl describe pods samplepod

O resultado é semelhante ao seguinte:

Name:         samplepod
Namespace:    default
Status:       Running
IP:           192.168.6.130
IPs:
  IP:  192.168.6.130
...
Events:
  Type     Reason                  Age   From               Message
  ----     ------                  ----  ----               -------
  Normal   NotTriggerScaleUp  9s               cluster-autoscaler  pod didn't trigger scale-up:
  Warning  FailedScheduling   8s (x2 over 9s)  default-scheduler   0/1 nodes are available: 1 Insufficient networking.gke.io.networks/my-net.IP. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod

Seguem-se os motivos gerais para a falha na criação de pods:

  • Não foi possível agendar o pod porque os requisitos de recursos de várias redes não foram cumpridos
  • Não foi possível identificar as redes especificadas

Resolva problemas de criação de redes Kubernetes

Depois de criar com êxito uma rede, os nós que devem ter acesso à rede configurada são anotados com uma anotação de estado da rede.

Para observar as anotações, execute o seguinte comando:

kubectl describe node NODE_NAME

Substitua NODE_NAME pelo nome do nó.

O resultado é semelhante ao seguinte:

networking.gke.io/network-status: [{"name":"default"},{"name":"dp-network"}]

O resultado apresenta uma lista de cada rede disponível no nó. Se não vir o estado da rede esperado no nó, faça o seguinte:

Verifique se o nó consegue aceder à rede

Se a rede não for apresentada na anotação network-status do nó:

  1. Verifique se o nó faz parte de um conjunto configurado para várias redes.
  2. Verifique as interfaces do nó para ver se tem uma interface para a rede que está a configurar.
  3. Se um nó não tiver o estado da rede e tiver apenas uma interface de rede, tem de criar um conjunto de nós com várias redes ativadas.
  4. Se o seu nó contiver a interface para a rede que está a configurar, mas não for apresentado na anotação do estado da rede, verifique os recursos Network e GKENetworkParamSet (GNP).

Consulte os recursos Network e GKENetworkParamSet

O estado dos recursos Network e GKENetworkParamSet (GNP) inclui um campo de condições para comunicar erros de configuração. Recomendamos que verifique primeiro o GNP, uma vez que não depende de outro recurso para ser válido.

Para inspecionar o campo de condições, execute o seguinte comando:

kubectl get gkenetworkparamsets GNP_NAME -o yaml

Substitua GNP_NAME pelo nome do recurso GKENetworkParamSet.

Quando a condição Ready é igual a verdadeira, a configuração é válida e o resultado é semelhante ao seguinte:

apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
...
spec:
  podIPv4Ranges:
    rangeNames:
    -   sec-range-blue
  vpc: dataplane
  vpcSubnet: subnet-dp
status:
  conditions:
  -   lastTransitionTime: "2023-06-26T17:38:04Z"
    message: ""
    reason: GNPReady
    status: "True"
    type: Ready
  networkName: dp-network
  podCIDRs:
    cidrBlocks:
    -   172.16.1.0/24

Quando a condição Ready é igual a false, o resultado apresenta o motivo e é semelhante ao seguinte:

apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
...
spec:
  podIPv4Ranges:
    rangeNames:
    -   sec-range-blue
  vpc: dataplane
  vpcSubnet: subnet-nonexist
status:
  conditions:
  -   lastTransitionTime: "2023-06-26T17:37:57Z"
    message: 'subnet: subnet-nonexist not found in VPC: dataplane'
    reason: SubnetNotFound
    status: "False"
    type: Ready
  networkName: ""

Se encontrar uma mensagem semelhante, certifique-se de que o GNP foi configurado corretamente. Se já estiver, certifique-se de que a Google Cloud configuração de rede está correta. Depois de atualizar Google Cloud a configuração de rede, pode ter de recriar o recurso GNP para acionar manualmente uma nova sincronização. Isto destina-se a evitar a sondagem infinita da API.Google Cloud

Quando o GNP estiver pronto, consulte o recurso Network.

kubectl get networks NETWORK_NAME -o yaml

Substitua NETWORK_NAME pelo nome do recurso Network

O resultado de uma configuração válida é semelhante ao seguinte:

apiVersion: networking.gke.io/v1
kind: Network
...
spec:
  parametersRef:
    group: networking.gke.io
    kind: GKENetworkParamSet
    name: dp-gnp
  type: L3
status:
  conditions:
  -   lastTransitionTime: "2023-06-07T19:31:42Z"
    message: ""
    reason: GNPParamsReady
    status: "True"
    type: ParamsReady
  -   lastTransitionTime: "2023-06-07T19:31:51Z"
    message: ""
    reason: NetworkReady
    status: "True"
    type: Ready
  • reason: NetworkReady indica que o recurso de rede está configurado corretamente. reason: NetworkReady não implica que o recurso de rede esteja necessariamente disponível num nó específico ou a ser usado ativamente.
  • Se existir uma configuração incorreta ou um erro, o campo reason na condição especifica o motivo exato do problema. Nestes casos, ajuste a configuração em conformidade.
  • O GKE preenche o campo ParamsReady se o campo parametersRef estiver definido para um recurso GKENetworkParamSet que exista no cluster. Se especificou um GKENetworkParamSet type parametersRef e a condição não estiver a ser apresentada, certifique-se de que o nome, o tipo e o grupo correspondem ao recurso GNP que existe no seu cluster.

O que se segue?