Usare un plug-in CNI (Container Network Interface) personalizzato con il servizio Azure Kubernetes (AKS)

Kubernetes non offre un sistema di interfaccia di rete per impostazione predefinita. Questa funzionalità è invece fornita dai plug-in di rete. Il servizio Azure Kubernetes (AKS) offre diversi plug-in CNI supportati. Per informazioni sui plug-in supportati, vedere i concetti di rete del servizio Azure Kubernetes.

I plug-in supportati soddisfano la maggior parte delle esigenze di rete in Kubernetes. Tuttavia, gli utenti avanzati del servizio Azure Kubernetes potrebbero volere lo stesso plug-in CNI usato negli ambienti Kubernetes locali o usare funzionalità avanzate disponibili in altri plug-in CNI.

Questo articolo illustra come distribuire un cluster del servizio Azure Kubernetes senza plug-in CNI preinstallati. Da qui, è possibile installare qualsiasi plug-in CNI di terze parti che funziona in Azure.

Supporto tecnico

Il supporto Microsoft non può fornire assistenza con i problemi correlati a CNI nei cluster distribuiti con BYOCNI (Bring Your Own Container Network Interface). Ad esempio, i problemi correlati a CNI coprono la maggior parte del traffico est/ovest (da pod a pod), insieme a kubectl proxy e comandi simili. Se si vuole il supporto correlato a CNI, usare un plug-in di rete del servizio Azure Kubernetes supportato o richiedere supporto dal fornitore di terze parti del plug-in BYOCNI.

Il supporto è ancora disponibile per i problemi non correlati a CNI.

Prerequisiti

  • Per Azure Resource Manager (ARM) o Bicep, usare almeno la versione del modello 2022-01-02-preview o 2022-06-01.
  • Per l'interfaccia della riga di comando di Azure, usare almeno la versione 2.39.0.
  • La rete virtuale per il cluster servizio Azure Kubernetes deve consentire la connettività Internet in uscita.
  • I cluster del servizio Azure Kubernetes non possono usare 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16 o 192.0.2.0/24 per l'intervallo di indirizzi del servizio Kubernetes, per l'intervallo di indirizzi del pod o per l'intervallo di indirizzi della rete virtuale del cluster.
  • L'identità usata dal cluster del servizio Azure Kubernetes deve avere almeno autorizzazioni di Collaboratore di rete per la subnet all'interno della rete virtuale. Se si vuole definire un ruolo personalizzato invece di usare il ruolo predefinito Collaboratore di rete, sono necessarie le autorizzazioni seguenti:
    • Microsoft.Network/virtualNetworks/subnets/join/action
    • Microsoft.Network/virtualNetworks/subnets/read
  • La subnet assegnata al pool di nodi del servizio Azure Kubernetes non può essere una subnet delegata.
  • Il servizio Azure Kubernetes non applica gruppi di sicurezza di rete (NSG) alla sua subnet e non modifica i NSG associati a tale subnet. Se si specifica subnet e si aggiunge NSG associati a questa subnet, bisogna assicurarsi che le regole di sicurezza negli NSG consentano il traffico all'interno dell'intervallo CIDR del nodo. Per altre informazioni, vedere Gruppi di sicurezza di rete.

Creare un cluster del servizio Azure Kubernetes senza plug-in CNI preinstallato

  1. Creare un gruppo di risorse di Azure per il cluster del servizio Azure Kubernetes usando il comando az group create.

    az group create -l eastus -n myResourceGroup
    
  2. Creare un cluster del servizio Azure Kubernetes usando il comando az aks create. Passare il parametro --network-plugin con il valore di none.

    az aks create -l eastus -g myResourceGroup -n myAKSCluster --network-plugin none
    

Distribuire un plug-in CNI

Al termine del provisioning del servizio Azure Kubernetes, il cluster è online, ma tutti i nodi si trovano in uno stato NotReady, come illustrato nell'esempio seguente:

  $ kubectl get nodes
  NAME                                STATUS     ROLES   AGE    VERSION
  aks-nodepool1-23902496-vmss000000   NotReady   agent   6m9s   v1.21.9

  $ kubectl get node -o custom-columns='NAME:.metadata.name,STATUS:.status.conditions[?(@.type=="Ready")].message'
  NAME                                STATUS
  aks-nodepool1-23902496-vmss000000   container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized

A questo punto, il cluster è pronto per l'installazione di un plug-in CNI.

Passaggi successivi

Per altre informazioni sulla rete in servizio Azure Kubernetes, vedere gli articoli seguenti: