Panoramica della rete CNI di Azure in servizio Azure Kubernetes (servizio Azure Kubernetes)

Per impostazione predefinita, i cluster del servizio Azure Kubernetes usano kubenet e creano una rete virtuale e una subnet. Con kubenet i nodi ottengono un indirizzo IP da una subnet della rete virtuale. Il protocollo NAT (Network Address Translation) viene quindi configurato nei nodi e i pod ricevono un indirizzo IP "nascosto" dietro l'indirizzo IP del nodo. Questo approccio riduce il numero di indirizzi IP che è necessario riservare ai pod nello spazio degli indirizzi della rete.

Con Azure Container Networking Interface (CNI) ogni pod ottiene un indirizzo IP dalla subnet in modo che vi si possa accedere direttamente. I sistemi nella stessa rete virtuale del cluster del servizio Azure Kubernetes vedono l'indirizzo IP del pod come indirizzo di origine per qualsiasi traffico proveniente dal pod. I sistemi esterni alla rete virtuale del cluster del servizio Azure Kubernetes vedono l'indirizzo IP del nodo come indirizzo di origine per qualsiasi traffico proveniente dal pod. Questi indirizzi IP devono essere univoci nello spazio di rete e devono essere pianificati in anticipo. Ogni nodo ha un parametro di configurazione per il numero massimo di pod che supporta. Il numero equivalente di indirizzi IP per nodo viene quindi riservato anticipatamente per tale nodo. Questo approccio richiede una maggiore pianificazione e spesso conduce all'esaurimento degli indirizzi IP o alla necessità di riconfigurare i cluster in una subnet di dimensioni maggiori man mano che aumentano le richieste dell'applicazione.

Nota

Questo articolo introduce solo l'interfaccia CNI di Azure tradizionale. Per la sovrimpressione CNI di Azure, la rete virtuale CNI di Azure per l'allocazione ip dinamica e la rete virtuale CNI di Azure - Allocazione di blocchi statici (anteprima). Fare invece riferimento alla relativa documentazione.

Prerequisiti

  • 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/16o 192.0.2.0/24 per l'intervallo di indirizzi del servizio Kubernetes, l'intervallo di indirizzi del pod o 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

    • Microsoft.Authorization/roleAssignments/write

  • 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 alla subnet e non modifica alcun gruppo di sicurezza di rete associato a tale subnet. Se si specifica la propria subnet e si aggiungono gruppi di sicurezza di rete associati a tale subnet, è necessario assicurarsi che le regole di sicurezza nei gruppi di sicurezza di rete consentano il traffico all'interno dell'intervallo CIDR del nodo. Per altre informazioni, vedere Gruppi di sicurezza di rete.

Pianificare l'indirizzamento IP per il cluster

I cluster configurati con la rete CNI di Azure richiedono una pianificazione aggiuntiva. Le dimensioni della rete virtuale e della subnet devono essere sufficienti sia per il numero di pod che si prevede di eseguire che per il numero di nodi per il cluster.

Gli indirizzi IP per i pod e i nodi del cluster vengono assegnati dalla subnet specificata all'interno della rete virtuale. Ogni nodo è configurato con un indirizzo IP primario. Azure CNI preconfigura 30 indirizzi IP aggiuntivi per impostazione predefinita. Questi indirizzi IP vengono assegnati ai pod pianificati nel nodo. Quando si aumenta il numero di istanze del cluster, ogni nodo viene configurato in modo simile con gli indirizzi IP della subnet. È anche possibile visualizzare il numero massimo di pod per nodo.

Importante

Per calcolare il numero di indirizzi IP necessari, è opportuno considerare le eventuali operazioni di aggiornamento e ridimensionamento. Se si imposta l'intervallo di indirizzi IP per supportare solo un numero fisso di nodi, non è possibile aggiornare o ridimensionare il cluster.

  • Quando si esegue l'aggiornamento del cluster servizio Azure Kubernetes, viene distribuito un nuovo nodo nel cluster. Viene avviata l'esecuzione di servizi e carichi di lavoro nel nuovo nodo e il nodo precedente viene rimosso dal cluster. Questo processo di aggiornamento in sequenza richiede la disponibilità di almeno un altro blocco di indirizzi IP. Il numero di nodi risulta quindi pari a n + 1.

    • Questa considerazione è particolarmente importante quando si usano pool di nodi di Windows Server. I nodi di Windows Server nel servizio Azure Kubernetes non applicano automaticamente windows Aggiornamenti. Si esegue invece un aggiornamento nel pool di nodi. Questo aggiornamento distribuisce nuovi nodi con le patch di sicurezza e l'immagine più recente del nodo di base di Window Server 2019. Per altre informazioni sull'aggiornamento di un pool di nodi di Windows Server, vedere Aggiornare un pool di nodi nel servizio Azure Kubernetes.
  • Quando si esegue il ridimensionamento di un cluster servizio Azure Kubernetes, viene distribuito un nuovo nodo nel cluster. Viene avviata l'esecuzione di servizi e carichi di lavoro nel nuovo nodo. L'intervallo di indirizzi IP deve prendere in considerazione il modo in cui è possibile aumentare il numero di nodi e pod che il cluster può supportare. È necessario includere anche un nodo aggiuntivo per le operazioni di aggiornamento. Il numero di nodi risulta quindi pari a n + number-of-additional-scaled-nodes-you-anticipate + 1.

