Condividi tramite


Creare un cluster Servizio Azure Kubernetes (AKS) privato

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

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:

Hub e spoke del cluster privato

  • 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 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 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-zone l'ID risorsa. Collegare quella zona alla rete virtuale appropriata, ad esempio alla rete virtuale dell'hub, e impostare publicDNS su false / usare --disable-public-fqdn.
      • Solo DNS pubblico: disabilitare la creazione della zona privata impostando privateDNSZone / --private-dns-zonesu nonee lasciare publicDNS il valore predefinito (true) / non usare --disable-public-fqdn.
  • 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 RouteTable nel 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-fqdn contemporaneamente 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
  1. Creare un file denominato main.tf e 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
    }
    
  2. Aggiungere il codice seguente a main.tf per 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"
    }
    
  3. Aggiungere il codice seguente a main.tf per creare un gruppo di risorse Azure:

    resource "azurerm_resource_group" "this" {
      name     = var.resource_group_name
      location = var.location
    }
    
  4. Aggiungere il codice seguente a main.tf per 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"
      }
    }
    
  5. 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
  1. Creare un file denominato main.tf e 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
    }
    
  2. Aggiungere il codice seguente a main.tf per 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"
    }
    
  3. Aggiungere il codice seguente a main.tf per 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"]
    }
    
  4. Aggiungi il seguente codice a main.tf per 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"
      }
    }
    
  5. 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. none disabilita 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
  1. 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.

  2. Aggiungere il seguente codice a main.tf per 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"
      }
    }
    
  3. 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
  1. Aggiungere il seguente codice all'esistente main.tf per 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"
      }
    }
    
  2. Applicare la configurazione aggiornata di Terraform utilizzando i comandi terraform plan e terraform 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.ContainerService in 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. none disabilita 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
  1. 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.

  2. Aggiungere il codice seguente a main.tf per 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"
     }
    }
    
  3. 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

  1. 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.

  2. Aggiungere il codice seguente a main.tf per 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"
     }
    }
    
  3. 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.io o <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.

  1. 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.

  2. Aggiungere il codice a main.tf per 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
     ]
    }
    
  3. 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
  1. 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.

  2. Aggiungere il codice seguente a main.tf per 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"
     }
    }
    
  3. 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
  1. Aggiungere il seguente codice all'esistente main.tf per 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"
     }
    }
    
  2. Applicare la configurazione aggiornata di Terraform utilizzando i comandi terraform plan e terraform 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.

  1. Configurare kubectl per connettersi al cluster Kubernetes usando il comando az 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>
    
  2. Verificare la connessione al cluster usando il comando kubectl get. Questo comando restituisce un elenco dei nodi del cluster.

    kubectl get nodes
    

    Il 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