Configura il supporto di più reti per i pod


Questa pagina mostra come abilitare più interfacce su nodi e pod in un cluster Google Kubernetes Engine (GKE) utilizzando il supporto di più reti per i pod. Il supporto di più reti è disponibile solo per i progetti abilitati con GKE Enterprise.

Avere già familiarità con i concetti di networking generali, la terminologia e i concetti specifici di questa funzionalità e i requisiti e limitazioni per il supporto di più reti per i pod.

Per ulteriori informazioni, consulta Informazioni sul supporto di più reti per i pod.

Requisiti e limitazioni

Il supporto di più reti per i pod prevede i requisiti e le limitazioni seguenti:

Requisiti

  • GKE versione 1.28 o successive.
  • Abilita la versione Google Kubernetes Engine (GKE) Enterprise
  • Il supporto di più reti per i pod utilizza le stesse specifiche a livello di VM del NIC multiplo per Compute Engine.
  • Il supporto di più reti per i pod richiede GKE Dataplane V2.
  • Il supporto di più reti per i pod è disponibile solo per i nodi di Container-Optimized OS che eseguono la versione m101 o successive.

Limitazioni generali

  • Il supporto di più reti per i pod non funziona per i cluster abilitati per il networking a doppio stack.
  • Il VPC condiviso è supportato solo su GKE versione 1.28 o successive.
  • Il CIDR multi-pod è supportato solo su GKE versione 1.29 o successive e solo per la rete di pod predefinita.
  • Tutte le reti di pod in un singolo cluster GKE non possono avere intervalli CIDR sovrapposti.
  • Quando abiliti il supporto di più reti per i pod, non puoi aggiungere o rimuovere interfacce della rete di nodi o reti di pod dopo aver creato un pool di nodi. Per modificare queste impostazioni, devi ricreare il pool di nodi.
  • Per impostazione predefinita, l'accesso a internet non è disponibile su interfacce aggiuntive delle reti di pod all'interno del pod. Tuttavia, puoi abilitarlo manualmente con Cloud NAT.
  • Non puoi modificare il gateway predefinito all'interno di un pod con più interfacce tramite l'API. Il gateway predefinito deve essere connesso alla rete di pod predefinita.
  • La rete di pod predefinita deve essere sempre inclusa nei pod, anche se crei interfacce o reti di pod aggiuntive.
  • Non puoi configurare la funzionalità per più reti se Managed Hubble è stato configurato.
  • Per utilizzare un VPC condiviso, assicurati che sul cluster GKE sia in esecuzione la versione 1.28.4 o successiva.
  • Per i deployment di reti VPC condivise, tutte le interfacce di rete (NIC) collegate ai nodi devono appartenere allo stesso progetto del progetto host.

Limitazioni relative a DPDK (Device and Data Plane Development Kit)

  • Un NIC di VM passato in un pod come NIC di tipo Device non è disponibile per altri pod sullo stesso nodo.
  • I pod che utilizzano la modalità DPDK devono essere eseguiti in modalità con privilegi per accedere ai dispositivi VFIO.
  • In modalità DPDK, un dispositivo viene considerato come una risorsa nodo e viene collegato solo al primo container (non init) nel pod. Per suddividere più dispositivi DPDK tra container nello stesso pod, devi eseguirli in pod separati.

Limitazioni di scalabilità

GKE offre un'architettura di rete flessibile che consente di scalare il cluster. Puoi aggiungere altre reti di nodi e reti di pod al cluster. Puoi scalare il cluster come segue:

  • Puoi aggiungere fino a 7 reti di nodi aggiuntive a ogni pool di nodi GKE. Si tratta dello stesso limite di scalabilità per le VM di Compute Engine.
  • A ogni pod devono essere collegate meno di 7 reti aggiuntive.
  • Puoi configurare fino a 35 reti di pod nelle 8 reti di nodi all'interno di un singolo pool di nodi. Puoi suddividerlo in diverse combinazioni, ad esempio:
    • 7 reti di nodi con 5 reti di pod ciascuna
    • 5 reti di nodi con 7 reti di pod ciascuna
    • 1 rete di nodi con 30 reti di pod. Il limite di intervalli secondari per subnet è 30.
  • Puoi configurare fino a 50 reti di pod per cluster.
  • Puoi configurare fino a un massimo di 32 pod a più reti per nodo.
  • Puoi avere fino a 3000 nodi con più interfacce.
  • Puoi avere fino a 100.000 interfacce aggiuntive in tutti i pod.
  • Puoi configurare fino a un massimo di 1000 nodi con reti di tipo Device.
  • Puoi configurare fino a un massimo di 4 reti di tipo Device per nodo.

Prezzi

Le funzionalità Network Function Optimizer (NFO), compreso il supporto di più reti e ad alte prestazioni per i pod, sono supportate solo sui cluster che si trovano all'interno di progetti abilitati con GKE Enterprise. Per conoscere le tariffe applicate per l'abilitazione della versione Google Kubernetes Engine (GKE) Enterprise, consulta i prezzi di GKE Enterprise.