Se si prevede che i nodi eseguano il numero massimo di pod e vengano eliminati e distribuiti regolarmente i pod, è necessario considerare anche alcuni indirizzi IP aggiuntivi per ogni nodo. Alcuni secondi possono essere necessari per eliminare un servizio e rilasciare il relativo indirizzo IP per la distribuzione e l'acquisizione dell'indirizzo di un nuovo servizio. Questi indirizzi IP aggiuntivi considerano questa possibilità.

Il piano di indirizzo IP per un cluster servizio Azure Kubernetes è costituito da una rete virtuale, almeno una subnet per i nodi e i pod e un intervallo di indirizzi per il servizio Kubernetes.

Intervallo di indirizzi / Risorsa di Azure Limiti e dimensioni
Rete virtuale La rete virtuale di Azure può avere dimensioni pari a /8, ma è limitata a 65.536 indirizzi IP configurati. Prendere in considerazione tutte le esigenze di rete, inclusa la comunicazione con i servizi in altre reti virtuali, prima di configurare lo spazio degli indirizzi. Ad esempio, se si configura una quantità eccessiva di spazio indirizzi, è possibile che si verifichino problemi con la sovrapposizione di altri spazi di indirizzi all'interno della rete.
Subnet Deve essere sufficientemente grande da contenere i nodi, i pod e tutte le risorse Kubernetes e Azure che potrebbero essere sottoposte a provisioning nel cluster. Ad esempio, se si distribuisce un Azure Load Balancer interno, i relativi indirizzi IP front-end vengono allocati dalla subnet del cluster, ma non gli indirizzi IP pubblici. Per calcolare le dimensioni della subnet, è opportuno considerare anche eventuali operazioni di aggiornamento o le esigenze di ridimensionamento future.

Usare l'equazione seguente per calcolare le dimensioni minime della subnet, incluso un nodo aggiuntivo per le operazioni di aggiornamento:

(number of nodes + 1) + ((number of nodes + 1) * maximum pods per node that you configure) esempio per un cluster di 50 nodi: (51) + (51 * 30 (default)) = 1,581 (/21 o superiore)

Esempio per un cluster a 50 nodi che include anche la preparazione per aumentare le prestazioni di un numero aggiuntivo di 10 nodi: (61) + (61 * 30 (default)) = 1,891 (/21 o superiore)

Se non si specifica un numero massimo di pod per nodo al momento della creazione del cluster, l'impostazione predefinita è 30. Il numero minimo di indirizzi IP richiesti si basa su questo valore. Se si calcolano i requisiti minimi per gli indirizzi IP in un valore massimo diverso, vedere Numero massimo di pod per nodo per impostare questo valore quando si distribuisce il cluster.

Intervallo di indirizzi del servizio Kubernetes Qualsiasi elemento di rete in o connesso a questa rete virtuale non deve usare questo intervallo. Il CIDR dell'indirizzo del servizio deve essere più piccolo di /12. È possibile riutilizzare questo intervallo tra cluster del servizio Azure Kubernetes diversi.
Indirizzo IP del servizio DNS di Kubernetes Indirizzo IP all'interno dell'intervallo di indirizzi del servizio Kubernetes usato dall'individuazione del servizio cluster. Non usare il primo indirizzo IP nell'intervallo di indirizzi. Il primo indirizzo nell'intervallo della subnet è usato per l'indirizzo kubernetes.default.svc.cluster.local.

Numero massimo di pod per nodo

Il numero massimo di pod per nodo in un cluster del servizio Azure Kubernetes è 250. Il numero massimo predefinito di pod per nodo varia tra le funzionalità di rete kubenet e Azure CNI e il metodo di distribuzione del cluster.

