Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come distribuire un cluster del servizio Azure Kubernetes basato su collegamento privato usando interfaccia della riga di comando di Azure o Terraform. Se si è interessati a creare un cluster del servizio Azure Kubernetes senza collegamento privato o tunnel necessario, vedere Creare un cluster Servizio Azure Kubernetes (AKS) con integrazione rete virtuale del server API.
Panoramica dei cluster privati in AKS
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 gestito da Azure AKS, e il tuo cluster o il pool di nodi si trova nel tuo 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 dell'API server e un endpoint privato esposto sulla subnet del cluster di AKS.
Quando si crea un cluster del servizio Azure Kubernetes privato, il servizio Azure Kubernetes crea nomi di dominio privati e pubblici completi (FQDN) con le zone DNS corrispondenti per impostazione predefinita. Per informazioni dettagliate su opzioni di configurazione DNS, vedere Configurare una zona DNS privata, una sottozone DNS privata o un sottodominio personalizzato.
Aree di disponibilità
I cluster privati sono disponibili in regioni pubbliche, Azure per enti pubblici e Microsoft Azure gestito da 21Vianet nelle regioni in cui AKS è supportato.
Importante
Tutte le funzionalità di Microsoft Defender per il cloud verranno ritirate ufficialmente nella regione cinese di Azure il 18 agosto 2026. A causa di questo prossimo ritiro, Azure clienti in Cina non sono più in grado di eseguire l'onboarding di nuove sottoscrizioni al servizio. Una nuova sottoscrizione è una sottoscrizione che non era ancora stata integrata nel servizio Microsoft Defender per Cloud prima del 18 agosto 2025, data dell'annuncio del ritiro. Per altre informazioni sul ritiro, vedere Microsoft Defender per il cloud Deprecation in Microsoft Azure Gestito da 21Vianet Announcement.
I clienti devono collaborare con i propri rappresentanti del conto per Microsoft Azure gestito da 21Vianet per valutare l'impatto di questo ritiro sulle proprie operazioni.
Prerequisiti per i cluster AKS privati
Sottoscrizione attiva Azure. Se non si ha una sottoscrizione Azure, creare un account free prima di iniziare.
Impostare il contesto della sottoscrizione usando il
az account setcomando . Per esempio:az account set --subscription "00000000-0000-0000-0000-000000000000"interfaccia della riga di comando di Azure versione 2.28.0 o successiva. Trova la versione usando il comando
az --version. Se è necessario installare o aggiornare, vedere Installare interfaccia della riga di comando di Azure.Se si utilizza l'Azure Resource Manager (ARM) o l'API REST di Azure, la versione dell'API AKS deve essere 2021-05-01 o versione successiva.
Per usare un server DNS personalizzato, aggiungere l'indirizzo IP pubblico Azure 168.63.129.16 come server DNS upstream nel server DNS personalizzato e assicurarsi di aggiungere questo indirizzo IP pubblico come first server DNS. Per ulteriori 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 Azure services DNS zone configuration.
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, vedere Abilitare o disabilitare la modalità cluster privato in un cluster esistente con integrazione rete virtuale del server API.
Se è necessario abilitare Registro Azure Container in un cluster AKS privato, configurare un collegamento privato per Registro Azure Container nella rete virtuale del cluster (VNet) o impostare il peering tra la rete virtuale di Registro Azure Container e la rete virtuale del cluster privato.
kubectl installato. È possibile installarlo in locale usando il
az aks install-clicomando .
- Terraform installato localmente. Per istruzioni di installazione, vedere Installare Terraform.
Importante
A partire da November 30, 2025, Servizio Azure Kubernetes (AKS) non supporta più o fornisce aggiornamenti della sicurezza per Azure Linux 2.0. L'immagine del nodo Azure Linux 2.0 è congelata alla versione 202512.06.0. A partire dal 31 marzo 2026, le immagini dei nodi verranno rimosse e non sarà possibile ridimensionare i pool di nodi. Effettuare la migrazione a una versione supportata di Linux su Azure aggiornando i pool di nodi a una versione supportata di Kubernetes o effettuando la migrazione a osSku AzureLinux3. Per altre informazioni, vedere Retirement GitHub issue e annuncio di ritiro degli aggiornamenti di Azure. Per rimanere informati sugli annunci e sugli aggiornamenti, segui le note di rilascio di AKS.
Limitazioni
- Gli intervalli ip autorizzati si applicano solo al server API pubblico. Non è possibile applicare questi intervalli all'endpoint del server API privato.
- Le limitazioni del servizio di collegamento privato di Azure sono applicate ai cluster privati.
- Non è disponibile alcun supporto per gli agenti ospitati Azure DevOps Microsoft con cluster privati. Considera l'uso di agenti autogestiti.
- L'eliminazione o la modifica dell'endpoint privato nella subnet del cliente causa l'interruzione del funzionamento del cluster.
- collegamento privato di Azure servizio è supportato solo in Azure Load Balancer Standard. La Azure Load Balancer di base non è supportata.
Hub e spoke con DNS personalizzato per i cluster privati Azure Kubernetes Service (AKS)
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 per fare riferimento a un server d'inoltro DNS centrale per consentire la risoluzione DNS locale e basata su Azure.
Il diagramma seguente illustra un'architettura hub-spoke per un cluster del servizio Azure Kubernetes privato con DNS personalizzato:
- Quando viene creato un cluster privato, un endpoint privato (1) e una zona DNS privata (2) vengono creati nel gruppo di risorse gestito dal cluster per impostazione predefinita. Il cluster usa un record
Anella zona privata per risolvere l'indirizzo IP dell'endpoint privato per la comunicazione con il server API. - La zona DNS privata è collegata solo alla rete virtuale a cui sono collegati i nodi del cluster (3), il che significa che l'endpoint privato può essere risolto solo dagli host in tale rete virtuale collegata. Negli scenari in cui non è configurato alcun DNS personalizzato sulla rete virtuale (predefinito), funziona senza problemi poiché gli host puntano a 168.63.129.16 per il DNS, che risolve i record nella zona DNS privata grazie al collegamento.
- Se si mantiene il comportamento predefinito della zona DNS privata, AKS tenta di collegare la zona direttamente alla rete virtuale Spoke che ospita il cluster anche quando la zona è già collegata a una rete virtuale Hub.
- Nelle reti virtuali spoke che usano server DNS personalizzati, questa azione può non riuscire se l'identità gestita del cluster non dispone di Collaboratore di rete nella rete virtuale spoke. Per evitare l'errore, scegliere una delle configurazioni supportate seguenti:
-
Zona DNS privata personalizzata: specificare una zona privata esistente e impostarne
privateDNSZone/--private-dns-zonel'ID risorsa. Collegare quella zona alla rete virtuale appropriata, ad esempio alla rete virtuale dell'hub, e impostarepublicDNSsufalse/ usare--disable-public-fqdn. -
Solo DNS pubblico: disabilitare la creazione della zona privata impostando
privateDNSZone/--private-dns-zonesunonee lasciarepublicDNSil valore predefinito (true) / non usare--disable-public-fqdn.
-
Zona DNS privata personalizzata: specificare una zona privata esistente e impostarne
- Nelle reti virtuali spoke che usano server DNS personalizzati, questa azione può non riuscire se l'identità gestita del cluster non dispone di Collaboratore di rete nella rete virtuale spoke. Per evitare l'errore, scegliere una delle configurazioni supportate seguenti:
- Se stai utilizzando una tabella di route BYO (Bring Your Own) con kubenet e DNS BYO con cluster privati, la creazione del cluster non riesce. Dopo che la creazione del cluster non è riuscita, è necessario associare l'oggetto
RouteTablenel gruppo di risorse del nodo alla subnet.
Limitazioni per i cluster del servizio Azure Kubernetes privati con DNS personalizzato
- L'impostazione su
privateDNSZone/--private-dns-zonenoneepublicDNS: false/--disable-public-fqdncontemporaneamente non è supportata. - L'inoltro condizionale non supporta i sottodomini.
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 \
--name <private-cluster-resource-group> \
--location <location>
Creare un cluster AKS privato con la rete di base di default
Creare un cluster privato con la rete di base predefinita usando il comando az aks create con il flag --enable-private-cluster.
Parametri chiave in questo comando:
-
--enable-private-cluster: abilita la modalità cluster privato.
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--generate-ssh-keys
Creare un file denominato
main.tfe aggiungere il codice seguente per definire la versione di Terraform e specificare il provider Azure:terraform { required_version = ">= 1.3.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} subscription_id = var.subscription_id }Aggiungere il codice seguente a
main.tfper creare variabili di input per l'ID della sottoscrizione di Azure, il gruppo di risorse, l'area geografica e il nome del cluster AKS. È possibile modificare i valori predefiniti in base alle esigenze.variable "subscription_id" { description = "The Azure subscription ID." type = string } variable "resource_group_name" { description = "The name of the resource group for the AKS cluster." type = string default = "rg-private-aks-basic" } variable "location" { description = "The Azure region where the resources will be created." type = string default = "eastus" } variable "aks_cluster_name" { description = "The name of the AKS cluster." type = string default = "aks-private-basic" }Aggiungere il codice seguente a
main.tfper creare un gruppo di risorse Azure:resource "azurerm_resource_group" "this" { name = var.resource_group_name location = var.location }Aggiungere il codice seguente a
main.tfper creare un cluster AKS privato con la rete di base.resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privatebasicaks" private_cluster_enabled = true default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" } identity { type = "SystemAssigned" } network_profile { load_balancer_sku = "standard" network_plugin = "kubenet" } }Seguire la procedura per inizializzare Terraform, formattare e convalidare la configurazione terraform, creare un piano di esecuzione Terraform, applicare la configurazione terraform e connettersi al cluster del servizio Azure Kubernetes.
Creare un cluster AKS privato con rete avanzata
Creare un cluster privato con funzionalità di rete avanzate usando il az aks create comando .
Parametri chiave in questo comando:
-
--enable-private-cluster: abilita la modalità cluster privato. -
--network-plugin azure: specifica il plug-in di rete CNI Azure. -
--vnet-subnet-id <subnet-id>: ID risorsa di una subnet esistente in una rete virtuale. -
--dns-service-ip <dns-service-ip>: indirizzo IP disponibile all'interno dell'intervallo di indirizzi del servizio Kubernetes da usare per il servizio DNS del cluster. Ad esempio:10.2.0.10. -
--service-cidr <service-cidr>: intervallo IP di notazione CIDR da cui assegnare indirizzi IP del cluster di servizi. Ad esempio:10.2.0.0/24.
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 <dns-service-ip> \
--service-cidr <service-cidr> \
--generate-ssh-keys
Creare un file denominato
main.tfe aggiungere il codice seguente per definire la versione di Terraform e specificare il provider Azure:terraform { required_version = ">= 1.3.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} subscription_id = var.subscription_id }Aggiungere il codice seguente a
main.tfper creare variabili di input per l'ID della sottoscrizione Azure, il nome del gruppo di risorse, la località, il nome del cluster AKS, il nome della rete virtuale (VNet) e il nome della subnet. È possibile modificare i valori predefiniti in base alle esigenze.variable "subscription_id" { description = "The Azure subscription ID." type = string } variable "resource_group_name" { description = "The name of the resource group for the AKS cluster." type = string default = "rg-private-aks-advanced" } variable "location" { description = "The Azure region where the resources will be created." type = string default = "eastus" } variable "aks_cluster_name" { description = "The name of the AKS cluster." type = string default = "aks-private-advanced" } variable "vnet_name" { description = "The name of the virtual network." type = string default = "vnet-private-aks" } variable "subnet_name" { description = "The name of the subnet used by AKS." type = string default = "snet-aks" }Aggiungere il codice seguente a
main.tfper creare un gruppo di risorse Azure, una rete virtuale e una subnet:resource "azurerm_resource_group" "this" { name = var.resource_group_name location = var.location } resource "azurerm_virtual_network" "this" { name = var.vnet_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name address_space = ["10.0.0.0/8"] } resource "azurerm_subnet" "aks" { name = var.subnet_name resource_group_name = azurerm_resource_group.this.name virtual_network_name = azurerm_virtual_network.this.name address_prefixes = ["10.240.0.0/16"] }Aggiungi il seguente codice a
main.tfper creare il cluster AKS con funzionalità di rete avanzate.resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privateadvancedaks" private_cluster_enabled = true default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "SystemAssigned" } network_profile { load_balancer_sku = "standard" network_plugin = "azure" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }Seguire la procedura per inizializzare Terraform, formattare e convalidare la configurazione terraform, creare un piano di esecuzione Terraform, applicare la configurazione terraform e connettersi al cluster del servizio Azure Kubernetes.
Usare domini personalizzati con cluster privati di AKS
Per configurare domini personalizzati che possono essere risolti internamente, vedere Usare domini personalizzati.
Disabilitare un FQDN pubblico in un cluster del servizio Azure Kubernetes privato
Disabilitare un FQDN pubblico in un nuovo cluster
Disabilitare un FQDN pubblico durante la creazione di un cluster del servizio Azure Kubernetes privato usando il comandoaz aks create con il flag--disable-public-fqdn.
Parametri chiave in questo comando:
-
--disable-public-fqdn: disabilita il nome di dominio completo (FQDN) pubblico per il server API. -
--assign-identity <resource-id>: specifica l'identità gestita da usare per il cluster. -
--private-dns-zone [system|none]: specifica la zona DNS privata da usare per il cluster.systemè il valore predefinito durante la configurazione di una zona DNS privata. Se si omette--private-dns-zone, AKS crea una zona DNS privata nel gruppo di risorse del nodo.nonedisabilita la creazione di una zona DNS privata.
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resource-id> \
--private-dns-zone [system|none] \
--disable-public-fqdn \
--generate-ssh-keys
Seguire i passaggi da 1 a 3 in Creare un cluster del servizio Azure Kubernetes privato con rete avanzata o Creare un cluster del servizio Azure Kubernetes privato con rete di base predefinita per configurare la configurazione terraform e creare le risorse necessarie a seconda dello scenario. In questo esempio viene usata la rete avanzata.
Aggiungere il seguente codice a
main.tfper creare un cluster privato di Azure Kubernetes Service (AKS) con un'identità assegnata dall'utente e il nome di dominio completo pubblico disabilitato:resource "azurerm_user_assigned_identity" "aks" { name = "id-private-aks-public-fqdn-off" location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name } resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privateaks" private_cluster_enabled = true private_cluster_public_fqdn_enabled = false private_dns_zone_id = "System" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { load_balancer_sku = "standard" network_plugin = "azure" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }Seguire la procedura per inizializzare Terraform, formattare e convalidare la configurazione terraform, creare un piano di esecuzione Terraform, applicare la configurazione terraform e connettersi al cluster del servizio Azure Kubernetes.
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.
Parametri chiave in questo comando:
-
--disable-public-fqdn: disabilita il nome di dominio completo (FQDN) pubblico per il server API.
az aks update \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--disable-public-fqdn
Aggiungere il seguente codice all'esistente
main.tfper disabilitare il FQDN pubblico in un cluster AKS (Azure Kubernetes Service) esistente. In questo esempio viene usata la rete avanzata. È possibile modificarlo per usare la rete di base predefinita modificando le risorse e i parametri Terraform pertinenti.resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privateaks" private_cluster_enabled = true private_cluster_public_fqdn_enabled = false private_dns_zone_id = "System" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { load_balancer_sku = "standard" network_plugin = "azure" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }Applicare la configurazione aggiornata di Terraform utilizzando i comandi
terraform planeterraform apply.terraform plan terraform apply
Opzioni di configurazione per DNS privato
È possibile configurare le impostazioni DNS private per un cluster del servizio Azure Kubernetes privato usando il interfaccia della riga di comando di Azure (con il parametro --private-dns-zone) o un modello di Azure Resource Manager (ARM) (con la proprietà /privateDNSZone). La tabella seguente illustra le opzioni disponibili per il --private-dns-zone parametro/ privateDNSZone proprietà:
| Impostazione | Description |
|---|---|
system |
Valore predefinito durante la configurazione di una zona DNS privata. Se si omette --private-dns-zone / privateDNSZone, AKS crea una zona DNS privata nel gruppo di risorse del nodo. |
none |
Se si imposta --private-dns-zone / privateDNSZone su none, il servizio Azure Kubernetes non crea una zona DNS privata. |
<custom-private-dns-zone-resource-id> |
Per usare questo parametro, è necessario creare una zona DNS privata nel formato seguente per Azure cloud globale: privatelink.<region>.azmk8s.io o <subzone>.privatelink.<region>.azmk8s.io. Per un uso futuro è necessario l'ID risorsa della zona DNS privata. È necessaria anche un'identità utente assegnata o un'entità servizio con i ruoli DNS privato Zone Contributor e Network Contributor. Per i cluster che usano 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.
Non è possibile modificare o eliminare queste risorse dopo la creazione del cluster, perché possono causare problemi di prestazioni e errori di aggiornamento del cluster. È possibile usare --fqdn-subdomain <subdomain> con <custom-private-dns-zone-resource-id> solo per fornire funzionalità di sottodominio a privatelink.<region>.azmk8s.io. Se si specifica una sottozone, è previsto un limite di 32 caratteri per il <subzone> nome. |
Considerazioni sul DNS privato
Quando si configura il DNS privato per un cluster del servizio Azure Kubernetes privato, tenere presenti le considerazioni seguenti:
- Se la zona DNS privata si trova in una sottoscrizione diversa rispetto al cluster AKS, è necessario registrare il provider Azure
Microsoft.ContainerServicein entrambe le sottoscrizioni. - Se il cluster AKS è configurato con un'entità servizio Active Directory, AKS non supporta l'uso di un'identità gestita di sistema con una zona DNS privata personalizzata. Il cluster deve usare l'autenticazione dell'identità gestita assegnata dall'utente.
Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata
Creare un cluster AKS privato con una zona DNS privata utilizzando il comando az aks create.
Parametri chiave in questo comando:
-
--enable-private-cluster: abilita la modalità cluster privato. -
--private-dns-zone [system|none]: configura la zona DNS privata per il cluster.systemè il valore predefinito durante la configurazione di una zona DNS privata. Se si omette--private-dns-zone, AKS crea una zona DNS privata nel gruppo di risorse del nodo.nonedisabilita la creazione di una zona DNS privata. -
--assign-identity <resource-id>: L'ID risorsa di un'identità gestita assegnata dall'utente con i ruoli di Collaboratore della zona DNS privata e Collaboratore di rete.
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resource-id> \
--private-dns-zone [system|none] \
--generate-ssh-keys
Seguire i passaggi da 1 a 3 in Creare un cluster del servizio Azure Kubernetes privato con rete avanzata o Creare un cluster del servizio Azure Kubernetes privato con rete di base predefinita per configurare la configurazione terraform e creare le risorse necessarie a seconda dello scenario. In questo esempio viene usata la rete avanzata.
Aggiungere il codice seguente a
main.tfper creare un cluster AKS privato con una zona DNS privata gestita da AKS:resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-system-dns" private_cluster_enabled = true private_dns_zone_id = "System" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "SystemAssigned" } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }Seguire la procedura per inizializzare Terraform, formattare e convalidare la configurazione terraform, creare un piano di esecuzione Terraform, applicare la configurazione terraform e connettersi al cluster del servizio Azure Kubernetes.
Creare un cluster AKS privato senza una zona privata DNS
Seguire i passaggi da 1 a 3 in Creare un cluster del servizio Azure Kubernetes privato con rete avanzata o Creare un cluster del servizio Azure Kubernetes privato con rete di base predefinita per configurare la configurazione terraform e creare le risorse necessarie a seconda dello scenario. In questo esempio viene usata la rete avanzata.
Aggiungere il codice seguente a
main.tfper creare il cluster AKS senza una zona DNS privata.resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-no-dns" private_cluster_enabled = true private_dns_zone_id = "None" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "SystemAssigned" } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }Seguire la procedura per inizializzare Terraform, formattare e convalidare la configurazione terraform, creare un piano di esecuzione Terraform, applicare la configurazione terraform e connettersi al cluster del servizio Azure Kubernetes.
Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata personalizzata o una sottozona DNS privata
Creare un cluster privato di Azure Kubernetes Service (AKS) con una zona DNS privata personalizzata o un sottodominio utilizzando il comando az aks create.
Parametri chiave in questo comando:
-
--enable-private-cluster: abilita la modalità cluster privato. -
--private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>]: ID risorsa di una zona DNS privata o di una sottozone esistente nel formato seguente per Azure cloud globale:privatelink.<region>.azmk8s.ioo<subzone>.privatelink.<region>.azmk8s.io. -
--assign-identity <resource-id>: ID risorsa di un'identità gestita assegnata dall'utente con i ruoli di Collaboratore zona DNS privata e Collaboratore rete.
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resource-id> \
--private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>] \
--generate-ssh-keys
Quando si usa una zona DNS privata personalizzata, si è responsabili della creazione e della gestione dell'infrastruttura DNS invece di basarsi sul DNS gestito Azure. Ciò include la creazione della zona DNS, il collegamento alla VNet e l'assegnazione delle autorizzazioni necessarie affinché AKS gestisca i record.
Per le configurazioni DNS personalizzate, è necessario usare un'identità gestita assegnata dall'utente con i ruoli collaboratore DNS privato zona e Network Contributor.
Seguire i passaggi da 1 a 3 in Creare un cluster del servizio Azure Kubernetes privato con rete avanzata o Creare un cluster del servizio Azure Kubernetes privato con rete di base predefinita per configurare la configurazione terraform e creare le risorse necessarie a seconda dello scenario. In questo esempio viene usata la rete avanzata.
Aggiungere il codice a
main.tfper creare un cluster AKS privato con una zona DNS privata personalizzata o una sottozona:resource "azurerm_user_assigned_identity" "aks" { name = "aks-custom-dns-id" location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name } resource "azurerm_private_dns_zone" "aks" { name = "privatelink.eastus.azmk8s.io" resource_group_name = azurerm_resource_group.this.name } resource "azurerm_private_dns_zone_virtual_network_link" "link" { name = "aks-dns-link" resource_group_name = azurerm_resource_group.this.name private_dns_zone_name = azurerm_private_dns_zone.aks.name virtual_network_id = azurerm_virtual_network.this.id } resource "azurerm_role_assignment" "dns" { scope = azurerm_private_dns_zone.aks.id role_definition_name = "Private DNS Zone Contributor" principal_id = azurerm_user_assigned_identity.aks.principal_id } resource "azurerm_role_assignment" "network" { scope = azurerm_virtual_network.this.id role_definition_name = "Network Contributor" principal_id = azurerm_user_assigned_identity.aks.principal_id } resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-custom-dns" private_cluster_enabled = true private_dns_zone_id = azurerm_private_dns_zone.aks.id default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } depends_on = [ azurerm_role_assignment.dns, azurerm_role_assignment.network ] }Seguire la procedura per inizializzare Terraform, formattare e convalidare la configurazione terraform, creare un piano di esecuzione Terraform, applicare la configurazione terraform e connettersi al cluster del servizio Azure Kubernetes.
Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata personalizzata e un sottodominio personalizzato
Crea un cluster privato di AKS con una zona DNS privata personalizzata e un sottodominio usando il comando az aks create.
Parametri chiave in questo comando:
-
--enable-private-cluster: abilita la modalità cluster privato. -
--private-dns-zone <custom-private-dns-zone-resource-id>: ID risorsa di una zona DNS privata esistente nel formato seguente per Azure cloud globale:privatelink.<region>.azmk8s.io. -
--fqdn-subdomain <subdomain>Il sottodominio da usare per il FQDN del cluster all'interno della zona DNS privata personalizzata. -
--assign-identity <resource-id>: ID risorsa di un'identità gestita assegnata dall'utente con i ruoli Collaboratore zona DNS privato e Network Contributor.
az aks create \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--load-balancer-sku standard \
--enable-private-cluster \
--assign-identity <resource-id> \
--private-dns-zone <custom-private-dns-zone-resource-id> \
--fqdn-subdomain <subdomain> \
--generate-ssh-keys
Seguire i passaggi da 1 a 3 in Creare un cluster del servizio Azure Kubernetes privato con rete avanzata o Creare un cluster del servizio Azure Kubernetes privato con rete di base predefinita per configurare la configurazione terraform e creare le risorse necessarie a seconda dello scenario. In questo esempio viene usata la rete avanzata.
Aggiungere il codice seguente a
main.tfper creare un cluster privato del servizio Azure Kubernetes con una zona DNS privata personalizzata e un sottodominio.resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-subdomain" private_cluster_enabled = true private_dns_zone_id = azurerm_private_dns_zone.aks.id fqdn_subdomain = "team1" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }Seguire la procedura per inizializzare Terraform, formattare e convalidare la configurazione terraform, creare un piano di esecuzione Terraform, applicare la configurazione terraform e connettersi al cluster del servizio Azure Kubernetes.
Aggiornare un cluster AKS privato esistente da una zona DNS privata a una pubblica
È possibile eseguire l'aggiornamento solo da byo (bring your own) o system a none. Non sono supportate altre combinazioni di valori di aggiornamento.
Avviso
Quando si aggiorna un cluster privato da byo o system a none, i nodi dell'agente cambiano per usare un FQDN pubblico. In un cluster AKS che utilizza i set di scalabilità di macchine virtuali di Azure, viene eseguito un aggiornamento dell'immagine del nodo per aggiornare i nodi con il nome di dominio completo pubblico.
Aggiornare un cluster privato da byo o system a none usando il az aks update comando con il --private-dns-zone parametro impostato su none.
az aks update \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--private-dns-zone none
Aggiungere il seguente codice all'esistente
main.tfper aggiornare il cluster AKS privato da una zona DNS privata a una pubblica. In questo esempio viene usata la rete avanzata. È possibile modificarlo per usare la rete di base predefinita modificando le risorse e i parametri Terraform pertinenti.resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-update" private_cluster_enabled = true private_dns_zone_id = "None" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }Applicare la configurazione aggiornata di Terraform utilizzando i comandi
terraform planeterraform apply.terraform plan terraform apply
Inizializzare Terraform
Inizializzare Terraform nella directory contenente il main.tf file usando il terraform init comando . Questo comando scarica il provider di Azure necessario per gestire le risorse Azure con Terraform.
terraform init
Formattare e convalidare la configurazione di Terraform
Formattare e convalidare la configurazione di Terraform usando i terraform fmt comandi e terraform validate .
terraform fmt
terraform validate
Crea un piano di esecuzione di Terraform
Creare un piano di esecuzione terraform usando il comando terraform plan. Questo comando mostra le risorse che Terraform creerà o modificherà nella sottoscrizione Azure.
terraform plan -var="subscription_id=<your-subscription-id>"
Applicare la configurazione di Terraform
Dopo aver esaminato e confermato il piano di esecuzione, applicare la configurazione di Terraform usando il terraform apply comando . Questo comando crea o modifica le risorse definite nel file main.tf nella sottoscrizione Azure.
terraform apply -var="subscription_id=<your-subscription-id>"
Configurare kubectl per connettersi a un cluster AKS privato
Per gestire un cluster Kubernetes, usare il client da riga di comando kubernetes kubectl.
kubectl è già installato se si usa Azure Cloud Shell. Per installare kubectl in locale, usare il comando az aks install-cli.
Configurare
kubectlper connettersi al cluster Kubernetes usando il comandoaz aks get-credentials. Questo comando scarica le credenziali e configura l'interfaccia della riga di comando di Kubernetes per usarli.az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>Verificare la connessione al cluster usando il comando
kubectl get. Questo comando restituisce un elenco dei nodi del cluster.kubectl get nodesIl comando restituisce un output simile all'output di esempio seguente:
NAME STATUS ROLES AGE VERSION aks-nodepool1-12345678-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-12345678-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-12345678-vmss000002 Ready agent 3h6m v1.15.11