Esegui il deployment di pod su più reti

Per eseguire il deployment dei pod con più reti, segui questi passaggi:

  1. Prepara un VPC aggiuntivo, una subnet (node-network) e intervalli secondari (pod-network).
  2. Crea un cluster GKE abilitato per più reti utilizzando il comando Google Cloud CLI.
  3. Crea un nuovo pool di nodi GKE collegato alla rete di nodi e alla rete di pod aggiuntive utilizzando il comando Google Cloud CLI.
  4. Crea una rete di pod e fai riferimento al VPC, alla subnet e agli intervalli secondari corretti in oggetti multi-rete utilizzando l'API Kubernetes.
  5. Nella configurazione del carico di lavoro, fai riferimento all'oggetto Kubernetes Network preparato utilizzando l'API Kubernetes.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e quindi initialize gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Prepara un VPC aggiuntivo

Google Cloud crea una rete di pod predefinita durante la creazione del cluster associata al pool di nodi GKE utilizzato durante la creazione iniziale del cluster GKE. La rete di pod predefinita è disponibile su tutti i nodi e i pod del cluster. Per facilitare le funzionalità multi-rete all'interno del pool di nodi, devi preparare i VPC esistenti o nuovi, che supportano le reti di tipo Layer 3 e Device.

Per preparare un VPC aggiuntivo, considera i seguenti requisiti:

  • Tipo di rete Layer 3 e Netdevice:

    • Crea un intervallo secondario se utilizzi reti di tipo Layer 3.
    • Assicurati che le dimensioni del CIDR per l'intervallo secondario siano sufficientemente grandi da soddisfare il numero di nodi nel pool di nodi e il numero di pod per nodo desiderato.
    • Analogamente alla rete di pod predefinita, le altre reti di pod utilizzano l'overprovisioning degli indirizzi IP. L'intervallo di indirizzi IP secondari deve avere il doppio degli indirizzi IP per nodo rispetto al numero di pod per nodo.
  • Requisiti di rete di tipo Device: crea una subnet normale su un VPC. Non è necessaria una subnet secondaria.

Per abilitare le funzionalità multi-rete nel pool di nodi, devi preparare i VPC a cui stabilire connessioni aggiuntive. Puoi utilizzare un VPC esistente o creare un nuovo VPC specifico per il pool di nodi.

Crea una rete VPC che supporti il dispositivo di tipo Layer 3

Per creare una rete VPC che supporti il dispositivo di tipo Layer 3, segui questi passaggi:

  • Assicurati che le dimensioni del CIDR per l'intervallo secondario siano sufficientemente grandi da soddisfare il numero di nodi nel pool di nodi e il numero di pod per nodo desiderato.
  • Analogamente alla rete di pod predefinita, le altre reti di pod utilizzano l'overprovisioning degli indirizzi IP. L'intervallo di indirizzi IP secondari deve avere il doppio di indirizzi IP per nodo rispetto al numero di pod per nodo.

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>

Sostituisci quanto segue:

  • SUBNET_NAME: il nome della subnet.
  • PROJECT_ID: l'ID del progetto che contiene la rete VPC in cui viene creata la subnet.
  • SUBNET_RANGE: l'intervallo di indirizzi IPv4 principale per la nuova subnet, in notazione CIDR.
  • NETWORK_NAME: il nome della rete VPC che contiene la nuova subnet.
  • REGION: la regione Google Cloud in cui è creata la nuova subnet.
  • SECONDARY_RANGE_NAME: il nome dell'intervallo secondario.
  • SECONDARY_IP_RANGE l'intervallo di indirizzi IPv4 secondari nella notazione CIDR.

