Pod con più schede di interfaccia di rete in Servizio Azure Kubernetes (AKS) (anteprima)

Usando il supporto di pod con più schede di interfaccia di rete in Servizio Azure Kubernetes (AKS), è possibile collegare una o più interfacce di rete secondarie ai pod in esecuzione nel cluster, insieme all'interfaccia primaria assegnata da CNI standard. Questa funzionalità usa Kubernetes Dynamic Resource Allocation (DRA) e un driver di rete DRAnet gestito, che individua e inserisce automaticamente le schede di interfaccia di rete secondarie nei pod in fase di esecuzione.

Importante

Le funzionalità in anteprima di AKS sono disponibili in modalità self-service, su base volontaria. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime di AKS sono coperte solo parzialmente dall'assistenza clienti nei limiti del possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

Overview

Per impostazione predefinita, ogni pod in un cluster AKS riceve una singola interfaccia di rete (eth0) gestita dal plug-in Azure CNI. Sebbene questa interfaccia sia sufficiente per la maggior parte dei carichi di lavoro, alcuni scenari richiedono che i pod abbiano più interfacce di rete connesse a subnet o reti virtuali diverse.

Il supporto dei pod Multi-NIC risolve questi scenari consentendo di:

  • Effettuare il provisioning dei pool di nodi del servizio Azure Kubernetes con interfacce di rete secondarie collegate a ogni nodo.
  • Usare un driver DRANET di AKS per individuare automaticamente le NIC secondarie in ogni nodo.
  • Inserire queste interfacce secondarie nei pod al momento della pianificazione tramite claim di risorse.

Importante

Le schede di interfaccia di rete secondarie con indirizzi IP pubblici aggirano Azure Load Balancer e SNAT, quindi espongono i carichi di lavoro direttamente a Internet. Il servizio Azure Kubernetes non fornisce un livello di protezione predefinito per questo traffico. È necessario configurare e gestire le regole NSG e del firewall appropriate per limitare l'accesso in ingresso e in uscita.

Funzionamento

Il supporto dei pod con più schede di interfaccia di rete in AKS si basa su tre componenti chiave che interagiscono tra loro:

1. Configurazione delle interfacce di rete secondarie

Quando si crea o si aggiorna un pool di nodi, specificare una o più interfacce di rete secondarie nel profilo di rete del pool di nodi. Il servizio Azure Kubernetes effettua il provisioning dei nodi con queste schede di interfaccia di rete aggiuntive collegate e ogni scheda di interfaccia di rete si connette alla subnet specificata.

"networkProfile": {
    "secondaryNetworkInterfaces": [
        {
            "type": "Standard",
            "vnetSubnetId": "<subnet-resource-id>"
        }
    ]
}

2. Allocazione dinamica delle risorse (DRA)

L'allocazione dinamica delle risorse (DRA) è una funzionalità Kubernetes (GA in Kubernetes 1.34) che fornisce un framework per richiedere e gestire l'accesso alle risorse hardware. Nel contesto multi-NIC DRA gestisce il ciclo di vita delle interfacce di rete secondarie come dispositivi allocabili.

Si utilizzano le seguenti risorse DRA:

  • DeviceClass : definisce una classe di dispositivi (schede di interfaccia di rete secondarie) pubblicati dal driver DRAnet, con selettori per filtrare i dispositivi corrispondenti.
  • ResourceClaimTemplate : modello a cui fanno riferimento i pod per richiedere un numero specifico di schede di interfaccia di rete da una determinata classe di dispositivo.

3. Driver di rete DRAnet gestito

Il driver di rete DRAnet viene eseguito come DaemonSet in ogni nodo. IT:

  • Individua tutte le interfacce di rete nel nodo.
  • Pubblica le schede di interfaccia di rete secondarie disponibili come risorse del dispositivo DRA.
  • Gestisce il collegamento e lo scollegamento delle NIC dagli spazi dei nomi di rete dei pod al momento della pianificazione dei pod.

Flusso end-to-end

sequenceDiagram
    participant User
    participant AKS as AKS Control Plane
    participant Node as AKS Node
    participant DRAnet as DRAnet Driver
    participant Scheduler as K8s Scheduler
    participant Pod

    User->>AKS: Create node pool with secondary NICs
    AKS->>Node: Provision node with primary + secondary NICs
    DRAnet->>Node: Discover available NICs
    DRAnet->>Scheduler: Publish NIC devices via DRA
    User->>Scheduler: Deploy pod with ResourceClaim
    Scheduler->>DRAnet: Allocate NIC to pod
    DRAnet->>Pod: Inject secondary NIC into pod namespace
    Pod->>Pod: Pod runs with eth0 + secondary NIC(s)

Limitations

  • Versione di Kubernetes — Richiede Kubernetes 1.34 o versione successiva (per il supporto DRA GA).
  • Ambito della rete virtuale : tutte le schede di interfaccia di rete secondarie devono connettersi alla stessa rete virtuale della scheda di interfaccia di rete primaria. È possibile collegarli a subnet diverse all'interno di tale rete virtuale.
  • Assegnazione NIC : ogni scheda di interfaccia di rete secondaria può essere assegnata a un solo pod. Non è possibile condividere una scheda di interfaccia di rete secondaria tra più pod.
  • DRANET supporta solo i pool di nodi Linux. I pool di nodi Windows non sono supportati.
  • I criteri di rete vengono applicati solo sulla scheda di interfaccia di rete primaria. Il traffico che passa attraverso le NIC secondarie ignora l'applicazione dei criteri di rete di AKS.
  • Dimensioni della macchina virtuale : le dimensioni della macchina virtuale del pool di nodi devono supportare il numero totale di interfacce di rete (primaria e secondaria). Per verificare il numero massimo di interfacce di rete supportate e funzionalità di rete accelerata, vedere la documentazione sulle dimensioni delle macchine virtuali Azure o usare il az vm list-skus comando . Ecco un esempio:
az vm list-skus \
  --location eastus \
  --resource-type virtualMachines \
  --all \
  --query "[?name=='Standard_D8s_v5'].{
      SKU:name,
      MaxNICs:capabilities[?name=='MaxNetworkInterfaces']|[0].value,
      AcceleratedNetworking:capabilities[?name=='AcceleratedNetworkingEnabled']|[0].value
  }" \
  -o table

Passaggi successivi