Esta página descreve o operador especializado do Kubernetes da função de rede que o Google Distributed Cloud oferece. Esse operador implementa um conjunto de CustomResourceDefinitions (CRDs) que permitem que o Distributed Cloud execute cargas de trabalho de alta performance.
O operador de função de rede e a funcionalidade SR-IOV não estão disponíveis nos servidores do Distributed Cloud.
O operador de função de rede permite que você faça o seguinte:
- Pesquisar dispositivos de rede em um nó.
- Consultar o endereço IP e o estado do link físico de cada dispositivo de rede em um nó.
- Provisionar interfaces de rede adicionais em um nó.
- Configurar recursos de sistema de baixo nível na máquina física do nó necessários para oferecer suporte a cargas de trabalho de alta performance.
- Usar a virtualização de entrada/saída (SR-IOV) de raiz única em interfaces de rede PCI Express para virtualizá-las em várias interfaces virtuais. Em seguida, é possível configurar as cargas de trabalho do Distributed Cloud para usar essas interfaces de rede virtuais.
O suporte do Distributed Cloud para SR-IOV é baseado nos seguintes projetos de código aberto:
Pré-requisitos
O operador de função de rede busca a configuração de rede na API Distributed Cloud Edge Network.
Para permitir isso, conceda à conta de serviço do operador de função de rede o papel de leitor de rede de borda (roles/edgenetwork.viewer) usando o seguinte comando:
gcloud projects add-iam-policy-binding PROJECT_ID \ --role roles/edgenetwork.viewer \ --member "serviceAccount:PROJECT_ID.svc.id.goog[nf-operator/nf-angautomator-sa]"
Substitua PROJECT_ID pelo ID do projeto de destino Google Cloud .
Recursos do operador de função de rede
O operador de função de rede do Distributed Cloud implementa os seguintes CRDs do Kubernetes:
Network. Define uma rede virtual que os pods podem usar para se comunicar com recursos internos e externos. É necessário criar a VLAN correspondente usando a API Distributed Cloud Edge Network antes de especificá-la nesse recurso. Para instruções, consulte Criar uma rede.NetworkInterfaceState. Permite a descoberta de estados de interface de rede e a consulta de uma interface de rede para o estado do link e o endereço IP.NodeSystemConfigUpdate. Permite a configuração de recursos de sistema de baixo nível, como opções de kernel e flagsKubelet.SriovNetworkNodePolicy. Seleciona um grupo de interfaces de rede virtualizadas SR-IOV e instancia o grupo como um recurso do Kubernetes. É possível usar esse recurso em um recursoNetworkAttachmentDefinition.SriovNetworkNodeState. Permite consultar o estado de provisionamento do recursoSriovNetworkNodePolicyem um nó do Distributed Cloud.NetworkAttachmentDefinition. Permite anexar pods do Distributed Cloud a uma ou mais redes lógicas ou físicas no nó do Distributed Cloud. É necessário criar a VLAN correspondente usando a API Distributed Cloud Edge Network antes de especificá-la nesse recurso. Para instruções, consulte Criar uma rede.
O operador de função de rede também permite definir interfaces de rede secundárias que não usam funções virtuais SR-IOV.
Recurso Network
O recurso Network define uma rede virtual no rack do Distributed Cloud que os pods no cluster do Distributed Cloud podem usar para se comunicar com recursos internos e externos.
O recurso Network fornece os seguintes parâmetros configuráveis para a interface de rede exposta como campos graváveis:
spec.type: especifica a camada de transporte de rede para essa rede. O único valor válido éL2. Também é necessário especificar um valornodeInterfaceMatcher.interfaceName.spec.nodeInterfaceMatcher.interfaceName: o nome da interface de rede física no nó do Distributed Cloud de destino a ser usado com essa rede.spec.gateway4: o endereço IP do gateway de rede para essa rede.spec.l2NetworkConfig.prefixLength4: especifica o intervalo CIDR para essa rede.
O exemplo a seguir ilustra a estrutura do recurso:
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: vlan200-network
annotations:
networking.gke.io/gdce-vlan-id: 200
networking.gke.io/gdce-vlan-mtu: 1500
spec:
type: L2
nodeInterfaceMatcher:
interfaceName: gdcenet0.200
gateway4: 10.53.0.1
Recurso NetworkInterfaceState
O recurso NetworkInterfaceState é somente leitura e permite descobrir interfaces de rede físicas no nó e coletar estatísticas de execução sobre o tráfego de rede que flui por essas interfaces.
O Distributed Cloud cria um recurso NetworkInterfaceState para cada nó em um cluster.
A configuração padrão das máquinas do Distributed Cloud inclui uma interface de rede vinculada na placa filha de rede de seleção de rack (rNDC, na sigla em inglês) chamada gdcenet0. Essa interface vincula as interfaces de rede eno1np0 e eno2np1. Cada uma delas está conectada a um switch ToR do Distributed Cloud, respectivamente.
O recurso NetworkInterfaceState fornece as seguintes categorias de informações de interface de rede expostas como campos de status somente leitura.
Informações gerais:
status.interfaces.ifname: o nome da interface de rede de destino.status.lastReportTime: a hora e a data do último relatório de status da interface de destino.
Informações de configuração do endereço IP:
status.interfaces.interfaceinfo.address: o endereço IP atribuído à interface de destino.status.interfaces.interfaceinfo.dns: o endereço IP do servidor DNS atribuído à interface de destino.status.interfaces.interfaceinfo.gateway: o endereço IP do gateway de rede que atende à interface de destino.status.interfaces.interfaceinfo.prefixlen: o comprimento do prefixo IP.
Informações de hardware:
status.interfaces.linkinfo.broadcast: o endereço MAC de transmissão da interface de destino.status.interfaces.linkinfo.businfo: o caminho do dispositivo PCIe no formatobus:slot.function.status.interfaces.linkinfo.flags: os flags de interface, por exemplo,BROADCAST.status.interfaces.linkinfo.macAddress: o endereço MAC de transmissão única da interface de destino.status.interfaces.linkinfo.mtu: o valor de MTU para a interface de destino.
Estatísticas de recebimento:
status.interfaces.statistics.rx.bytes: o total de bytes recebidos pela interface de destino.status.interfaces.statistics.rx.dropped: o total de pacotes descartados pela interface de destino.status.interfaces.statistics.rx.errors: o total de erros de recebimento de pacotes para a interface de destino.status.interfaces.statistics.rx.multicast: o total de pacotes multicast recebidos pela interface de destino.status.interfaces.statistics.rx.overErrors: o total de erros de recebimento de pacotes para a interface de destino.status.interfaces.statistics.rx.packets: o total de pacotes recebidos pela interface de destino.
Estatísticas de transmissão:
status.interfaces.statistics.tx.bytes: o total de bytes transmitidos pela interface de destino.status.interfaces.statistics.tx.carrierErrors: o total de erros de operadora encontrados pela interface de destino.status.interfaces.statistics.tx.collisions: o total de colisões de pacotes encontradas pela interface de destino.status.interfaces.statistics.tx.dropped: o total de pacotes descartados pela interface de destino.status.interfaces.statistics.tx.errors: o total de erros de transmissão para a interface de destino.status.interfaces.statistics.tx.packets: o total de pacotes transmitidos pela interface de destino.
O exemplo a seguir ilustra a estrutura do recurso:
apiVersion: networking.gke.io/v1
kind: NetworkInterfaceState
metadata:
name: MyNode1
nodeName: MyNode1
status:
interfaces:
- ifname: eno1np0
linkinfo:
businfo: 0000:1a:00.0
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 1098522811
errors: 2
multicast: 190926
packets: 4988200
tx:
bytes: 62157709961
packets: 169847139
- ifname: eno2np1
linkinfo:
businfo: 0000:1a:00.1
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 33061895405
multicast: 110203
packets: 110447356
tx:
bytes: 2370516278
packets: 11324730
- ifname: enp95s0f0np0
interfaceinfo:
- address: fe80::63f:72ff:fec4:2bf4
prefixlen: 64
linkinfo:
businfo: 0000:5f:00.0
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:f4
mtu: 9000
statistics:
rx:
bytes: 37858381
multicast: 205645
packets: 205645
tx:
bytes: 1207334
packets: 6542
- ifname: enp95s0f1np1
interfaceinfo:
- address: fe80::63f:72ff:fec4:2bf5
prefixlen: 64
linkinfo:
businfo: 0000:5f:00.1
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:f5
mtu: 9000
statistics:
rx:
bytes: 37852406
multicast: 205607
packets: 205607
tx:
bytes: 1207872
packets: 6545
- ifname: enp134s0f0np0
interfaceinfo:
- address: fe80::63f:72ff:fec4:2b6c
prefixlen: 64
linkinfo:
businfo: 0000:86:00.0
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:6c
mtu: 9000
statistics:
rx:
bytes: 37988773
multicast: 205584
packets: 205584
tx:
bytes: 1212385
packets: 6546
- ifname: enp134s0f1np1
interfaceinfo:
- address: fe80::63f:72ff:fec4:2b6d
prefixlen: 64
linkinfo:
businfo: 0000:86:00.1
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:6d
mtu: 9000
statistics:
rx:
bytes: 37980702
multicast: 205548
packets: 205548
tx:
bytes: 1212297
packets: 6548
- ifname: gdcenet0
interfaceinfo:
- address: 208.117.254.36
prefixlen: 28
- address: fe80::b816:3ff:fe9e:9c87
prefixlen: 64
linkinfo:
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 34160422968
errors: 2
multicast: 301129
packets: 115435591
tx:
bytes: 64528301111
packets: 181171964
.. <remaining interfaces omitted>
lastReportTime: "2022-03-30T07:35:44Z"
Recurso NodeSystemConfigUpdate
O recurso NodeSystemConfigUpdate permite fazer mudanças na configuração do sistema operacional do nó e modificar flags Kubelet. As mudanças que não sejam sysctl exigem uma reinicialização do nó.
Ao instanciar esse recurso, é necessário especificar os nós de destino no campo nodeSelector. Inclua todos os pares de chave-valor para cada nó de destino no campo nodeSelector. Quando você especifica mais de um nó de destino nesse campo, os nós de destino são atualizados um de cada vez.
CUIDADO: o campo nodeName foi descontinuado. O uso dele reinicializa imediatamente os nós de destino, incluindo os nós do plano de controle local, o que pode interromper cargas de trabalho críticas.
O recurso NodeSystemConfigUpdate fornece os seguintes campos de configuração específicos do Distributed Cloud:
spec.containerRuntimeDNSConfig.ip: especifica uma lista de endereços IP para registros de imagem particulares.spec.containerRuntimeDNSConfig: especifica uma lista de entradas DNS personalizadas usadas pelo ambiente de execução de contêiner em cada nó do Distributed Cloud. Cada entrada consiste nos seguintes campos:ip: especifica o endereço IPv4 de destino,domain: especifica o domínio correspondente,interface: especifica a interface de saída de rede pela qual o endereço IP especificado no campoippode ser acessado. É possível especificar uma interface definida pelos seguintes recursos:CustomNetworkInterfaceConfig,Network(por anotação),NetworkAttachmentDefinition, (por anotação). Esse é um recurso de nível de pré-lançamento.
spec.kubeletConfig.cpuManagerPolicy: especifica a política do Kubernetes CPUManager. Os valores válidos sãoNoneeStatic.spec.kubeletConfig.topologyManagerPolicy: especifica a política do Kubernetes TopologyManager. Os valores válidos sãoNone,BestEffort,RestrictedeSingleNumaMode.spec.osConfig.hugePagesConfig: especifica a configuração de huge pages por nó NUMA. Os valores válidos são2MBe1GB. O número de páginas grandes solicitadas é distribuído uniformemente entre os dois nós NUMA no sistema. Por exemplo, se você alocar 16 páginas grandes de 1 GB cada, cada nó receberá uma pré-alocação de 8 GB.spec.osConfig.isolatedCpusPerSocket: especifica o número de CPUs isoladas por soquete. Necessário secpuManagerPolicyestiver definido comoStatic. O número máximo de CPUs isoladas precisa ser menor que 80% do total de CPUs no nó.spec.osConfig.cpuIsolationPolicy: especifica a política de isolamento de CPU. A políticaDefaultisola apenas as tarefassystemddas CPUs reservadas para cargas de trabalho. A políticaKernelmarca as CPUs comoisolcpuse define osrcu_nocb,nohz_fullercu_nocb_pollflags em cada CPU.spec.sysctls.NodeLevel: especifica os parâmetrossysctlsque você pode configurar globalmente em um nó usando o operador de função de rede. Os parâmetros configuráveis são os seguintes:fs.inotify.max_user_instancesfs.inotify.max_user_watcheskernel.sched_rt_runtime_uskernel.core_patternnet.ipv4.tcp_wmemnet.ipv4.tcp_rmemnet.ipv4.tcp_slow_start_after_idlenet.ipv4.udp_rmem_minnet.ipv4.udp_wmem_minnet.ipv4.tcp_rmemnet.ipv4.tcp_wmemnet.core.rmem_maxnet.core.wmem_maxnet.core.rmem_defaultnet.core.wmem_defaultnet.netfilter.nf_conntrack_tcp_timeout_unacknowledgednet.netfilter.nf_conntrack_tcp_timeout_max_retransnet.sctp.auth_enablenet.sctp.sctp_memnet.ipv4.udp_memnet.ipv4.tcp_memnet.ipv4.tcp_slow_start_after_idlenet.sctp.auth_enablevm.max_map_count
Também é possível definir o escopo de parâmetros seguros e não seguros
sysctlspara um pod ou namespace específico usando otuningplug-in da interface de rede de contêiner (CNI, na sigla em inglês).
O recurso NodeSystemConfigUpdate fornece os seguintes campos de status geral somente leitura:
status.lastReportTime: a hora mais recente em que o status foi informado para a interface de destino.status.conditions.lastTransitionTime: a hora mais recente em que a condição da interface mudou.status.conditions.observedGeneration: denota o valor.metadata.generationem que a condição inicial foi baseada.status.conditions.message: uma mensagem informativa que descreve a mudança da condição da interface.status.conditions.reason: um identificador programático que denota o motivo da última mudança da condição da interface.status.conditions.status: o descritor de status da condição. Os valores válidos sãoTrue,FalseeUnknown.status.conditions.type: o tipo de condição em camelCase.
O exemplo a seguir ilustra a estrutura do recurso:
apiVersion: networking.gke.io/v1
kind: NodeSystemConfigUpdate
metadata:
name: node-pool-1-config
namespace: default
spec:
nodeSelector:
baremetal.cluster.gke.io/node-pool: node-pool-1
networking.gke.io/worker-network-sriov.capable: true
sysctls:
nodeLevel:
"net.ipv4.udp_mem" : "12348035 16464042 24696060"
kubeletConfig:
topologyManagerPolicy: BestEffort
cpuManagerPolicy: Static
osConfig:
hugePagesConfig:
"TWO_MB": 0
"ONE_GB": 16
isolatedCpusPerSocket:
"0": 10
"1": 10
Recurso SriovNetworkNodePolicy
O recurso SriovNetworkNodePolicy permite alocar um grupo de funções virtuais (VFs) SR-IOV em uma máquina física do Distributed Cloud e instanciar esse grupo como um recurso do Kubernetes. Em seguida, é possível usar esse recurso em um recurso NetworkAttachmentDefinition.
É possível selecionar cada VF de destino pelo fornecedor e ID do dispositivo PCIe, pelos endereços do dispositivo PCIe ou pelo nome do dispositivo enumerado do Linux. O operador de rede SR-IOV configura cada interface de rede física para provisionar as VFs de destino. Isso inclui atualizar o firmware da interface de rede, configurar o driver do kernel do Linux e reiniciar a máquina do Distributed Cloud, se necessário.
Para descobrir as interfaces de rede disponíveis no nó, procure os
NetworkInterfaceState recursos
nesse nó no nf-operator namespace.
O exemplo a seguir ilustra a estrutura do recurso:
apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodePolicy
metadata:
name: mlnx6-p2-sriov-en2
namespace: sriov-network-operator
spec:
deviceType: netdevice
isRdma: true
mtu: 9000
nicSelector:
pfNames:
- enp134s0f1np1
nodeSelector:
edgecontainer.googleapis.com/network-sriov.capable: "true"
numVfs: 31
priority: 99
resourceName: mlnx6_p2_sriov_en2
O exemplo anterior cria um máximo de 31 VFs da segunda porta na interface de rede chamada enp134s0f1np1 com um valor de MTU de 9000 (o valor máximo permitido). Use o rótulo do seletor de nós edgecontainer.googleapis.com/network-sriov.capable, que está presente em todos os nós do Distributed Cloud capazes de SR-IOV.
Para informações sobre como usar esse recurso, consulte
SriovNetworkNodeState.
Recurso SriovNetworkNodeState
O recurso somente leitura SriovNetworkNodeState permite consultar o estado de provisionamento do recurso SriovNetworkNodePolicy em um nó do Distributed Cloud. Ele retorna a configuração completa do recurso SriovNetworkNodePolicy no nó, bem como uma lista de VFs ativas no nó. O campo status.syncStatus indica se todos os recursos SriovNetworkNodePolicy definidos para o nó foram aplicados corretamente.
O exemplo a seguir ilustra a estrutura do recurso:
apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodeState
metadata:
name: MyNode1
namespace: sriov-network-operator
spec:
dpConfigVersion: "1969684"
interfaces:
- mtu: 9000
name: enp134s0f1np1
numVfs: 31
pciAddress: 0000:86:00.1
vfGroups:
- deviceType: netdevice
mtu: 9000
policyName: mlnx6-p2-sriov-en2
resourceName: mlnx6_p2_sriov_en2
vfRange: 0-30
status:
Status:
Interfaces:
Device ID: 1015
Driver: mlx5_core
Link Speed: 25000 Mb/s
Link Type: ETH
Mac: ba:16:03:9e:9c:87
Mtu: 9000
Name: eno1np0
Pci Address: 0000:1a:00.0
Vendor: 15b3
Device ID: 1015
Driver: mlx5_core
Link Speed: 25000 Mb/s
Link Type: ETH
Mac: ba:16:03:9e:9c:87
Mtu: 9000
Name: eno2np1
Pci Address: 0000:1a:00.1
Vendor: 15b3
Vfs:
- Vfs:
- deviceID: 101e
driver: mlx5_core
mac: c2:80:29:b5:63:55
mtu: 9000
name: enp134s0f1v0
pciAddress: 0000:86:04.1
vendor: 15b3
vfID: 0
- deviceID: 101e
driver: mlx5_core
mac: 7e:36:0c:82:d4:20
mtu: 9000
name: enp134s0f1v1
pciAddress: 0000:86:04.2
vendor: 15b3
vfID: 1
.. <omitted 29 other VFs here>
syncStatus: Succeeded
Para informações sobre como usar esse recurso, consulte
SriovNetworkNodeState.
Recurso NetworkAttachmentDefinition
O recurso NetworkAttachmentDefinition permite anexar pods do Distributed Cloud a uma ou mais redes lógicas ou físicas no nó do Distributed Cloud. Ele aproveita
o framework Multus-CNI e o
plug-in SRIOV-CNI.
Use uma anotação para fazer referência ao nome do recurso SriovNetworkNodePolicy apropriado. Ao criar essa anotação, faça o seguinte:
- Use a chave
k8s.v1.cni.cncf.io/resourceName. - Use o prefixo
gke.io/no valor, seguido pelo nome do recursoSriovNetworkNodePolicyde destino.
O exemplo a seguir ilustra a estrutura do recurso:
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: sriov-net1
namespace: mynamespace
annotations:
k8s.v1.cni.cncf.io/resourceName: gke.io/mlnx6_p2_sriov_en2
spec:
config: '{
"type": "sriov",
"cniVersion": "0.3.1",
"name": "sriov-network",
"ipam": {
"type": "host-local",
"subnet": "10.56.217.0/24",
"routes": [{
"dst": "0.0.0.0/0"
}],
"gateway": "10.56.217.1"
}
}'
Fazer upgrade de recursos NetworkAttachmentDefinition para o Distributed Cloud 1.4.0
A versão 1.4.0 do Distributed Cloud substitui a interface bond0 por uma nova interface chamada gdcenet0. A interface gdcenet0 permite usar a placa de interface de rede (NIC) de gerenciamento de host em cada máquina do Distributed Cloud no rack para cargas de trabalho, mantendo o tráfego de rede de gerenciamento e plano de controle do Distributed Cloud completamente separado. Para aproveitar esta
funcionalidade, conclua as etapas desta seção para reconfigurar seus
NetworkAttachmentDefinition recursos e siga as instruções em
Configurar a rede do Distributed Cloud
para provisionar as redes e sub-redes apropriadas.
Para cada cluster do Distributed Cloud em que você implantou um ou mais recursos NetworkAttachmentDefinition, as seguintes regras de migração se aplicam:
- Para cada novo recurso
NetworkAttachmentDefinition, usegdcenet0em vez debond0como o valor do campomaster. Se você aplicar um recurso que usabond0ou um valor vazio para esse campo, o Distributed Cloud vai substituir o valor porgdcenet0e, em seguida, armazenar e aplicar o recurso ao cluster. - Para cada recurso
NetworkAttachmentDefinitionatual, substituabond0porgdcenet0como o valor do campomastere reaplique o recurso ao cluster para restaurar a conectividade de rede completa aos pods afetados.
Para informações sobre como usar esse recurso, consulte
NetworkAttachmentDefinition.
Configurar uma interface secundária em um pod usando VFs SR-IOV
Depois de configurar um recurso SriovNetworkNodePolicy e um recurso NetworkAttachmentDefinition correspondente, é possível configurar uma interface de rede secundária em um pod do Distributed Cloud usando funções virtuais SR-IOV.
Para fazer isso, adicione uma anotação à definição do pod do Distributed Cloud da seguinte maneira:
- Chave:
k8s.v1.cni.cncf.io/networks - Valor:
nameSpace/<NetworkAttachmentDefinition1,nameSpace/NetworkAttachmentDefinition2...
O exemplo a seguir ilustra essa anotação:
apiVersion: v1
kind: Pod
metadata:
name: sriovpod
annotations:
k8s.v1.cni.cncf.io/networks: mynamespace/sriov-net1
spec:
containers:
- name: sleeppodsriov
command: ["sh", "-c", "trap : TERM INT; sleep infinity & wait"]
image: alpine
securityContext:
capabilities:
add:
- NET_ADMIN
Configurar uma interface secundária em um pod usando o driver MacVLAN
O Distributed Cloud também oferece suporte à criação de uma interface de rede secundária em um pod usando o driver MacVLAN. Somente a interface gdcenet0 oferece suporte a essa configuração e apenas em pods que executam cargas de trabalho em contêineres.
Para configurar uma interface para usar o driver MacVLAN:
Configure um recurso
NetworkAttachmentDefinitionconforme mostrado no exemplo a seguir:apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: macvlan-b400-1 annotations: networking.gke.io/gdce-vlan-id: 400 spec: config: '{ "type": "macvlan", "master": "gdcenet0.400", "ipam": { "type": "static", "addresses": [ { "address": "192.168.100.20/27", "gateway": "192.168.100.1" } ] ... } }'Adicione uma anotação à definição do pod do Distributed Cloud da seguinte maneira:
apiVersion: v1 kind: Pod metadata: name: macvlan-testpod1 annotations: k8s.v1.cni.cncf.io/networks: macvlan-b400-1
Configurar uma interface secundária em um pod usando várias redes do Distributed Cloud
O Distributed Cloud oferece suporte à criação de uma interface de rede secundária em um pod usando o recurso de várias redes. Para fazer isso, siga estas etapas:
Configure um recurso
Network. Exemplo:apiVersion: networking.gke.io/v1 kind: Network metadata: name: vlan200-network spec: type: L2 nodeInterfaceMatcher: interfaceName: vlan200-interface gateway4: 10.53.0.1Adicione uma anotação à definição do pod do Distributed Cloud da seguinte maneira:
apiVersion: v1 kind: Pod metadata: name: myPod annotations: networking.gke.io/interfaces: [{"interfaceName":"eth1","network":"vlan200-network"}] networking.gke.io/default-interface: eth1 ...A seguir