Console

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

  2. Fai clic su Crea rete VPC.

  3. Nel campo Nome, inserisci il nome della rete. Ad esempio, l3-vpc.

  4. Dal menu a discesa Unità massima di trasmissione (MTU), scegli il valore MTU appropriato.

  5. Nella sezione Modalità creazione subnet, scegli Personalizzata.

  6. Fai clic su AGGIUNGI SUBNET.

  7. Nella sezione Nuova subnet, specifica i seguenti parametri di configurazione per una subnet:

    1. Specifica un nome. Ad esempio, l3-subnet.

    2. Seleziona una Regione.

    3. Inserisci un intervallo di indirizzi IP. Questo è l'intervallo IPv4 principale per la subnet.

      Se selezioni un intervallo che non è un indirizzo RFC 1918, verifica che l'intervallo non sia in conflitto con una configurazione esistente. Per ulteriori informazioni, consulta Intervalli di subnet IPv4.

    4. Per definire un intervallo secondario per la subnet, fai clic su Crea intervallo di indirizzi IP secondario.

      Se selezioni un intervallo che non è un indirizzo RFC 1918, verifica che l'intervallo non sia in conflitto con una configurazione esistente. Per ulteriori informazioni, consulta Intervalli di subnet IPv4.

    5. Accesso privato Google: puoi abilitare l'accesso privato Google per la subnet quando la crei o in un secondo momento modificandola.

    6. Log di flusso: puoi abilitare i log di flusso VPC per la subnet quando la crei o in un secondo momento modificandola.

    7. Fai clic su Fine.

  8. Nella sezione Regole firewall, in Regole firewall IPv4, seleziona zero o più regole firewall predefinite.

    Le regole riguardano casi d'uso comuni per la connettività alle istanze. Puoi creare le tue regole firewall dopo aver creato la rete. Ogni nome di regola predefinita inizia con il nome della rete VPC che stai creando.

  9. In Regole firewall IPv4, per modificare la regola firewall in entrata predefinita denominata allow-custom, fai clic su MODIFICA.

    Puoi modificare le subnet, aggiungere ulteriori intervalli IPv4 e specificare protocolli e porte.

    La regola firewall allow-custom non viene aggiornata automaticamente se aggiungi altre subnet in un secondo momento. Se hai bisogno di regole firewall per le nuove subnet, devi aggiornare la configurazione del firewall per aggiungerle.

  10. Nella sezione Modalità di routing dinamico, per la rete VPC. Per ulteriori informazioni, vedi modalità di routing dinamico. Puoi modificare la modalità di routing dinamico in un secondo momento.

  11. Fai clic su Crea.

Crea una rete VPC che supporti i dispositivi di tipo Netdevice o 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>

Sostituisci quanto segue:

  • SUBNET_NAME: il nome della subnet.
  • PROJECT_ID: l'ID del progetto che contiene la rete VPC in cui viene creata la subnet.
  • SUBNET_RANGE: l'intervallo di indirizzi IPv4 principale per la nuova subnet, in notazione CIDR.
  • NETWORK_NAME: il nome della rete VPC che contiene la nuova subnet.
  • REGION: la regione Google Cloud in cui è creata la nuova subnet.
  • SECONDARY_RANGE_NAME: il nome dell'intervallo secondario.
  • SECONDARY_IP_RANGE l'intervallo di indirizzi IPv4 secondari nella notazione CIDR.

Console

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

  2. Fai clic su Crea rete VPC.

  3. Nel campo Nome, inserisci il nome della rete. Ad esempio, netdevice-vpc o dpdk-vpc.

  4. Dal menu a discesa Unità massima di trasmissione (MTU), scegli il valore MTU appropriato.

  5. Nella sezione Modalità creazione subnet, scegli Personalizzata.

  6. Nella sezione Nuova subnet, specifica i seguenti parametri di configurazione per una subnet:

    1. Specifica un nome. Ad esempio, netdevice-subnet o dpdk-vpc.

    2. Seleziona una Regione.

    3. Inserisci un intervallo di indirizzi IP. Questo è l'intervallo IPv4 principale per la subnet.

      Se selezioni un intervallo che non è un indirizzo RFC 1918, verifica che l'intervallo non sia in conflitto con una configurazione esistente. Per ulteriori informazioni, consulta Intervalli di subnet IPv4.

    4. Accesso privato Google: scegli se abilitare l'accesso privato Google per la subnet al momento della creazione o in un secondo momento modificandola.

    5. Log di flusso: puoi abilitare i log di flusso VPC per la subnet quando la crei o in un secondo momento modificandola.

    6. Fai clic su Fine.

  7. Nella sezione Regole firewall, in Regole firewall IPv4, seleziona zero o più regole firewall predefinite.

    Le regole riguardano casi d'uso comuni per la connettività alle istanze. Puoi creare le tue regole firewall dopo aver creato la rete. Ogni nome di regola predefinita inizia con il nome della rete VPC che stai creando.

  8. In Regole firewall IPv4, per modificare la regola firewall in entrata predefinita denominata allow-custom, fai clic su MODIFICA.

    Puoi modificare le subnet, aggiungere ulteriori intervalli IPv4 e specificare protocolli e porte.

    La regola firewall allow-custom non viene aggiornata automaticamente se aggiungi altre subnet in un secondo momento. Se hai bisogno di regole firewall per le nuove subnet, devi aggiornare la configurazione del firewall per aggiungerle.

  9. Nella sezione Modalità di routing dinamico, per la rete VPC. Per ulteriori informazioni, vedi modalità di routing dinamico. Puoi modificare la modalità di routing dinamico in un secondo momento.

  10. Fai clic su Crea.

Crea un cluster GKE con funzionalità di più reti

gcloud

Per creare un cluster GKE con funzionalità di più reti:

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

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • CLUSTER_VERSION: la versione del cluster.

