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 eseguire az 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?

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.
  • Non è disponibile alcun supporto per la conversione di cluster del servizio Azure Kubernetes esistenti in cluster privati.
  • 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 -l eastus -n 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 -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster  

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 

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 -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <private-dns-zone-mode> --disable-public-fqdn

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 -n <private-cluster-name> -g <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 di private.<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.
    • 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 -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone [system|none]

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 -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone or custom private dns subzone resourceID>

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 -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone resourceID> --fqdn-subdomain <subdomain>

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 -n <private-cluster-name> -g <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:

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.

  1. Nel browser passare al portale di Azure.
  2. Dal portale di Azure passare al gruppo di risorse del nodo.
  3. Selezionare la zona DNS privato.
  4. Nel riquadro sinistro selezionare Rete virtuale.
  5. Creare un nuovo collegamento per aggiungere la rete virtuale della macchina virtuale alla zona DNS privata. Sono necessari alcuni minuti per rendere disponibile il collegamento per la zona DNS.
  6. Nel portale di Azure passare al gruppo di risorse che contiene la rete virtuale del cluster.
  7. Nel riquadro a destra, selezionare la rete virtuale. Il nome della rete virtuale è nel modulo aks-vnet-.
  8. Nel riquadro a sinistra selezionare Peering.
  9. Selezionare Aggiungi, aggiungere la rete virtuale della macchina virtuale, quindi creare il 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:

Private cluster hub and spoke

  • 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'API 2022-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. Per usare un endpoint privato, creare un nuovo endpoint privato nella rete virtuale e quindi creare un collegamento tra la rete virtuale e una nuova zona DNS privata.

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:

  1. Nel browser passare al portale di Azure.
  2. Dal menu del portale di Azure, selezionare Crea una risorsa.
  3. Cercare Endpoint privato e selezionare Crea endpoint > privato.
  4. Seleziona Crea.
  5. Nella scheda Informazioni di base configurare le opzioni seguenti:
    • Dettagli del progetto:
      • Selezionare una sottoscrizione di Azure.
      • Selezionare il gruppo di risorse di Azure in cui si trova la rete virtuale.
    • Dettagli dell'istanza:
      • Immettere un nome per l'endpoint privato, ad esempio myPrivateEndpoint.
      • Selezionare un'area per l'endpoint privato.

Importante

Verificare che l'area selezionata corrisponda alla rete virtuale da cui si vuole connettersi. In caso contrario, la rete virtuale non verrà visualizzata nella scheda Configurazione.

  1. Selezionare Avanti: Risorsa e configurare le opzioni 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.
  2. Selezionare Avanti: Rete virtuale e configurare le opzioni seguenti:
    • Rete:
      • Rete virtuale: selezionare la rete virtuale.
      • Subnet: selezionare la subnet.
  3. Selezionare Avanti: DNS>Avanti: Tag e (facoltativamente) configurare i valori chiave in base alle esigenze.
  4. 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:

  1. Passare al gruppo di risorse del nodo nel portale di Azure.
  2. Selezionare la zona DNS privata e il record:
    • Nome della zona DNS privata, che segue il modello *.privatelink.<region>.azmk8s.io.
    • Nome del record A (escluso il nome DNS privato).
    • Durata (TTL).
  3. Nel portale di Azure selezionare Crea una risorsa.
  4. Cercare zona DNS privata e selezionare Crea zona DNS privata >.
  5. Nella scheda Informazioni di base configurare le opzioni seguenti:
    • Dettagli del progetto:
      • Selezionare la propria sottoscrizione.
      • Selezionare il gruppo di risorse in cui è stato creato l'endpoint privato.
    • Dettagli dell'istanza:
      • Immettere il nome della zona DNS recuperata dai passaggi precedenti.
      • Per impostazione predefinita, l'area è la posizione del gruppo di risorse.
  6. 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:

  1. Passare alla zona DNS privata creata nei passaggi precedenti.
  2. Nella pagina Panoramica selezionare Set di record.
  3. Nella scheda Aggiungi set di record configurare le opzioni seguenti:
    • Nome: immettere il nome recuperato dal record A 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.

Importante

Quando si crea il record A, usare solo il nome e non il nome di dominio completo (FQDN).

Dopo aver creato il record A, collegare la zona DNS privata alla rete virtuale che accederà al cluster privato:

  1. Passare alla zona DNS privata creata nei passaggi precedenti.
  2. Nel riquadro sinistro selezionare Collegamenti di rete virtuale.
  3. Selezionare Aggiungi e configurare le opzioni 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.
  4. Seleziona OK per creare il collegamento.

Il completamento dell'operazione potrebbe richiedere alcuni minuti. Dopo aver creato il collegamento alla rete virtuale, è possibile accedervi dalla scheda dei collegamenti di 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.

Passaggi successivi

Per le procedure consigliate associate, vedere Procedure consigliate per la connettività di rete e la sicurezza nel servizio Azure Kubernetes.