Creare un cluster del servizio Azure Kubernetes privato

Questo articolo illustra come 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 servizio Azure Kubernetes con Integrazione rete virtuale del server API (anteprima).

Panoramica

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 nella rete privata.

Il piano di controllo o il server API si trova in un gruppo di risorse di Azure gestito dal servizio Azure Kubernetes e 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 FQDN privato con una zona DNS privata e un FQDN pubblico aggiuntivo con un record corrispondente A in DNS pubblico di Azure. I nodi agente continuano a usare il A record nella zona DNS privata per risolvere l'indirizzo IP privato dell'endpoint privato per la comunicazione con il server API.

Aree di disponibilità

I cluster privati sono disponibili in aree pubbliche, Azure per enti pubblici e Microsoft Azure gestito da 21 areevianet in cui è supportato il servizio Azure Kubernetes.

Prerequisiti

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 usare 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 contenitori e la rete virtuale del cluster privato.
  • Se si elimina o si modifica l'endpoint privato nella subnet del cliente, il cluster smette di funzionare.
  • Il servizio Collegamento privato di Azure è supportato solo in Azure Load Balancer Standard. Azure Load Balancer di base non è supportato.

Creare un cluster AKS privato

  1. 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>
    
  2. Creare un cluster privato con la rete di base predefinita usando il comando az aks create con il flag --enable-private-cluster.

    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --generate-ssh-keys
    

Connettersi al cluster 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
    

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

  • Disabilitare un FQDN pubblico quando si crea un cluster del servizio Azure Kubernetes privato usando il az aks create comando con il --disable-public-fqdn flag .

    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resourceID> \
        --private-dns-zone <private-dns-zone-mode> \
        --disable-public-fqdn \
        --generate-ssh-keys
    

Disabilitare un FQDN pubblico in un cluster esistente

  • Disabilitare un FQDN pubblico in un cluster del servizio Azure Kubernetes esistente usando il comando az aks update con il flag --disable-public-fqdn.

    az aks update \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --disable-public-fqdn
    

Configura una zona DNS privato

È possibile configurare zone DNS private usando i parametri seguenti:

  • system: 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.
  • none: 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. Non è possibile modificare o eliminare questa risorsa dopo la creazione del cluster, perché può causare problemi di prestazioni e errori di aggiornamento del cluster.
    • Se la zona DNS privata si trova in una sottoscrizione diversa rispetto al cluster del servizio Azure Kubernetes, è necessario registrare il Microsoft.ContainerServices provider di Azure in entrambe le sottoscrizioni.
    • È possibile usare fqdn-subdomain con CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID solo per fornire funzionalità di sottodominio a privatelink.<region>.azmk8s.io.
    • Se il cluster del servizio Azure Kubernetes è configurato con un'entità servizio Active Directory, il servizio Azure Kubernetes non supporta l'uso di un'identità gestita assegnata dal sistema con una zona DNS privata personalizzata. Il cluster deve usare l'autenticazione dell'identità gestita assegnata dall'utente.
    • Se si specifica un oggetto <subzone>, è previsto un limite di 32 caratteri per il <subzone> nome.

Nota

È possibile configurare CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID usando un modello di Resource Manager o l'interfaccia della riga di comando di Azure. privateDNSZone accetta la zona resourceID DNZ privata, come illustrato nell'esempio seguente:

properties.apiServerAccessProfile.privateDNSZone.
"apiServerAccessProfile": {
"enablePrivateCluster": true,
"privateDNSZone": "system|none|[resourceId(..., 'Microsoft.Network/privateDnsZones', 'privatelink.<region>.azmk8s.io']"
}

Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata

  • Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata usando il comando az aks create con i flag seguenti:

    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resourceID> \
        --private-dns-zone [system|none] \
        --generate-ssh-keys
    

Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata personalizzata o una sottozona DNS privata

  • Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata personalizzata o una sottozona usando il comando az aks create con i flag seguenti:

    # The custom private DNS zone name should be in the following format: "<subzone>.privatelink.<region>.azmk8s.io"
    
    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resourceID> \
        --private-dns-zone <custom private dns zone or custom private dns subzone resourceID> \
        --generate-ssh-keys
    

Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata personalizzata e un sottodominio personalizzato

  • Creare un cluster del servizio Azure Kubernetes privato con una zona DNS privata personalizzata e un sottodominio usando il comando az aks create con i flag seguenti:

    # The custom private DNS zone name should be in one of the following formats: "privatelink.<region>.azmk8s.io" or "<subzone>.privatelink.<region>.azmk8s.io"
    
    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resourceID> \
        --private-dns-zone <custom private dns zone resourceID> \
        --fqdn-subdomain <subdomain> \
        --generate-ssh-keys
    