Questo comando include i seguenti flag:

  • --enable-multi-networking: abilita le definizioni di risorse personalizzate (CRD) con networking multiplo nel server API per questo cluster ed esegue il deployment di un network-controller-manager che contiene la riconciliazione e la gestione del ciclo di vita per gli oggetti su più reti.
  • --enable-dataplane-v2: abilita GKE Dataplane V2. Questo flag è obbligatorio per abilitare più reti.

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Fai clic su Crea.

  3. Configura il cluster Standard. Per ulteriori informazioni, consulta Creare un cluster a livello di zona o Creare un cluster a livello di regione. Durante la creazione del cluster, seleziona la subnet di rete e quella del nodo appropriata.

  4. Nel riquadro di navigazione, in Cluster, fai clic su Networking.

  5. Seleziona la casella di controllo Abilita Dataplane V2.

  6. Seleziona Attiva reti multiple.

  7. Fai clic su Crea.

L'abilitazione del networking multiplo per un cluster aggiunge le CustomResourceDefinitions (CRD) necessarie al server API per quel cluster. Esegue anche il deployment di un network-controller-manager, responsabile della riconciliazione e della gestione degli oggetti su più reti. Non puoi modificare la configurazione del cluster dopo averla creata.

Crea un pool di nodi GKE connesso a VPC aggiuntivi

Crea un pool di nodi che include i nodi connessi alla rete di nodi (VPC e subnet) e alla rete di pod (intervallo secondario) creati in Crea rete di pod.

Per creare il nuovo pool di nodi e associarlo alle reti aggiuntive nel cluster 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

Sostituisci quanto segue:

  • POOL_NAME con il nome del nuovo pool di nodi.
  • CLUSTER_NAME con il nome del cluster esistente a cui stai aggiungendo il pool di nodi.
  • NETWORK_NAME con il nome della rete per collegare i nodi del pool di nodi.
  • SUBNET_NAME con il nome della subnet all'interno della rete da utilizzare per i nodi.
  • POD_IP_RANGE l'intervallo di indirizzi IP del pod all'interno della subnet.
  • NUMBER_OF_PODS numero massimo di pod per nodo.

Questo comando contiene i seguenti flag:

  • --additional-node-network: definisce i dettagli dell'interfaccia di rete, della rete e della subnet aggiuntive. Viene utilizzato per specificare le reti di nodi per la connessione ai nodi del pool di nodi. Specifica questo parametro quando vuoi connetterti a un altro VPC. Se non specifichi questo parametro, viene utilizzato il VPC predefinito associato al cluster. Per le reti di tipo Layer 3, specifica il flag additional-pod-network che definisce la rete di pod, esposta all'interno del cluster GKE come oggetto Network. Quando utilizzi il flag --additional-node-network, devi fornire una rete e una subnet come parametri obbligatori. Assicurati di separare i valori di rete e subnet con una virgola ed evita di usare spazi.
  • --additional-pod-network: specifica i dettagli dell'intervallo secondario da utilizzare per la rete di pod. Questo parametro non è obbligatorio se utilizzi una rete di tipo Device. Questo argomento specifica i seguenti valori chiave: subnetwork, pod-ipv4-range e max-pods-per-node. Quando utilizzi --additional-pod-network, devi fornire i valori pod-ipv4-range e max-pods-per-node, separati da virgole e senza spazi.
    • subnetwork: collega la rete di nodi alla rete di pod. La subnet è facoltativa. Se non la specifichi, la rete di pod aggiuntiva viene associata alla subnet predefinita fornita durante la creazione del cluster.
    • --max-pods-per-node: il valore max-pods-per-node deve essere specificato e deve avere una potenza di 2. Il valore minimo è 4. max-pods-per-node non deve essere superiore al valore max-pods-per-node nel pool di nodi.

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nel riquadro di navigazione, fai clic su Cluster.

  3. Nella sezione Cluster Kubernetes, fai clic sul cluster che hai creato.

  4. Nella parte superiore della pagina, per creare il tuo pool di nodi, fai clic su Aggiungi pool di nodi.

  5. Nella sezione Dettagli del pool di nodi, completa quanto segue:

    1. Inserisci un Nome per il pool di nodi.
    2. Inserisci il Numero di nodi da creare nel pool di nodi.
  6. Nel riquadro di navigazione, in Pool di nodi, fai clic su Nodi.

    1. Dall'elenco a discesa Tipo di immagine, seleziona l'immagine del nodo Container-Optimized OS con containerd (cos_containerd).

  7. Quando crei una VM, selezioni un tipo di macchina da una famiglia di macchine che determina le risorse disponibili per quella VM. Ad esempio, un tipo di macchina come e2-standard-4 contiene 4 vCPU, quindi può supportare fino a 4 VPC in totale. È possibile scegliere tra diverse famiglie di macchine e ciascuna famiglia di macchine è ulteriormente organizzata in serie di macchine e tipi di macchine predefinite o personalizzate all'interno di ogni serie. Ogni tipo di macchina viene fatturato in modo diverso. Per ulteriori informazioni, consulta il listino prezzi dei tipi di macchina.

  8. Dal riquadro di navigazione, seleziona Networking.

  9. Nella sezione Networking di nodi, specifica il numero massimo di pod per nodo. La sezione Reti di nodi mostra la rete VPC utilizzata per creare il cluster. È necessario designare reti di nodi aggiuntive correlate alle reti VPC e ai tipi di dispositivi precedentemente definiti.

  10. Crea associazione del pool di nodi:

    1. Per il dispositivo di tipo Layer 3:
      1. Nella sezione Reti di nodi, fai clic su AGGIUNGI UNA RETE DI NODI.
      2. Dall'elenco a discesa di rete, seleziona il VPC che supporta un dispositivo di tipo Livello 3.
      3. Seleziona la subnet creata per il VPC Layer 3.
      4. Nella sezione Intervalli di indirizzi IP del pod alias, fai clic su Aggiungi intervallo di indirizzi IP del pod.
      5. Seleziona la Subnet secondaria e indica il Numero massimo di pod per nodo.
      6. Seleziona Done (Fine).
    2. Per i dispositivi di tipo Netdevice e DPDK:
      1. Nella sezione Reti di nodi, fai clic su AGGIUNGI UNA RETE DI NODI.
      2. Dall'elenco a discesa di rete, seleziona il VPC che supporta i dispositivi di tipo Netdevice o DPDK.
      3. Seleziona la subnet creata per il VPC Netdevice o DPDK.
      4. Seleziona Done (Fine).
  11. Fai clic su Crea.

