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
eGKENetworkParamSet
. 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:
- Prepare uma VPC adicional, uma sub-rede (node-network) e intervalos secundários (Pod-network).
- Crie um cluster do GKE com várias redes através do comando da CLI do Google Cloud.
- 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.
- 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.
- 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.
- Reveja os requisitos e as limitações.
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 tipoNetdevice
:- 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ó.
- Crie um intervalo secundário se estiver a usar redes do tipo
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
Na Google Cloud consola, aceda à página Redes VPC.
Clique em Criar rede de VPC.
No campo Nome, introduza o nome da rede. Por exemplo,
l3-vpc
.No menu pendente Unidade de transmissão máxima (MTU), escolha o valor de MTU adequado.
Na secção Modo de criação de sub-rede, escolha Personalizado.
Clique em ADICIONAR SUBNET.
Na secção Nova sub-rede, especifique os seguintes parâmetros de configuração de uma sub-rede:
Indique um Nome. Por exemplo,
l3-subnet
.Selecione uma região.
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.
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.
Acesso privado à Google: pode ativar o acesso privado à Google para a sub-rede quando a cria ou mais tarde, editando-a.
Registos de fluxo: pode ativar os registos de fluxo de VPC para a sub-rede quando a cria ou posteriormente editando-a.
Clique em Concluído.
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.
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.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.
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
Na Google Cloud consola, aceda à página Redes VPC.
Clique em Criar rede de VPC.
No campo Nome, introduza o nome da rede. Por exemplo,
netdevice-vpc
oudpdk-vpc
.No menu pendente Unidade de transmissão máxima (MTU), escolha o valor de MTU adequado.
Na secção Modo de criação de sub-rede, escolha Personalizado.
Na secção Nova sub-rede, especifique os seguintes parâmetros de configuração de uma sub-rede:
Indique um Nome. Por exemplo,
netdevice-subnet
oudpdk-vpc
.Selecione uma região.
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.
Acesso privado à Google: escolha se quer ativar o acesso privado à Google para a sub-rede quando a cria ou mais tarde, editando-a.
Registos de fluxo: pode ativar os registos de fluxo de VPC para a sub-rede quando a cria ou posteriormente editando-a.
Clique em Concluído.
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.
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.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.
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
- Na Google Cloud consola, aceda à página Criar um cluster do Kubernetes.
- 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.
- No painel de navegação, em Cluster, clique em Rede.
- Selecione a caixa de verificação Ativar Dataplane V2.
- Selecione Ativar várias redes.
- 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 tipoLayer 3
, especifique a flagadditional-pod-network
que define a rede de pods, que é exposta no cluster do GKE como o objetoNetwork
. 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 tipoDevice
. Este argumento especifica os seguintes valores-chave:subnetwork
,pod-ipv4-range
emax-pods-per-node
. Quando usar o elemento--additional-pod-network
, tem de fornecer os valorespod-ipv4-range
emax-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
: omax-pods-per-node
tem de ser especificado e tem de ser uma potência de 2. O valor mínimo é 4. O valormax-pods-per-node
não pode ser superior ao valormax-pods-per-node
no conjunto de nós.
Consola
Aceda à página do Google Kubernetes Engine na Google Cloud consola.
No painel de navegação, clique em Clusters.
Na secção Clusters do Kubernetes, clique no cluster que criou.
Na parte superior da página, para criar o seu conjunto de nós, clique em add_box Adicionar conjunto de nós.
Na secção Detalhes do conjunto de nós, conclua o seguinte:
- Introduza um Nome para o conjunto de nós.
- Introduza o Número de nós a criar no node pool.
No painel de navegação, em Node Pools, clique em Nodes.
Na lista pendente Tipo de imagem, selecione a imagem do nó SO otimizado para contentores com containerd (cos_containerd).
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.No painel de navegação, selecione Rede.
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.
Crie uma associação de node pool:
- Para dispositivos do tipo
Layer 3
:- Na secção Redes de nós, clique em ADICIONAR UMA REDE DE NÓS.
- Na lista pendente de redes, selecione a VPC que suporta o dispositivo do tipo camada 3.
- Selecione a sub-rede criada para a VPC
Layer 3
. - Na secção Intervalos de endereços IP de alias de pods, clique em Adicionar intervalo de endereços IP de pods.
- Selecione a Sub-rede secundária e indique o Número máximo de pods por nó.
- Selecione Concluído.
- Para dispositivos do tipo
Netdevice
eDPDK
:- Na secção Redes de nós, clique em ADICIONAR UMA REDE DE NÓS.
- Na lista pendente de redes, selecione a VPC que suporta dispositivos do tipo
Netdevice
ouDPDK
. - Selecione a sub-rede criada para a VPC
Netdevice
ouDPDK
. - Selecione Concluído.
- Para dispositivos do tipo
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:
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
denominadoblue-network
do tipoLayer 3
. O objetoNetwork
faz referência ao objetoGKENetworkParamSet
denominadol3-vpc
, que associa uma rede a recursos do Compute Engine.Aplique o manifesto ao cluster:
kubectl apply -f blue-network.yaml
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
denominadol3-vpc
definindo o nome da VPC comol3-vpc
, o nome da sub-rede comosubnet-dp
e o intervalo de endereços IPv4 secundários para pods comosec-range-blue
.Aplique o manifesto ao cluster:
kubectl apply -f l3-vpc.yaml
Consola
Aceda à página do Google Kubernetes Engine na Google Cloud consola.
No painel de navegação, clique em Otimizador de funções de rede.
Na parte superior da página, clique em add_box Criar para criar a sua rede de pods.
Na secção Antes de começar, valide os detalhes.
Clique em SEGUINTE: LOCALIZAÇÃO DA REDE DE PODS.
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.
Clique em SEGUINTE: REFERÊNCIA DA REDE VPC.
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
Clique em SEGUINTE: TIPO DE REDE DE PODS.
Na secção Tipo de rede de pods, selecione L3 e introduza o nome da rede de pods.
Clique em SEGUINTE: INTERVALO SECUNDÁRIO DA REDE DE PODS.
Na secção Intervalo secundário da rede do pod, introduza o Intervalo secundário.
Clique em SEGUINTE: ROTAS DE REDE DE PODS.
Na secção Rotas de rede de agrupamentos, para definir Rotas personalizadas, selecione ADICIONAR ROTA.
Clique em CRIAR REDE DE PODS.
Configure a rede DPDK
YAML
Para a VPC DPDK, crie objetos Network
e GKENetworkParamSet
.
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
denominadodpdk-network
com um tipo deDevice
. O recursoNetwork
faz referência a um objetoGKENetworkParamSet
denominadodpdk
para a respetiva configuração.Aplique o manifesto ao cluster:
kubectl apply -f dpdk-network.yaml
Para o objeto
GKENetworkParamSet
, guarde o seguinte manifesto comodpdk.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
denominadodpdk
, define o nome da VPC comodpdk
, o nome da sub-rede comosubnet-dpdk
e o nome de deviceMode comoDPDK-VFIO
.Aplique o manifesto ao cluster:
kubectl apply -f dpdk-network.yaml
Consola
Aceda à página do Google Kubernetes Engine na Google Cloud consola.
No painel de navegação, clique em Otimizador de funções de rede.
Na parte superior da página, clique em add_box Criar para criar a sua rede de pods.
Na secção Antes de começar, valide os detalhes.
Clique em SEGUINTE: LOCALIZAÇÃO DA REDE DE PODS.
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.
Clique em SEGUINTE: REFERÊNCIA DA REDE VPC.
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.
Clique em SEGUINTE: TIPO DE REDE DE PODS.
Na secção Tipo de rede de pods, selecione DPDK-VFIO (Dispositivo) e introduza o Nome da rede de pods.
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
Clique em SEGUINTE: ROTAS DE REDE DE PODS. Na secção Rotas de rede de agrupamentos, selecione ADICIONAR ROTA para definir rotas personalizadas
Clique em CRIAR REDE DE PODS.
Configure a rede do dispositivo de rede
Para a netdevice
VPC, crie objetos Network
e GKENetworkParamSet
.
YAML
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
denominadonetdevice-network
com um tipo deDevice
. Refere-se ao objetoGKENetworkParamSet
com o nomenetdevice
.Aplique o manifesto ao cluster:
kubectl apply -f netdevice-network.yaml
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
denominadonetdevice
, define o nome da VPC comonetdevice
, o nome da sub-rede comosubnet-netdevice
e especifica o modo do dispositivo comoNetDevice
.Aplique o manifesto ao cluster:
kubectl apply -f netdevice.yaml
Consola
Aceda à página do Google Kubernetes Engine na Google Cloud consola.
No painel de navegação, clique em Otimizador de funções de rede.
Na parte superior da página, clique em add_box Criar para criar a sua rede de pods.
Na secção Antes de começar, valide os detalhes.
Clique em SEGUINTE: LOCALIZAÇÃO DA REDE DE PODS.
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.
Clique em SEGUINTE: REFERÊNCIA DA REDE VPC.
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.
Clique em SEGUINTE: TIPO DE REDE DE PODS.
Na secção Tipo de rede de pods, selecione NetDevice (Dispositivo) e introduza o Nome da rede de pods.
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
Clique em SEGUINTE: ROTAS DE REDE DE PODS. Na secção Rotas de rede de agrupamentos, para definir rotas personalizadas, selecione ADICIONAR ROTA.
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
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 deLayer 3
e uma rota personalizada "10.0.2.0/28" através dessa interface de rede.Aplique o manifesto ao cluster:
kubectl apply -f red-network.yaml
Consola
Aceda à página Network Function Optimizer na Google Cloud consola.
Clique em Criar.
Selecione um cluster com várias redes ativadas.
Configure as preferências de rede.
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.
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
eeth1
, associadas às redesdefault
eblue-network
, respetivamente.Aplique o manifesto ao cluster:
kubectl apply -f sample-l3-pod.yaml
Ligue o Pod a várias redes
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
eeth2
associadas, respetivamente, às redesdefault
,blue-network
enetdevice
.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ó:
- Verifique se o nó faz parte de um conjunto configurado para várias redes.
- Verifique as interfaces do nó para ver se tem uma interface para a rede que está a configurar.
- 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.
- 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
eGKENetworkParamSet
(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 umGKENetworkParamSet
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.