Aggiornare un cluster privato da una zona DNS privata a pubblico

È possibile eseguire l'aggiornamento solo da byo o system a none. Non sono supportate altre combinazioni di valori di aggiornamento. Prima dell'aggiornamento, assicurarsi di connettersi al cluster privato.

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 del servizio Azure Kubernetes che usa Azure set di scalabilità di macchine virtuali 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 comando az aks update con i flag seguenti:

    az aks update \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --private-dns-zone none
    

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 all'Rete virtuale (VNet) del cluster del servizio Azure Kubernetes. Sono disponibili diverse opzioni per stabilire la connettività di rete al cluster privato:

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

Per usare il peering di rete virtuale, è necessario configurare un collegamento tra la rete virtuale e la zona DNS privata.

  1. Nella portale di Azure passare al gruppo di risorse del nodo e selezionare la risorsa zona DNS privata.
  2. Nel menu del servizio, in Gestione DNS selezionare Rete virtuale Collegamenti>Aggiungi.
  3. Nella pagina Aggiungi collegamento Rete virtuale configurare le impostazioni seguenti:
    • Nome collegamento: immettere un nome per il collegamento alla rete virtuale.
    • Rete virtuale: selezionare la rete virtuale che contiene la macchina virtuale.
  4. Selezionare Crea per creare il collegamento alla rete virtuale.
  5. Passare al gruppo di risorse che contiene la rete virtuale del cluster e selezionare la risorsa di rete virtuale.
  6. Nel menu del servizio, in Impostazioni, selezionare Peering>Aggiungi.
  7. Nella pagina Aggiungi peering configurare le impostazioni seguenti:
    • Nome collegamento di peering: immettere un nome per il collegamento di peering.
    • Rete virtuale: selezionare la rete virtuale della macchina virtuale.
  8. Selezionare Aggiungi per creare il collegamento di peering.

Per altre informazioni, vedere Peering di rete virtuale.

Hub e spoke con DNS personalizzato

Le architetture hub e spoke vengono comunemente usate per distribuire le reti in Azure. In molte di queste distribuzioni, le impostazioni DNS nelle reti virtuali spoke sono configurate in modo da fare riferimento a un server d'inoltro DNS centrale per consentire la risoluzione DNS locale e basata su Azure.

Hub e spoke del cluster privato

Quando si distribuisce un cluster del servizio Azure Kubernetes in un ambiente di rete di questo tipo, è necessario tenere presenti alcune considerazioni speciali:

  • Quando viene effettuato il provisioning di un cluster privato, nel gruppo di risorse gestito dal cluster vengono creati un endpoint privato (1) e una zona DNS privata (2) per impostazione predefinita. Il cluster usa un record A nella zona privata per risolvere l'indirizzo IP dell'endpoint privato per la comunicazione con il server API.
  • La zona DNS privata è collegata solo alla VNet a cui sono collegati i nodi del cluster (3). Ciò significa che l'endpoint privato può essere risolto solo dagli host in tale VNet collegata. Negli scenari in cui non è configurato alcun DNS personalizzato nella rete virtuale (impostazione predefinita), questa operazione funziona senza problemi come host che puntano a 168.63.129.16 per DNS in grado di risolvere i record nella zona DNS privata a causa del collegamento.
  • Negli scenari in cui la VNet che contiene il cluster dispone di impostazioni DNS personalizzate (4), la distribuzione del cluster ha esito negativo a meno che la zona DNS privata non sia collegata alla VNet che contiene i resolver DNS personalizzati (5). Questo collegamento può essere creato manualmente dopo la creazione della zona privata durante il provisioning del cluster o tramite l'automazione al rilevamento della creazione della zona usando meccanismi di distribuzione basati su eventi, ad esempio Griglia di eventi di Azure e Funzioni di Azure. Per evitare errori del cluster durante la distribuzione iniziale, il cluster può essere distribuito con l'ID risorsa della zona DNS privata. Questo funziona solo con il tipo di risorsa Microsoft.ContainerService/managedCluster e la versione dell'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. Creare un nuovo endpoint privato nella rete virtuale contenente le risorse che utilizzano e quindi creare un collegamento tra la rete virtuale e una nuova zona DNS privata nella stessa rete.

Importante