Note:

  • Se all'interno della stessa rete di nodi vengono specificate più reti di pod aggiuntive, queste devono trovarsi nella stessa subnet.
  • Non puoi fare riferimento più volte allo stesso intervallo secondario di una subnet.

Esempio L'esempio seguente crea un pool di nodi denominato pool-multi-net che collega due reti aggiuntive ai nodi: Datapalane (rete di tipo Layer 3) e ad alte prestazioni (rete di tipo netdevice). Questo esempio presuppone che tu abbia già creato un cluster GKE denominato cluster-1:

gcloud container node-pools create pool-multi-net \
  --project my-project \
  --cluster cluster-1 \
  --zone 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

Per specificare interfacce aggiuntive per la rete di nodi e la rete di pod, definisci i parametri --additional-node-network e --additional-pod-network più volte, come illustrato nell'esempio seguente:

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

Specifica altre reti di pod direttamente nell'interfaccia VPC principale del pool di nodi, come mostrato nell'esempio seguente:

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

Crea rete di pod

Definisci le reti di pod a cui i pod accederanno definendo gli oggetti Kubernetes e collegandoli alle risorse Compute Engine corrispondenti, come VPC, subnet e intervalli secondari.

Per creare una rete di pod, devi definire gli oggetti CRD di rete nel cluster.

Configura la rete VPC Layer 3

YAML

Per il VPC Layer 3, crea gli oggetti Network e GKENetworkParamSet:

  1. Salva il seguente manifest di esempio come 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"
    

    Il manifest definisce una risorsa Network denominata blue-network di tipo Layer 3. L'oggetto Network fa riferimento all'oggetto GKENetworkParamSet denominato l3-vpc, che associa una rete alle risorse Compute Engine.

  2. Applica il manifest al cluster:

    kubectl apply -f blue-network.yaml
    
  3. Salva il seguente manifest come dataplane.yaml :

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

    Questo manifest definisce l'oggetto GKENetworkParamSet denominato dataplane, imposta il nome VPC su dataplane, il nome della subnet come subnet-dp e l'intervallo di indirizzi IPv4 secondario per i pod denominato sec-range-blue.

  4. Applica il manifest al cluster:

    kubectl apply -f dataplane.yaml
    

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Dal riquadro di navigazione, fai clic su Network Function Optimizer (Ottimizzatore delle funzioni di rete).

  3. Fai clic su Abilita GKE Enterprise.

  4. Nella parte superiore della pagina, fai clic su Crea per creare la tua rete di pod.

  5. Nella sezione Prima di iniziare, verifica i dettagli.

  6. Fai clic su SUCCESSIVO: POSIZIONE RETE POD.

  7. Nella sezione Località della rete dei pod, dall'elenco a discesa Cluster, seleziona il cluster GKE con networking multiplo e GKE Dataplane V2 abilitati.

  8. Fai clic su SUCCESSIVO: RIFERIMENTO DELLA RETE VPC.

  9. Nella sezione Riferimento rete VPC, dal menu a discesa Riferimento rete VPC, seleziona la rete VPC utilizzata per Layer 3 pod multinic.

  10. Fai clic su SUCCESSIVO: TIPO DI RETE POD.

  11. Nella sezione Tipo di rete di pod, seleziona L3 e inserisci il Nome rete di pod.

  12. Fai clic su SUCCESSIVO: INTERVALLO SECONDARIO DELLA RETE POD.

  13. Nella sezione Intervallo secondario della rete di pod, inserisci l'Intervallo secondario.

  14. Fai clic su SUCCESSIVO: ROUTE DI RETE POD.

  15. Nella sezione Route della rete di pod, seleziona AGGIUNGI ROUTE per definire le route personalizzate.

  16. Fai clic su CREA RETE POD.

Configura rete DPDK

YAML