Metodo di distribuzione Kubenet predefinito Azure CNI predefinito Configurabile in fase di distribuzione
Interfaccia della riga di comando di Azure 110 30 Sì (fino a 250)
Modello di Resource Manager 110 30 Sì (fino a 250)
Portale 110 110 (configurabile nella scheda Pool di nodi) Sì (fino a 250)

Configurare il numero massimo di pod per nodo per i nuovi cluster

È possibile configurare il numero massimo di pod per nodo in fase di distribuzione del cluster o quando si aggiungono nuovi pool di nodi. È possibile impostare il valore massimo di pod per nodo pari a 250.

Se non si specifica maxPods durante la creazione di nuovi pool di nodi, viene visualizzato il valore predefinito 30 per Azure CNI.

Viene applicato un valore minimo per i pod massimi per ogni nodo per garantire lo spazio per i pod di sistema critici per l'integrità del cluster. Il valore minimo che può essere impostato per il numero massimo di pod per nodo è 10 se e solo se la configurazione di ogni pool di nodi ha spazio per un minimo di 30 pod. Ad esempio, l'impostazione del numero massimo di pod per nodo al minimo di 10 richiede che ogni singolo pool di nodi abbia almeno tre nodi. Questo requisito si applica anche per ogni nuovo pool di nodi creato, quindi se 10 è definito come numero massimo di pod per nodo ogni pool di nodi successivo aggiunto deve avere almeno tre nodi.

Rete Minimo Massimo
Azure CNI 10 250
Kubenet 10 250

Nota

Il valore minimo nella tabella precedente viene applicato rigorosamente dal servizio Servizio Azure Kubernetes. Non è possibile impostare un valore per maxPods inferiore al valore minimo visualizzato, in quanto ciò può impedire l'avvio del cluster.

  • Azure CLI: specificare l'--max-podsargomento quando si distribuisce un cluster con il comando az servizio Azure Kubernetes create. Il valore massimo è 250.
  • Modello di Gestione risorse: specificare la maxPods proprietà nell'oggetto ManagedClusterAgentPoolProfile quando si distribuisce un cluster con un modello di Gestione risorse. Il valore massimo è 250.
  • portale di Azure: modificare il Max pods per node campo nelle impostazioni del pool di nodi durante la creazione di un cluster o l'aggiunta di un nuovo pool di nodi.

Configurare il numero massimo di pod per nodo per i cluster esistenti

L'impostazione maxPods per nodo può essere definita quando si crea un nuovo pool di nodi. Se è necessario aumentare l'impostazione maxPods in un cluster esistente, aggiungere un nuovo pool di nodi con il nuovo numero maxPods desiderato. Dopo la migrazione dei pod al nuovo pool, eliminare il pool precedente. Per eliminare qualsiasi pool precedente in un cluster, assicurarsi di impostare le modalità del pool di nodi come definito nel documento pool di nodi di sistema.

Parametri di distribuzione

Quando si crea un cluster servizio Azure Kubernetes, per la rete Azure CNI i parametri seguenti sono configurabili:

Rete virtuale: rete virtuale in cui si vuole distribuire il cluster Kubernetes. Per creare una nuova rete virtuale per il cluster, selezionare Crea nuova e seguire i passaggi della sezione Creare una rete virtuale. Se si vuole selezionare una rete virtuale esistente, assicurarsi che si trovi nella stessa posizione e nella stessa sottoscrizione di Azure del cluster Kubernetes. Per altre informazioni su limiti e quote per una rete virtuale di Azure, vedere Sottoscrizione di Azure e limiti, quote e vincoli dei servizi.

Subnet: subnet nella rete virtuale in cui si vuole distribuire il cluster. Per creare una nuova subnet nella rete virtuale per il cluster, selezionare Crea nuova e seguire i passaggi della sezione Creare una subnet. Per la connettività ibrida, l'intervallo di indirizzi non deve sovrapporsi ad altre reti virtuali dell'ambiente in uso.

Plug-in di rete di Azure: quando si usa il plug-in di rete di Azure, non è possibile accedere al servizio LoadBalancer interno con "externalTrafficPolicy=Local" dalle macchine virtuali con un indirizzo IP nel clusterCIDR che non appartiene al cluster del servizio Azure Kubernetes.

Intervallo di indirizzi del servizio Kubernetes: questo parametro è il set di indirizzi IP virtuali assegnati da Kubernetes ai servizi interni nel cluster. Questo intervallo non può essere aggiornato dopo la creazione del cluster. È possibile usare qualsiasi intervallo di indirizzi privati che soddisfi i requisiti seguenti:

  • Non deve essere compreso nell'intervallo di indirizzi IP della rete virtuale del cluster
  • Non deve sovrapporsi ad altre reti virtuali con cui la rete virtuale del cluster effettua il peering
  • Non deve sovrapporsi ad altri IP locali
  • Non deve trovarsi all'interno degli intervalli 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16o 192.0.2.0/24