Se la rete virtuale è configurata con server DNS personalizzati, è 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. Nella home page portale di Azure selezionare Crea una risorsa.
  2. Cercare Endpoint privato e selezionare Crea>endpoint privato.
  3. Seleziona Crea.
  4. Nella scheda Informazioni di base configurare le impostazioni seguenti:
    • Dettagli di progetto
      • Sottoscrizione: selezionare la sottoscrizione in cui si trova il cluster privato.
      • Gruppo di risorse: selezionare il gruppo di risorse che contiene la rete virtuale.
    • Dettagli istanza
      • Nome: immettere un nome per l'endpoint privato, ad esempio myPrivateEndpoint.
      • Area: selezionare la stessa area della rete virtuale.
  5. Selezionare Avanti: Risorsa e configurare le impostazioni seguenti:
    • Metodo di connessione: selezionare Connetti a una risorsa di Azure nella directory.
    • Sottoscrizione: selezionare la sottoscrizione in cui si trova il cluster privato.
    • Tipo di risorsa: selezionare Microsoft.ContainerService/managedClusters.
    • Risorsa: selezionare il cluster privato.
    • Sotto-risorsa di destinazione: selezionare gestione.
  6. Selezionare Avanti: Rete virtuale e configurare le impostazioni seguenti:
    • Networking
      • Rete virtuale: selezionare la rete virtuale.
      • Subnet: selezionare la subnet.
  7. Selezionare Avanti: DNS>Avanti: Tag e (facoltativamente) configurare i valori chiave in base alle esigenze.
  8. Selezionare Avanti: Rivedi e crea>Crea.

Dopo aver creato la risorsa, registrare l'indirizzo IP privato dell'endpoint privato per un uso futuro.

Creare una zona DNS privato

Dopo aver creato l'endpoint privato, creare una nuova zona DNS privata con lo stesso nome della zona DNS privata creata dal cluster privato. Ricordarsi di creare questa zona DNS nella rete virtuale contenente le risorse che usano.

  1. Nella portale di Azure passare al gruppo di risorse del nodo e selezionare la risorsa zona DNS privata.
  2. Nel menu del servizio, in Gestione DNS selezionare Recordset e tenere presente quanto segue:
    • Nome della zona DNS privata, che segue il modello *.privatelink.<region>.azmk8s.io.
    • Nome del record A (escluso il nome DNS privato).
    • Durata (TTL).
  3. Nella home page portale di Azure selezionare Crea una risorsa.
  4. Cercare DNS privato zona e selezionare Crea> DNS privato zona.
  5. Nella scheda Informazioni di base configurare le impostazioni seguenti:
    • Dettagli del progetto:
      • Selezionare la propria sottoscrizione.
      • Selezionare il gruppo di risorse in cui è stato creato l'endpoint privato.
    • Dettagli istanza
      • Nome: immettere il nome della zona DNS recuperata dai passaggi precedenti.
      • Per impostazione predefinita, l'area è la posizione del gruppo di risorse.
  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. Nel menu del servizio, in Gestione DNS, selezionare Recordset>Aggiungi.
  3. Nella pagina Aggiungi set di record configurare le impostazioni seguenti:
    • Nome: immettere il nome recuperato dal A record nella zona DNS del cluster privato.
    • Tipo: selezionare A - Record indirizzo.
    • TTL: immettere il numero del record A nella zona DNS del cluster privato.
    • Unità TTL: modificare il valore dell'elenco a discesa in modo che corrisponda a quello nel record A dalla zona DNS del cluster privato.
    • Indirizzo IP: immettere l'indirizzo IP dell'endpoint privato creato.
  4. Selezionare Aggiungi per creare il A record.

Importante

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

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 menu del servizio, in Gestione DNS selezionare Rete virtuale Collegamenti>Aggiungi.
  3. Nella pagina Aggiungi collegamento Rete virtuale configurare le impostazioni seguenti:
    • Nome collegamento: immettere un nome per il collegamento alla rete virtuale.
    • Sottoscrizione: selezionare la sottoscrizione in cui si trova il cluster privato.
    • Rete virtuale: selezionare la rete virtuale del cluster privato.
  4. Selezionare Crea per creare il collegamento.

Il completamento dell'operazione potrebbe richiedere alcuni minuti. Dopo aver creato il collegamento alla rete virtuale, è possibile accedervi dalla scheda collegamenti Rete virtuale usata nel passaggio 2.

Avviso

  • Se il cluster privato viene arrestato e riavviato, il servizio di collegamento privato originale del cluster privato viene rimosso e ricreato, interrompendo la connessione tra l'endpoint privato e il cluster privato. Per risolvere questo problema, eliminare e ricreare tutti gli endpoint privati creati dall'utente collegati al cluster privato. Se gli endpoint privati ricreati hanno nuovi indirizzi IP, sarà necessario aggiornare anche i record DNS.
  • Se si aggiornano i record DNS nella zona DNS privata, assicurarsi che l'host da cui si sta tentando di connettersi usi i record DNS aggiornati. È possibile verificarlo usando il nslookup comando . Se si nota che gli aggiornamenti non si riflettono nell'output, potrebbe essere necessario scaricare la cache DNS nel computer e riprovare.

Passaggi successivi

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