Per il VPC DPDK, crea oggetti Network e GKENetworkParamSet.

  1. Salva il seguente manifest di esempio come 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"
    

    Questo manifest definisce una risorsa Network denominata dpdk-network con un tipo di Device. La risorsa Network fa riferimento a un oggetto GKENetworkParamSet chiamato dpdk per la sua configurazione.

  2. Applica il manifest al cluster:

    kubectl apply -f dpdk-network.yaml
    
  3. Per l'oggetto GKENetworkParamSet, salva il seguente manifest come dpdk.yaml:

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

    Questo manifest definisce l'oggetto GKENetworkParamSet denominato dpdk, imposta il nome VPC come dpdk, il nome della subnet come subnet-dpdk e il nome deviceMode come DPDK-VFIO.

  4. Applica il manifest al cluster:

    kubectl apply -f dpdk-network.yaml
    

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Dal riquadro di navigazione, fai clic su Network Function Optimizer (Ottimizzatore delle funzioni di rete).

  3. Nella parte superiore della pagina, fai clic su Crea per creare la tua rete di pod.

  4. Nella sezione Prima di iniziare, verifica i dettagli.

  5. Fai clic su SUCCESSIVO: POSIZIONE RETE POD.

  6. Nella sezione Località della rete dei pod, dall'elenco a discesa Cluster, seleziona il cluster GKE con networking multiplo e GKE Dataplane V2 abilitati.

  7. Fai clic su SUCCESSIVO: RIFERIMENTO DELLA RETE VPC.

  8. Nella sezione Riferimento rete VPC, dal menu a discesa Riferimento di rete VPC, seleziona la rete VPC utilizzata per i pod dpdk multinic.

  9. Fai clic su SUCCESSIVO: TIPO DI RETE POD.

  10. Nella sezione Tipo di rete di pod, seleziona DPDK-VFIO (dispositivo) e inserisci il Nome rete di pod.

  11. Fai clic su SUCCESSIVO: INTERVALLO SECONDARIO DELLA RETE POD. La sezione dell'intervallo secondario della rete di pod non sarà disponibile

  12. Fai clic su SUCCESSIVO: ROUTE DI RETE POD. Nella sezione Route della rete di pod, seleziona AGGIUNGI ROUTE per definire route personalizzate

  13. Fai clic su CREA RETE POD.

Configura rete netdevice

Per il VPC netdevice, crea gli oggetti Network e GKENetworkParamSet.

YAML

  1. Salva il seguente manifest di esempio come 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"
    

    Questo manifest definisce una risorsa Network denominata netdevice-network con un tipo di Device. Fa riferimento all'oggetto GKENetworkParamSet denominato netdevice.

  2. Applica il manifest al cluster:

    kubectl apply -f netdevice-network.yaml
    
  3. Salva il seguente manifest come netdevice.yaml :

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

    Questo manifest definisce una risorsa GKENetworkParamSet denominata netdevice, imposta il nome VPC come netdevice, il nome della subnet come subnet-netdevice e specifica la modalità dispositivo come NetDevice.

  4. Applica il manifest al cluster:

    kubectl apply -f netdevice.yaml
    

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Dal riquadro di navigazione, fai clic su Network Function Optimizer (Ottimizzatore delle funzioni di rete).

  3. Nella parte superiore della pagina, fai clic su Crea per creare la tua rete di pod.

  4. Nella sezione Prima di iniziare, verifica i dettagli.

  5. Fai clic su SUCCESSIVO: POSIZIONE RETE POD.

  6. Nella sezione Località della rete dei pod, dall'elenco a discesa Cluster, seleziona il cluster GKE con networking multiplo e GKE Dataplane V2 abilitati.

  7. Fai clic su SUCCESSIVO: RIFERIMENTO DELLA RETE VPC.

  8. Nella sezione Riferimento rete VPC, dal menu a discesa Riferimento di rete VPC, seleziona la rete VPC utilizzata per i pod multinic netdevice.

  9. Fai clic su SUCCESSIVO: TIPO DI RETE POD.

  10. Nella sezione Tipo di rete di pod, seleziona NetDevice (Device) e inserisci il Nome rete di pod.

  11. Fai clic su SUCCESSIVO: INTERVALLO SECONDARIO DELLA RETE POD. La sezione dell'intervallo secondario della rete di pod non sarà disponibile

  12. Fai clic su SUCCESSIVO: ROUTE DI RETE POD. Nella sezione Route della rete di pod, seleziona AGGIUNGI ROUTE per definire route personalizzate.

  13. Fai clic su CREA RETE POD.

Configurazione delle route di rete

La configurazione della route di rete consente di definire route personalizzate per una rete specifica, che vengono configurate sui pod per indirizzare il traffico all'interfaccia corrispondente all'interno del pod.

