Condividi tramite


Distribuire il plug-in CNI (Container Network Interface) della rete virtuale di Azure

Il plug-in CNI (Container Network Interface) della rete virtuale di Azure viene installato in una macchina virtuale di Azure e aggiunge funzionalità di rete virtuale ai pod Kubernetes e ai contenitori Docker. Per altre informazioni sul plug-in, vedere Enable containers to use Azure Virtual Network capabilities (Abilitare i contenitori all'uso delle funzionalità di rete virtuale di Azure). Il plug-in può inoltre essere usato con il servizio Azure Kubernetes scegliendo l'opzione Rete avanzata, che inserisce automaticamente i contenitori del servizio Azure Kubernetes in una rete virtuale.

Distribuire il plug-in per il cluster Kubernetes del servizio Azure Container

Il motore di servizio Azure Container distribuisce un cluster Kubernetes con un modello di Azure Resource Manager. La configurazione del cluster è specificata in un file JSON che viene passato allo strumento durante la generazione del modello. Per altre informazioni sull'intero elenco delle impostazioni di cluster supportate e le relative descrizioni, vedere Microsoft Azure Container Service Engine - Cluster Definition (Motore del servizio Microsoft Azure Container - Definizione del cluster). Il plug-in è il plug-in di rete predefinito per i cluster creati usando il motore del servizio Azure Container. Le seguenti impostazioni di configurazione di rete sono importanti per la configurazione del plug-in:

Impostazione Descrizione
firstConsecutiveStaticIP Indirizzo IP allocato al nodo principale. Questa impostazione è obbligatoria.
clusterSubnet sotto kubernetesConfig CIDR della subnet della rete virtuale in cui viene distribuito il cluster e da cui gli indirizzi IP vengono allocati ai pod
vnetSubnetId sotto masterProfile Specifica l'ID risorsa di Azure Resource Manager della subnet in cui verrà distribuito il cluster
vnetCidr CIDR della rete virtuale in cui è distribuito il cluster
max-Pods sotto kubeletConfig Numero massimo di pod in ogni macchina virtuale agente. Per il plug-in, il valore predefinito è 30. È possibile specificare fino a 250 pod

Configurazione di esempio

L'esempio JSON che segue è per un cluster con le proprietà seguenti:

  • Un nodo principale e due nodi agente

  • Distribuito in una subnet denominata KubeClusterSubnet (10.0.0.0/20), con nodi sia principali che dell'agente che si trovano in esso.

{
  "apiVersion": "vlabs",
  "properties": {
    "orchestratorProfile": {
      "orchestratorType": "Kubernetes",
      "kubernetesConfig": {
        "clusterSubnet": "10.0.0.0/20" --> Subnet allocated for the cluster
      }
    },
    "masterProfile": {
      "count": 1,
      "dnsPrefix": "ACSKubeMaster",
      "vmSize": "Standard_A2",
      "vnetSubnetId": "/subscriptions/<subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Network/virtualNetworks/<Vnet Name>/subnets/KubeClusterSubnet",
      "firstConsecutiveStaticIP": "10.0.1.50", --> IP address allocated to the Master node
      "vnetCidr": "10.0.0.0/16" --> Virtual network address space
    },
    "agentPoolProfiles": [
      {
        "name": "k8sagentpoo1",
        "count": 2,
        "vmSize": "Standard_A2_v2",
"vnetSubnetId": "/subscriptions/<subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Network/virtualNetworks/<VNet Name>/subnets/KubeClusterSubnet",
        "availabilityProfile": "AvailabilitySet"
      }
    ],
    "linuxProfile": {
      "adminUsername": "KubeServerAdmin",
      "ssh": {
        "publicKeys": [
          {…}
        ]
      }
    },
    "servicePrincipalProfile": {
      "clientId": "dd438987-aa12-4754-b47d-375811889714",
      "secret": "azure123"
    }
  }
}

Distribuire il plug-in per un cluster Kubernetes

Completare i passaggi seguenti per installare il plug-in ogni macchina virtuale di Azure in un cluster Kubernetes:

  1. Scaricare e installare il plug-in.

  2. Preallocare un pool di indirizzi IP di rete virtuale in ogni macchina virtuale da cui vengono assegnati indirizzi IP ai pod. Ogni macchina virtuale di Azure è fornita con un indirizzo IP privato di rete virtuale primaria in ogni interfaccia di rete. Il pool di indirizzi IP per i pod viene aggiunto come indirizzi secondari (ipconfigs) nell'interfaccia di rete della macchina virtuale, usando una delle opzioni seguenti:

    Assicurarsi di aggiungere indirizzi IP sufficienti per tutti i pod che si prevede di creare nella macchina virtuale.

  3. Selezionare il plug-in per fornire funzionalità di rete per il cluster passando a Kubelet l'–network-plugin=cniopzione della riga di comando durante la creazione del cluster. Kubernetes, per impostazione predefinita, cerca il plug-in e il file di configurazione nelle directory in cui sono già installati.

  4. Se si desidera che i pod accedano a Internet, aggiungere la regola iptables seguente nelle macchine virtuali Linux per applicare la conversione Source NAT al traffico Internet. Nell'esempio seguente, l'intervallo IP specificato è 10.0.0.0/8.

    iptables -t nat -A POSTROUTING -m iprange ! --dst-range 168.63.129.16 -m
    addrtype ! --dst-type local ! -d 10.0.0.0/8 -j MASQUERADE
    

    Il traffico NAT delle regole che non è destinato agli intervalli IP specificati. Il presupposto è che tutto il traffico esterno agli intervalli precedenti sia traffico Internet. È possibile specificare gli intervalli IP della rete virtuale della macchina virtuale, delle reti virtuali con peering e delle reti locali.

    Le macchine virtuali Windows applicano automaticamente la conversione Source NAT al traffico con una destinazione esterna alla subnet a cui appartiene la macchina virtuale. Non è possibile specificare intervalli IP personalizzati.

Al termine dei passaggi precedenti, alle macchine virtuali dell'agente Kubernetes vengono assegnati automaticamente indirizzi IP privati dalla rete virtuale.

Distribuire il plug-in per i contenitori Docker

  1. Scaricare e installare il plug-in.

  2. Creare contenitori Docker con il comando seguente:

    ./docker-run.sh \<container-name\> \<container-namespace\> \<image\>
    

I contenitori inizieranno automaticamente a ricevere gli indirizzi IP dal pool allocato. Se si vuole bilanciare il carico del traffico verso i contenitori Docker, è necessario posizionarli dietro un servizio di bilanciamento del carico software con un probe di bilanciamento del carico.

File di configurazione di rete CNI

Il file di configurazione di rete CNI è descritto in formato JSON. Per impostazione predefinita, è presente in /etc/cni/net.d per Linux e in c:\cni\netconf per Windows. Il file specifica la configurazione del plug-in ed è diverso per Windows e Linux. Il codice JSON seguente è un file di configurazione Linux di esempio, seguito da una spiegazione per alcune delle impostazioni chiave. Non è necessario apportare modifiche al file:

{
	   "cniVersion":"0.3.0",
	   "name":"azure",
	   "plugins":[
	      {
	         "type":"azure-vnet",
	         "mode":"bridge",
	         "bridge":"azure0",
	         "ipam":{
	            "type":"azure-vnet-ipam"
	         }
	      },
	      {
	         "type":"portmap",
	         "capabilities":{
	            "portMappings":true
	         },
	         "snat":true
	      }
	   ]
}

Spiegazione delle impostazioni

  • "cniVersion": i plug-in CNI di Azure Rete virtuale supportano le versioni 0.3.0 e 0.3.1 della specifica CNI.

  • "name": nome della rete. Questa proprietà può essere impostata su qualsiasi valore univoco.

  • "type": nome del plug-in di rete. Impostato su azure-vnet.

  • "mode": modalità operativa. Questo campo è facoltativo. L'unica modalità supportata è "bridge". Per altre informazioni, vedere le modalità operative.

  • "bridge": nome del bridge usato per connettere i contenitori a una rete virtuale. Questo campo è facoltativo. Se omesso, il plug-in seleziona automaticamente un nome univoco, in base all'indice dell'interfaccia principale.

  • "ipam"" - type": nome del plug-in Gestione indirizzi IP. È impostato sempre su azure-vnet-ipam.

Scaricare e installare il plug-in

Scaricare il plug-in da GitHub. Scaricare la versione più recente per la piattaforma in uso:

Copiare lo script di installazione per Linux o Windows nel computer in uso. Salvare lo script in una directory scripts nel computer e denominare il file install-cni-plugin.sh per Linux o install-cni-plugin.ps1 per Windows.

Per installare il plug-in, eseguire lo script appropriato per la piattaforma specificando la versione del plug-in uso. Ad esempio, è possibile specificare v1.4.20. Per l'installazione di Linux, specificare una versione appropriata del plug-in CNI, ad esempio v1.0.1:

scripts/install-cni-plugin.sh [azure-cni-plugin-version] [cni-plugin-version]
scripts\\ install-cni-plugin.ps1 [azure-cni-plugin-version]

Lo script installa il plug-in nel percorso /opt/cni/bin per Linux e c:\cni\bin per Windows. Nel plug-in installato è incluso un semplice file di configurazione di rete che funziona dopo l'installazione senza necessità di aggiornamenti. Per altre informazioni sulle impostazioni nel file, vedere File di configurazione di rete CNI.