Creare un cluster del servizio Azure Kubernetes privato
In un cluster privato il piano di controllo o il server API dispone di indirizzi IP interni definiti nel documento RFC1918 - Allocazione indirizzi per Internet privato. Usando un cluster privato è possibile garantire che il traffico di rete tra il server API e i pool di nodi rimanga solo sulla rete privata.
Il piano di controllo o il server API si trova in un gruppo di risorse di Azure gestito dal servizio Azure Kubernetes. Il cluster o il pool di nodi si trova nel gruppo di risorse. Il server e il cluster o il pool di nodi possono comunicare tra loro tramite il servizio Collegamento privato di Azure nella rete virtuale del server API e un endpoint privato esposto nella subnet del cluster del servizio Azure Kubernetes.
Quando si effettua il provisioning di un cluster del servizio Azure Kubernetes privato, il servizio Azure Kubernetes crea per impostazione predefinita un nome di dominio completo privato con una zona DNS privata e un nome di dominio completo pubblico aggiuntivo con un record A corrispondente nel DNS pubblico di Azure. I nodi dell'agente continuano a usare il record A nella zona DNS privata per risolvere l'indirizzo IP privato dell'endpoint privato per la comunicazione con il server API.
Lo scopo di questo articolo è quello di distribuire un cluster del servizio Azure Kubernetes basato su collegamento privato. Se si è interessati a creare un cluster del servizio Azure Kubernetes senza collegamento privato o tunnel necessario, vedere creare un cluster del servizio Azure Kubernetes con Integrazione rete virtuale del server API (anteprima).
Aree di disponibilità
Il cluster privato è disponibile in aree pubbliche, Azure per enti pubblici e Microsoft Azure gestite da 21 Areevianet in cui il servizio Azure Kubernetes è supportato.
Prerequisiti
- Interfaccia della riga di comando di Azure versione 2.28.0 e successive. Eseguire
az --version
per trovare la versione ed eseguireaz upgrade
per aggiornare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure. - Estensione
aks-preview
0.5.29 o successiva. - Se si usa Azure Resource Manager (ARM) o l'API REST di Azure, la versione dell'API del servizio Azure Kubernetes deve essere 2021-05-01 o successiva.
- Il servizio Collegamento privato di Azure è supportato solo in Azure Load Balancer Standard. Azure Load Balancer di base non è supportato.
- Per usare un server DNS personalizzato, aggiungere l'indirizzo IP pubblico di Azure 168.63.129.16 come server DNS upstream nel server DNS personalizzato e assicurarsi di aggiungere questo indirizzo IP pubblico come primo server DNS. Per altre informazioni sull'indirizzo IP di Azure, vedere Che cos'è l'indirizzo IP 168.63.129.16?
- La zona DNS del cluster deve essere quella inoltrata alla versione 168.63.129.16. Per altre informazioni sui nomi delle zone, vedere configurazione della zona DNS dei servizi di Azure.
- I cluster del servizio Azure Kubernetes esistenti abilitati per l'integrazione rete virtuale del server API possono avere la modalità cluster privato abilitata. Per altre informazioni, abilitare o disabilitare la modalità cluster privato in un cluster esistente con Integrazione rete virtuale del server API.
Nota
Il pool di nodi Linux di Azure è ora generalmente disponibile. Per informazioni sui vantaggi e sui passaggi di distribuzione, vedere Introduzione all'host contenitore Linux di Azure per il servizio Azure Kubernetes.
Limiti
- Gli intervalli ip autorizzati non possono essere applicati all'endpoint del server API privato, ma si applicano solo al server API pubblico
- Le limitazioni del servizio Collegamento privato di Azure si applicano ai cluster privati.
- Non è disponibile alcun supporto per gli agenti ospitati da Microsoft In Azure DevOps con cluster privati. Prendere in considerazione l'uso di agenti self-hosted.
- Se è necessario abilitare Registro Azure Container per l'uso con un cluster del servizio Azure Kubernetes privato, configurare un collegamento privato per il registro contenitori nella rete virtuale del cluster o configurare il peering tra la rete virtuale del Registro Container e la rete virtuale del cluster privato.
- Se si elimina o si modifica l'endpoint privato nella subnet del cliente, il cluster smette di funzionare.
Creare un cluster AKS privato
Creare un gruppo di risorse
Creare un gruppo di risorse usando il comando az group create
. È anche possibile usare un gruppo di risorse esistente per il cluster del servizio Azure Kubernetes.
az group create --location eastus --name myResourceGroup
Funzionalità di rete di base predefinita
Creare un cluster privato con la rete di base predefinita usando il comando az aks create
con il flag --enable-private-cluster
.
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--generate-ssh-keys
Rete avanzata
Creare un cluster privato con la rete avanzata usando il comando az aks create
con i flag seguenti:
az aks create \
--resource-group <private-cluster-resource-group> \
--name <private-cluster-name> \
--load-balancer-sku standard \
--enable-private-cluster \
--network-plugin azure \
--vnet-subnet-id <subnet-id> \
--dns-service-ip 10.2.0.10 \
--service-cidr 10.2.0.0/24
--generate-ssh-keys
Usare domini personalizzati
Per configurare domini personalizzati che possono essere risolti solo internamente, vedere Usare domini personalizzati.
Disabilitare un FQDN pubblico
Disabilitare un FQDN pubblico in un nuovo cluster del servizio Azure Kubernetes
Disabilitare un FQDN pubblico durante la creazione di un cluster del servizio Azure Kubernetes privato usando il flag --disable-public-fqdn
.
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resourceID> \
--private-dns-zone <private-dns-zone-mode> \
--disable-public-fqdn \
--generate-ssh-keys
Disabilitare un FQDN pubblico in un cluster esistente
Disabilitare un FQDN pubblico in un cluster del servizio Azure Kubernetes esistente usando il comando az aks update
con il flag --disable-public-fqdn
.
az aks update --name <private-cluster-name> --resource-group <private-cluster-resource-group> --disable-public-fqdn
Configura una zona DNS privato
È possibile configurare zone DNS private usando i parametri seguenti:
- sistema: si tratta del valore predefinito. Se l'argomento
--private-dns-zone
viene omesso, il servizio Azure Kubernetes crea una zona DNS privata nel gruppo di risorse del nodo. - nessuno: il valore predefinito è DNS pubblico. Il servizio Azure Kubernetes non creerà una zona DNS privata.
- CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID: è necessario creare una zona DNS privata nel formato seguente per il cloud globale di Azure:
privatelink.<region>.azmk8s.io
o<subzone>.privatelink.<region>.azmk8s.io
. Per un uso futuro sarà necessario l'ID risorsa della zona DNS privata. È anche necessaria un'identità assegnata dall'utente o un'entità servizio con i ruoli collaboratore zona DNS privato e collaboratore alla rete. Quando si distribuisce usando l'integrazione della rete virtuale del server API, una zona DNS privata supporta il formato di denominazione diprivate.<region>.azmk8s.io
o<subzone>.private.<region>.azmk8s.io
.- Se la zona DNS privata si trova in una sottoscrizione diversa rispetto al cluster del servizio Azure Kubernetes, è necessario registrare il provider di Azure Microsoft.ContainerServices in entrambe le sottoscrizioni.
- "fqdn-subdomain" può essere usato con "CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID" solo per fornire funzionalità di sottodominio a
privatelink.<region>.azmk8s.io
. - Se il cluster del servizio Azure Kubernetes è configurato con un'entità servizio Active Directory, il servizio Azure Kubernetes non supporta l'uso di un'identità gestita assegnata dal sistema con una zona DNS privata personalizzata. Il cluster deve usare l'autenticazione dell'identità gestita assegnata dall'utente.
- Se si specifica un
<subzone>
esiste un limite di 32 caratteri per il nome<subzone>
.
Nota
CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID può essere configurato usando un modello di Resource Manager oltre all'interfaccia della riga di comando di Azure. privateDNSZone
accetta l'ID risorsa della zona DNZ privata, come illustrato nell'esempio seguente:
properties.apiServerAccessProfile.privateDNSZone.
"apiServerAccessProfile": {
"enablePrivateCluster": true,
"privateDNSZone": "system|none|[resourceId(..., 'Microsoft.Network/privateDnsZones', 'privatelink.<region>.azmk8s.io']"
}
Importante
CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID non può essere modificato dopo la creazione del cluster e non può essere eliminato. In caso contrario, il cluster avrà problemi durante l'esecuzione delle operazioni di aggiornamento.
Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata
Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata usando il comando az aks create
con i flag seguenti:
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resourceID> \
--private-dns-zone [system|none] \
--generate-ssh-keys
Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata personalizzata o una sottozona DNS privata
Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata personalizzata o una sottozona usando il comando az aks create
con i flag seguenti:
# The custom private DNS zone name should be in the following format: "<subzone>.privatelink.<region>.azmk8s.io"
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resourceID> \
--private-dns-zone <custom private dns zone or custom private dns subzone resourceID> \
--generate-ssh-keys
Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata personalizzata e un sottodominio personalizzato
Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata personalizzata e un sottodominio usando il comando az aks create
con i flag seguenti:
# The custom private DNS zone name should be in one of the following formats: "privatelink.<region>.azmk8s.io" or "<subzone>.privatelink.<region>.azmk8s.io"
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resourceID> \
--private-dns-zone <custom private dns zone resourceID> \
--fqdn-subdomain <subdomain> \
--generate-ssh-keys
Aggiornare un cluster privato da una zona DNS privata a pubblico
Nota
Questa funzionalità richiede la dell'estensione aks-preview
versione >= 0.5.97
Aggiornare un cluster privato da byo
o system
a none
usando il comando az aks update
con i flag seguenti:
az aks update --name <private-cluster-name> --resource-group <private-cluster-resource-group> --private-dns-zone none
Nota
È possibile eseguire l'aggiornamento solo da byo
o system
a none
. Non sono supportate altre combinazioni di valori di aggiornamento.
Opzioni per la connessione al cluster privato
L'endpoint del server API non ha un indirizzo IP pubblico. Per gestire il server API, è necessario usare una macchina virtuale che abbia accesso alla rete virtuale di Azure del cluster del servizio Azure Kubernetes. Sono disponibili diverse opzioni per stabilire la connettività di rete al cluster privato:
- Creare una macchina virtuale nella stessa rete virtuale del cluster del servizio Azure Kubernetes usando il comando
az vm create
con il flag--vnet-name
. - Usare una macchina virtuale in una rete separata e configurare peering di rete virtuale.
- Usare una connessione ExpressRoute o VPN.
- Usare la funzionalità
command invoke
del servizio Azure Kubernetes. - Usare una connessione endpoint privato.
- Usare un'istanza di Cloud Shell distribuita in una subnet connessa al server API per il cluster.
Nota
La creazione di una macchina virtuale nella stessa VNET del cluster AKS è l'opzione più semplice. Express Route e VPN aggiungono costi e richiedono una maggiore complessità di rete. Il peering di rete virtuale richiede la pianificazione degli intervalli CIDR della rete per assicurarsi che non siano presenti intervalli sovrapposti.
Peering di rete virtuale
Il peering di rete virtuale è un modo per accedere al cluster privato. Per usare il peering di rete virtuale, è necessario configurare un collegamento tra la rete virtuale e la zona DNS privata.
- Nella portale di Azure passare al gruppo di risorse del nodo e selezionare la risorsa zona DNS privata.
- Nel menu del servizio, in Gestione DNS selezionare Rete virtuale Collegamenti>Aggiungi.
- Nella pagina Aggiungi collegamento Rete virtuale configurare le impostazioni seguenti:
- Nome collegamento: immettere un nome per il collegamento alla rete virtuale.
- Rete virtuale: selezionare la rete virtuale che contiene la macchina virtuale.
- Selezionare Crea per creare il collegamento alla rete virtuale.
- Passare al gruppo di risorse che contiene la rete virtuale del cluster e selezionare la risorsa di rete virtuale.
- Nel menu del servizio, in Impostazioni, selezionare Peering>Aggiungi.
- Nella pagina Aggiungi peering configurare le impostazioni seguenti:
- Nome collegamento di peering: immettere un nome per il collegamento di peering.
- Rete virtuale: selezionare la rete virtuale della macchina virtuale.
- Selezionare Aggiungi per creare il collegamento di peering.
Per altre informazioni, vedere Peering di rete virtuale.
Hub e spoke con DNS personalizzato
Le architetture hub e spoke vengono comunemente usate per distribuire le reti in Azure. In molte di queste distribuzioni, le impostazioni DNS nelle reti virtuali spoke sono configurate in modo da fare riferimento a un server d'inoltro DNS centrale per consentire la risoluzione DNS locale e basata su Azure. Quando si distribuisce un cluster del servizio Azure Kubernetes in un ambiente di rete di questo tipo, è necessario tenere presenti alcune considerazioni speciali:
- Quando viene effettuato il provisioning di un cluster privato, nel gruppo di risorse gestito dal cluster vengono creati un endpoint privato (1) e una zona DNS privata (2) per impostazione predefinita. Il cluster usa un record
A
nella zona privata per risolvere l'indirizzo IP dell'endpoint privato per la comunicazione con il server API. - La zona DNS privata è collegata solo alla VNet a cui sono collegati i nodi del cluster (3). Ciò significa che l'endpoint privato può essere risolto solo dagli host in tale VNet collegata. Negli scenari in cui non è configurato alcun DNS personalizzato nella rete virtuale (impostazione predefinita), questa operazione funziona senza problemi come host che puntano a 168.63.129.16 per DNS in grado di risolvere i record nella zona DNS privata a causa del collegamento.
- Negli scenari in cui la VNet che contiene il cluster dispone di impostazioni DNS personalizzate (4), la distribuzione del cluster ha esito negativo a meno che la zona DNS privata non sia collegata alla VNet che contiene i resolver DNS personalizzati (5). Questo collegamento può essere creato manualmente dopo la creazione della zona privata durante il provisioning del cluster o tramite l'automazione al rilevamento della creazione della zona usando meccanismi di distribuzione basati su eventi, ad esempio Griglia di eventi di Azure e Funzioni di Azure. Per evitare errori del cluster durante la distribuzione iniziale, il cluster può essere distribuito con l'ID risorsa della zona DNS privata. Questo funziona solo con il tipo di risorsa
Microsoft.ContainerService/managedCluster
e la versione dell'API2022-07-01
. L'uso di una versione precedente con un modello ARM o una definizione di risorsa Bicep non è supportato.
Nota
L'inoltro condizionale non supporta i sottodomini.
Nota
Se si usa porta la tua tabella di routing con kubenet e si usa un DNS personalizzato con cluster privati, la creazione del cluster avrà esito negativo. Dopo che la creazione del cluster non è riuscita, è necessario associare l'oggetto RouteTable
nel gruppo di risorse del nodo alla subnet.
Usare una connessione endpoint privato
È possibile configurare un endpoint privato in modo che non sia necessario eseguire il peering di una rete virtuale per comunicare con il cluster privato. Creare un nuovo endpoint privato nella rete virtuale contenente le risorse che utilizzano e quindi creare un collegamento tra la rete virtuale e una nuova zona DNS privata nella stessa rete.
Importante
Se la rete virtuale è configurata con server DNS personalizzati, sarà necessario configurare il DNS privato in modo appropriato per l'ambiente. Per altri dettagli, vedere la documentazione sulla risoluzione dei nomi delle reti virtuali.
Creare una risorsa endpoint privato
Creare una risorsa endpoint privato nella rete virtuale:
- Nella home page portale di Azure selezionare Crea una risorsa.
- Cercare Endpoint privato e selezionare Crea>endpoint privato.
- Seleziona Crea.
- Nella scheda Informazioni di base configurare le impostazioni seguenti:
- Dettagli di progetto
- Sottoscrizione: selezionare la sottoscrizione in cui si trova il cluster privato.
- Gruppo di risorse: selezionare il gruppo di risorse che contiene la rete virtuale.
- Dettagli istanza
- Nome: immettere un nome per l'endpoint privato, ad esempio myPrivateEndpoint.
- Area: selezionare la stessa area della rete virtuale.
- Dettagli di progetto
- Selezionare Avanti: Risorsa e configurare le impostazioni seguenti:
- Metodo di connessione: selezionare Connetti a una risorsa di Azure nella directory.
- Sottoscrizione: selezionare la sottoscrizione in cui si trova il cluster privato.
- Tipo di risorsa: selezionare Microsoft.ContainerService/managedClusters.
- Risorsa: selezionare il cluster privato.
- Sotto-risorsa di destinazione: selezionare gestione.
- Selezionare Avanti: Rete virtuale e configurare le impostazioni seguenti:
- Networking
- Rete virtuale: selezionare la rete virtuale.
- Subnet: selezionare la subnet.
- Networking
- Selezionare Avanti: DNS>Avanti: Tag e (facoltativamente) configurare i valori chiave in base alle esigenze.
- Selezionare Avanti: Rivedi e crea>Crea.
Dopo aver creato la risorsa, registrare l'indirizzo IP privato dell'endpoint privato per un uso futuro.
Creare una zona DNS privato
Dopo aver creato l'endpoint privato, creare una nuova zona DNS privata con lo stesso nome della zona DNS privata creata dal cluster privato. Ricordarsi di creare questa zona DNS nella rete virtuale contenente le risorse che usano.
- Nella portale di Azure passare al gruppo di risorse del nodo e selezionare la risorsa zona DNS privata.
- Nel menu del servizio, in Gestione DNS selezionare Recordset e tenere presente quanto segue:
- Nome della zona DNS privata, che segue il modello
*.privatelink.<region>.azmk8s.io
. - Nome del record
A
(escluso il nome DNS privato). - Durata (TTL).
- Nome della zona DNS privata, che segue il modello
- Nella home page portale di Azure selezionare Crea una risorsa.
- Cercare DNS privato zona e selezionare Crea> DNS privato zona.
- Nella scheda Informazioni di base configurare le impostazioni seguenti:
- Dettagli del progetto:
- Selezionare la propria sottoscrizione.
- Selezionare il gruppo di risorse in cui è stato creato l'endpoint privato.
- Dettagli istanza
- Nome: immettere il nome della zona DNS recuperata dai passaggi precedenti.
- Per impostazione predefinita, l'area è la posizione del gruppo di risorse.
- Dettagli del progetto:
- Selezionare Rivedi e crea>Crea.
Creare un record A
Dopo aver creato la zona DNS privata, creare un record A
, che associa l'endpoint privato al cluster privato:
- Passare alla zona DNS privata creata nei passaggi precedenti.
- Nel menu del servizio, in Gestione DNS, selezionare Recordset>Aggiungi.
- Nella pagina Aggiungi set di record configurare le impostazioni seguenti:
- Nome: immettere il nome recuperato dal
A
record nella zona DNS del cluster privato. - Tipo: selezionare A - Record indirizzo.
- TTL: immettere il numero del record
A
nella zona DNS del cluster privato. - Unità TTL: modificare il valore dell'elenco a discesa in modo che corrisponda a quello nel record
A
dalla zona DNS del cluster privato. - Indirizzo IP: immettere l'indirizzo IP dell'endpoint privato creato.
- Nome: immettere il nome recuperato dal
- Selezionare Aggiungi per creare il
A
record.
Importante
Quando si crea il record A
, usare solo il nome e non il nome di dominio completo (FQDN).
Collegare la zona DNS privata alla rete virtuale
Dopo aver creato il record A
, collegare la zona DNS privata alla rete virtuale che accederà al cluster privato:
- Passare alla zona DNS privata creata nei passaggi precedenti.
- Nel menu del servizio, in Gestione DNS selezionare Rete virtuale Collegamenti>Aggiungi.
- Nella pagina Aggiungi collegamento Rete virtuale configurare le impostazioni seguenti:
- Nome collegamento: immettere un nome per il collegamento alla rete virtuale.
- Sottoscrizione: selezionare la sottoscrizione in cui si trova il cluster privato.
- Rete virtuale: selezionare la rete virtuale del cluster privato.
- Selezionare Crea per creare il collegamento.
Il completamento dell'operazione potrebbe richiedere alcuni minuti. Dopo aver creato il collegamento alla rete virtuale, è possibile accedervi dalla scheda collegamenti Rete virtuale usata nel passaggio 2.
Avviso
- Se il cluster privato viene arrestato e riavviato, il servizio di collegamento privato originale del cluster privato viene rimosso e ricreato, interrompendo la connessione tra l'endpoint privato e il cluster privato. Per risolvere questo problema, eliminare e ricreare tutti gli endpoint privati creati dall'utente collegati al cluster privato. Se gli endpoint privati ricreati hanno nuovi indirizzi IP, sarà necessario aggiornare anche i record DNS.
- Se si aggiornano i record DNS nella zona DNS privata, assicurarsi che l'host da cui si sta tentando di connettersi usi i record DNS aggiornati. È possibile verificarlo usando il
nslookup
comando . Se si nota che gli aggiornamenti non si riflettono nell'output, potrebbe essere necessario scaricare la cache DNS nel computer e riprovare.
Passaggi successivi
Per le procedure consigliate associate, vedere Procedure consigliate per la connettività di rete e la sicurezza nel servizio Azure Kubernetes.
Azure Kubernetes Service