YAML

  1. Salva il seguente manifest come 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"
    

    Questo manifest definisce una risorsa di rete denominata red-network con un tipo di Layer 3 e una route personalizzata "10.0.2.0/28" tramite l'interfaccia di rete.

  2. Applica il manifest al cluster:

    kubectl apply -f red-network.yaml
    

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Fai clic su Crea.

  3. Dal riquadro di navigazione, fai clic su Network Function Optimizer (Ottimizzatore delle funzioni di rete).

  4. Nella sezione Cluster Kubernetes, fai clic sul cluster che hai creato.

  5. Nella parte superiore della pagina, fai clic su Crea per creare la tua rete di pod.

  6. Nella sezione Route della rete di pod, definisci le route personalizzate.

  7. Fai clic su CREA RETE POD.

Fai riferimento al Network preparato

Nella configurazione del carico di lavoro, fai riferimento all'oggetto Kubernetes Network preparato utilizzando l'API Kubernetes.

Connetti il pod a reti specifiche

Per connettere i pod alle reti specificate, devi includere i nomi degli oggetti Network come annotazioni all'interno della configurazione del pod. Per stabilire le connessioni, assicurati di includere nelle annotazioni sia Network di default sia le reti aggiuntive selezionate.

  1. Salva il seguente manifest di esempio come 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":"l3-network"}
          ]
    spec:
      containers:
      - name: sample-l3-pod
        image: busybox
        command: ["sleep", "10m"]
        ports:
        - containerPort: 80
      restartPolicy: Always
    

    Questo manifest crea un pod denominato sample-l3-pod con due interfacce di rete, eth0 e eth1, associate rispettivamente alle reti default e blue-network.

  2. Applica il manifest al cluster:

    kubectl apply -f sample-l3-pod.yaml
    

Connetti il pod a più reti

  1. Salva il seguente manifest di esempio come 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":"l3-network"},
            {"interfaceName":"eth2","network":"netdevice-network"}
          ]
    spec:
      containers:
      - name: sample-l3-netdevice-pod
        image: busybox
        command: ["sleep", "10m"]
        ports:
        - containerPort: 80
      restartPolicy: Always
    

    Questo manifest crea un pod denominato sample-l3-netdevice-pod con tre interfacce di rete, eth0, eth1 e eth2 associate, rispettivamente, alle reti default, l3-network e netdevice.

  2. Applica il manifest al cluster:

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

Puoi utilizzare la stessa annotazione in qualsiasi ReplicaSet (Deployment o DaemonSet) nella sezione di annotazioni del modello.

Quando crei un pod con una specifica per più reti, i componenti del piano dati generano automaticamente la configurazione delle interfacce del pod e la salvano nelle RP NetworkInterface. Crea una RP NetworkInterface per ogni elemento Network non predefinito specificato nella specifica del pod.

Ad esempio, il seguente file manifest mostra i dettagli di un file manifest NetworkInterface:

apiVersion: v1
items:
-   apiVersion: networking.gke.io/v1
  kind: NetworkInterface
  metadata:
    labels:
      podName: samplepod
    name: "samplepod-c0b60cbe"
    namespace: default
  spec:
    networkName: "blue-network"
  status:
    gateway4: 172.16.1.1
    ipAddresses:
    -   172.16.1.2/32
    macAddress: 82:89:96:0b:92:54
    podName: samplepod

Questo manifest include il nome della rete, l'indirizzo del gateway, gli indirizzi IP assegnati, l'indirizzo MAC e il nome del pod.

Configurazione di esempio di un pod con più interfacce:

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

Verifica

  • Assicurati di creare cluster con --enable-multi-networking solo se --enable-dataplane-v2 è abilitato.
  • Verifica che tutti i pool di nodi nel cluster eseguano immagini di Container-Optimized OS al momento della creazione del cluster e del pool di nodi.
  • Verifica che i pool di nodi vengano creati con --additional-node-network o --additional-pod-network solo se il networking multiplo è abilitato sul cluster.
  • Assicurati che la stessa subnet non sia specificata due volte come argomento --additional-node-network in un pool di nodi.
  • Verifica che non sia specificato lo stesso intervallo secondario come argomento --additional-pod-network in un pool di nodi.
  • Segui i limiti di scalabilità specificati per gli oggetti di rete, considerando il numero massimo di nodi, pod e indirizzi IP consentito.
  • Verifica che sia presente un solo oggetto GKENetworkParamSet che fa riferimento a una determinata subnet e a un intervallo secondario.
  • Verifica che ciascun oggetto di rete faccia riferimento a un oggetto GKENetworkParamSet diverso.
  • Verifica che l'oggetto di rete, se viene creato con una subnet specifica con la rete Device, non venga utilizzato sullo stesso nodo con un'altra rete con un intervallo secondario. Puoi convalidare questa impostazione solo in fase di runtime.
  • Verifica che i vari intervalli secondari assegnati ai pool di nodi non abbiano indirizzi IP sovrapposti.

Risolvi i problemi dei parametri di networking multiplo in GKE

Quando crei un cluster e un pool di nodi, Google Cloud implementa alcuni controlli per garantire che siano consentiti solo parametri di networking multiplo validi. Ciò garantisce che la rete sia configurata correttamente per il cluster.