Sebbene sia tecnicamente possibile specificare un intervallo di indirizzi del servizio all'interno della stessa rete virtuale del cluster, questa operazione non è consigliata. Se vengono usati intervalli IP che si sovrappongono, si può verificare un comportamento imprevedibile. Per altre informazioni, vedere la sezione Domande frequenti di questo articolo. Per altre informazioni sui servizi Kubernetes, vedere Services (Servizi) nella documentazione di Kubernetes.

Kubernetes DNS service IP address (Indirizzo IP del servizio DNS Kubernetes): indirizzo IP per il servizio DNS del cluster. Questo indirizzo deve essere compreso nell'intervallo degli indirizzi del servizio Kubernetes. Non usare il primo indirizzo IP nell'intervallo di indirizzi. Il primo indirizzo nell'intervallo della subnet è usato per l'indirizzo kubernetes.default.svc.cluster.local.

Domande frequenti

  • È possibile distribuire le VM nella subnet del cluster?

    Sì. Tuttavia, per Azure CNI per l'allocazione IP dinamica, le macchine virtuali non possono essere distribuite nella subnet del pod.

  • Quale indirizzo IP di origine viene visualizzato dai sistemi esterni per il traffico originato in un pod abilitato per Azure CNI?

    I sistemi nella stessa rete virtuale del cluster del servizio Azure Kubernetes vedono l'indirizzo IP del pod come indirizzo di origine per qualsiasi traffico proveniente dal pod. I sistemi esterni alla rete virtuale del cluster del servizio Azure Kubernetes vedono l'indirizzo IP del nodo come indirizzo di origine per qualsiasi traffico proveniente dal pod.

    Tuttavia, per Azure CNI per l'allocazione IP dinamica, indipendentemente dal fatto che la connessione si trova all'interno della stessa rete virtuale o tra reti virtuali, l'indirizzo IP del pod è sempre l'indirizzo di origine per qualsiasi traffico proveniente dal pod. Il motivo è che Azure CNI per l'allocazione ip dinamica implementa l'infrastruttura di rete di Microsoft Azure Container, che offre un'esperienza end-to-end. Di conseguenza, elimina l'uso di ip-masq-agent, che viene ancora usato da Azure CNI tradizionale.

  • È possibile configurare criteri di rete per pod?

    Sì, i criteri di rete kubernetes sono disponibili nel servizio Azure Kubernetes. Per iniziare, vedere Proteggere il traffico tra pod usando i criteri di rete nel servizio Azure Kubernetes.

  • Il numero massimo di pod distribuibili in un nodo è configurabile?

    Sì, quando si distribuisce un cluster con l'interfaccia della riga di comando di Azure o un modello di Gestione risorse. Consultare Numero massimo di pod per nodo.

    Non è possibile modificare il numero massimo di pod per ogni nodo in un cluster esistente.

  • Come si configurano altre proprietà per la subnet creata durante la creazione del cluster servizio Azure Kubernetes? Ad esempio, gli endpoint di servizio.

    L'elenco completo delle proprietà per la rete virtuale e le subnet create durante la creazione del cluster servizio Azure Kubernetes può essere configurato nella pagina di configurazione della rete virtuale standard nel portale di Azure.

  • È possibile usare una subnet diversa all'interno della rete virtuale del cluster per l'intervallo di indirizzi del servizio Kubernetes?

    Non è consigliabile, ma questa configurazione è possibile. L'intervallo di indirizzi del servizio è un set di indirizzi IP virtuali che Kubernetes assegna ai servizi interni nel cluster. La rete di Azure non ha visibilità sull'intervallo di indirizzi IP dei servizi del cluster Kubernetes. La mancanza di visibilità nell'intervallo di indirizzi del servizio del cluster può causare problemi. È possibile creare successivamente una nuova subnet nella rete virtuale del cluster che si sovrappone all'intervallo di indirizzi del servizio. Se si verifica una sovrapposizione di questo tipo, Kubernetes può assegnare a un servizio un indirizzo IP già usato da un'altra risorsa nella subnet, causando un comportamento imprevedibile o errori. Assicurandosi di usare un intervallo di indirizzi esterno alla rete virtuale del cluster, è possibile evitare il rischio di sovrapposizioni.

Passaggio successivo

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