Se non riesci a creare carichi di lavoro su più reti, puoi controllare lo stato e gli eventi del pod per ulteriori informazioni:

kubectl describe pods samplepod

L'output è simile al seguente:

Name:         samplepod
Namespace:    default
Status:       Running
IP:           192.168.6.130
IPs:
  IP:  192.168.6.130
...
Events:
  Type     Reason                  Age   From               Message
  ----     ------                  ----  ----               -------
  Normal   Scheduled               26m   default-scheduler  Successfully assigned default/samplepod to node-n1-04
  Warning  FailedCreatePodSandBox  26m   kubelet            Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "e16c58a443ab70d671159509e36894b57493300ea21b6c24c14bdc412b0fdbe6": Unable to create endpoint: [PUT /endpoint/{id}][400] putEndpointIdInvalid  failed getting interface and network CR for pod "default/samplepod": failed creating interface CR default/samplepod-c0b60cbe: admission webhook "vnetworkinterface.networking.gke.io" denied the request: NetworkInterface.networking.gke.io "samplepod-c0b60cbe" is invalid: Spec.NetworkName: Internal error: failed to get the referenced network "sample-network": Network.networking.gke.io "sample-network" not found
...

Di seguito sono riportati i motivi generali dell'errore di creazione del pod:

  • Impossibile pianificare il pod a causa di requisiti delle risorse di networking multiplo non soddisfatti
  • Impossibile identificare le reti specificate
  • Impossibile configurare e creare l'oggetto dell'interfaccia di rete per il pod

Per verificare se Google Cloud ha creato gli oggetti NetworkInterface nel server API, esegui questo comando:

kubectl get networkinterfaces.networking.gke.io -l podName=samplepod

Risolvi i problemi relativi alla creazione di reti Kubernetes

Dopo aver creato correttamente una rete, i nodi che devono avere accesso alla rete configurata vengono annotati con un'annotazione dello stato della rete.

Per osservare le annotazioni, esegui questo comando:

kubectl describe node NODE_NAME

Sostituisci NODE_NAME con il nome del nodo.

L'output è simile al seguente:

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

L'output elenca ogni rete disponibile sul nodo. Se sul nodo non è visualizzato lo stato della rete previsto:

Verifica se il nodo può accedere alla rete

Se la rete non viene visualizzata nell'annotazione relativa allo stato della rete del nodo:

  1. Verifica che il nodo faccia parte di un pool configurato per il networking multiplo.
  2. Controlla le interfacce del nodo per vedere se dispone di un'interfaccia per la rete che stai configurando.
  3. Se un nodo non è nello stato di rete e ha una sola interfaccia di rete, devi comunque creare un pool di nodi con il networking multiplo abilitato.
  4. Se il nodo contiene l'interfaccia per la rete che stai configurando, ma non è presente nell'annotazione dello stato della rete, controlla le risorse Network e GKENetworkParamSet (GNP).

Controlla le risorse Network e GKENetworkParamSet

Lo stato delle risorse Network e GKENetworkParamSet (GNP) include un campo delle condizioni per segnalare gli errori di configurazione. Ti consigliamo di controllare prima la piattaforma GNP, poiché non si basa su un'altra risorsa per essere valida.

Per esaminare il campo delle condizioni, esegui questo comando:

kubectl get gkenetworkparamsets GNP_NAME -o yaml

Sostituisci GNP_NAME con il nome della risorsa GKENetworkParamSet.

Quando la condizione Ready è uguale a true, la configurazione è valida e l'output è simile al seguente:

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 la condizione Ready è uguale a false, l'output mostra il motivo ed è simile al seguente:

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 viene visualizzato un messaggio simile, assicurati che GNP sia stato configurato correttamente. Se lo è, assicurati che la configurazione della rete Google Cloud sia corretta. Dopo aver aggiornato la configurazione di rete di Google Cloud, potresti dover ricreare la risorsa GNP per attivare manualmente una risincronizzazione. Ciò per evitare il polling continuo dell'API Google Cloud.

Quando GNP è pronto, controlla la risorsa Network.

kubectl get networks NETWORK_NAME -o yaml

Sostituisci NETWORK_NAME con il nome della risorsa Network.

L'output di una configurazione valida è simile al seguente:

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 che la risorsa di rete è configurata correttamente. reason: NetworkReady non implica che la risorsa di rete sia necessariamente disponibile su un nodo specifico o sia in uso attivamente.
  • In caso di errori di configurazione o di configurazione, il campo reason della condizione specifica la causa esatta del problema. In questi casi, modifica la configurazione di conseguenza.
  • GKE compila il campo ParamsReady, se il campo parameterRef è impostato su una risorsa GKENetworkParamSet esistente nel cluster. Se hai specificato un parametro parameterRef di tipo GKENetworkParamSet e la condizione non viene visualizzata, assicurati che nome, tipo e gruppo corrispondano alla risorsa GNP esistente nel cluster.

Passaggi successivi