Condividi tramite


Creare un cluster di servizio Azure Kubernetes (AKS) isolato di rete (anteprima)

Le organizzazioni in genere hanno requisiti rigorosi di sicurezza e conformità per regolare il traffico di rete in uscita (in uscita) da un cluster per eliminare i rischi di esfiltrazione dei dati. Per impostazione predefinita, i cluster servizio Azure Kubernetes (servizio Azure Kubernetes) hanno accesso a Internet in uscita senza restrizioni. Questo livello di accesso alla rete consente a nodi e servizi in esecuzione di accedere alle risorse esterne in base alle esigenze. Se si vuole limitare il traffico in uscita, è necessario rendere accessibile un numero limitato di porte e indirizzi per mantenere l'integrità delle attività di manutenzione del cluster.

Una soluzione per proteggere gli indirizzi in uscita consiste nell'usare un dispositivo firewall in grado di controllare il traffico in uscita in base ai nomi di dominio.

Un'altra soluzione, un cluster del servizio Azure Kubernetes isolato di rete (anteprima), semplifica la configurazione delle restrizioni in uscita per un cluster istanza predefinita. Un cluster del servizio Azure Kubernetes isolato di rete riduce il rischio di esfiltrazione dei dati o di esposizione involontaria degli endpoint pubblici del cluster.

Importante

Le funzionalità di anteprima del servizio Azure Kubernetes sono disponibili in modalità self-service e opzionale. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

Operazioni preliminari

  • Leggere la panoramica concettuale di questa funzionalità, che fornisce una spiegazione del funzionamento dei cluster isolati dalla rete. L'articolo di panoramica include anche:
    • Illustra i due metodi di accesso, il Registro Azure Kubernetes gestito dal servizio Azure Kubernetes o il Registro Azure Container BYO, tra cui scegliere in questo articolo.
    • Descrive le limitazioni correnti.
  • Questo articolo richiede la versione 2.63.0 o successiva dell'interfaccia della riga di comando di Azure. Se si sta usando Azure Cloud Shell, la versione più recente è già installata.

  • Installare l'estensione dell'interfaccia della aks-preview riga di comando di Azure versione 9.0.0b2 o successiva.

    • Se l'estensione aks-preview non è già disponibile, installarla usando il az extension add comando .

      az extension add --name aks-preview
      
    • Se l'estensione aks-preview è già disponibile, aggiornarla per assicurarsi di avere la versione più recente usando il az extension update comando .

      az extension update --name aks-preview
      
  • Registrare il flag di NetworkIsolatedClusterPreview funzionalità usando il comando az feature register .

    az feature register --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    Verificare lo stato della registrazione usando il comando az feature show. Sono necessari alcuni minuti per visualizzare lo stato Registrato:

    az feature show --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    Nota

    Se si sceglie di creare un cluster isolato di rete con Integrazione rete virtuale del server API configurato per l'accesso privato del server API, è necessario ripetere i passaggi precedenti per registrare EnableAPIServerVnetIntegrationPreview anche il flag di funzionalità. Quando lo stato riflette Registrato, aggiornare la registrazione dei provider di Microsoft.ContainerService risorse e Microsoft.ContainerRegistry usando il comando az provider register :

     az provider register --namespace Microsoft.ContainerService
     az provider register --namespace Microsoft.ContainerRegistry
    
  • Se si sceglie l'opzione Bring Your Own (BYO) Registro Azure Container (ACR), è necessario assicurarsi che il Registro Azure Container soddisfi i requisiti seguenti:

  • (Facoltativo) Se si vuole usare qualsiasi funzionalità facoltativa del servizio Azure Kubernetes o componente aggiuntivo che richiede l'accesso alla rete in uscita, questo documento contiene i requisiti in uscita per ogni funzionalità. Questo documento enumera anche le funzionalità o i componenti aggiuntivi che supportano l'integrazione dei collegamenti privati per la connessione sicura dall'interno della rete virtuale del cluster. Se l'integrazione dei collegamenti privati non è disponibile per una di queste funzionalità, il cluster può essere configurato con una tabella di routing definita dall'utente e un Firewall di Azure in base alle regole di rete e alle regole dell'applicazione necessarie per tale funzionalità.

Nota

Le estensioni del cluster del servizio Azure Kubernetes seguenti non sono ancora supportate nei cluster isolati di rete:

Distribuire un cluster isolato di rete con registro Azure Kubernetes gestito dal servizio Azure Kubernetes

Il servizio Azure Kubernetes crea, gestisce e riconcilia una risorsa del Registro Azure Container in questa opzione. Non è necessario assegnare autorizzazioni o gestire il Registro Azure Container. Il servizio Azure Kubernetes gestisce le regole della cache, il collegamento privato e l'endpoint privato usati nel cluster isolato di rete.

Creare un cluster isolato di rete

Quando si crea un cluster del servizio Azure Kubernetes isolato di rete, è possibile scegliere una delle modalità cluster private seguenti: Collegamento privato o Integrazione rete virtuale del server API.

Indipendentemente dalla modalità selezionata, si impostano --bootstrap-artifact-source i parametri e --outbound-type .

--bootstrap-artifact-source può essere impostato Direct su o Cache corrispondente all'uso diretto mcr (non isolato dalla rete) e del record di controllo di accesso privato (isolato dalla rete) rispettivamente per le immagini pull.

Può --outbound-type parameter essere impostato su none o block. Se il tipo in uscita è impostato su none, il servizio Azure Kubernetes non configura connessioni in uscita per il cluster, consentendo all'utente di configurarle autonomamente. Se il tipo in uscita è impostato su blocca, tutte le connessioni in uscita vengono bloccate.

Creare un cluster del servizio Azure Kubernetes isolato basato su collegamento privato eseguendo il comando az aks create con --bootstrap-artifact-sourcei parametri , --enable-private-clustere --outbound-type .

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}   --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none  --network-plugin azure --enable-private-cluster

Integrazione della rete virtuale del server API

Creare un cluster del servizio Azure Kubernetes isolato di rete configurato con Integrazione rete virtuale del server API eseguendo il comando az aks create con --bootstrap-artifact-sourcei parametri , --enable-private-cluster--enable-apiserver-vnet-integration e --outbound-type .

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none --network-plugin azure --enable-private-cluster --enable-apiserver-vnet-integration

Aggiornare un cluster del servizio Azure Kubernetes esistente al tipo isolato di rete

Se si preferisce abilitare l'isolamento di rete in un cluster del servizio Azure Kubernetes esistente anziché creare un nuovo cluster, usare il comando az aks update .

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --outbound-type none

Dopo aver abilitato la funzionalità, tutti i nodi appena aggiunti possono eseguire correttamente il bootstrap senza uscita. Quando si abilita l'isolamento di rete in un cluster esistente, tenere presente che è necessario ricreare manualmente l'immagine di tutti i nodi esistenti.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Ricordarsi di creare nuovamente l'immagine dei pool di nodi del cluster dopo aver abilitato la modalità di isolamento della rete per un cluster esistente. In caso contrario, la funzionalità non avrà effetto per il cluster.

Distribuire un cluster isolato di rete con Registro Azure Container

Il servizio Azure Kubernetes supporta l'uso di record di controllo di accesso (BYO) personalizzati. Per supportare lo scenario BYO ACR, è necessario configurare un endpoint privato del Registro Azure Container e una zona DNS privata prima di creare il cluster del servizio Azure Kubernetes.

La procedura seguente illustra come preparare queste risorse:

  • Rete virtuale e subnet personalizzate per servizio Azure Kubernetes e Registro Azure Container.
  • Registro Azure Container, regola della cache del Registro Azure Container, endpoint privato e zona DNS privata.
  • Identità del piano di controllo personalizzato e identità kubelet.

Passaggio 1: Creare la rete virtuale e le subnet

L'accesso in uscita predefinito per la subnet del servizio Azure Kubernetes deve essere false.

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

az network vnet create  --resource-group ${RESOURCE_GROUP} --name ${VNET_NAME} --address-prefixes 192.168.0.0/16

az network vnet subnet create --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.1.0/24 --default-outbound-access false

SUBNET_ID=$(az network vnet subnet show --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' --output tsv)

az network vnet subnet create --name ${ACR_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.2.0/24 --private-endpoint-network-policies Disabled

Passaggio 2: Creare il Registro Azure Container e abilitare la cache degli artefatti

  1. Creare il Registro Azure Container con il collegamento privato e l'accesso pull anonimo.

    az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false
    
    az acr update --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --anonymous-pull-enabled true
    
    REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP}  --query 'id' --output tsv)
    
  2. Creare una regola di cache del Registro Azure Container per consentire agli utenti di memorizzare nella cache le immagini del contenitore MCR nel nuovo Registro Azure Container.

    az acr cache create -n acr-cache-rule -r ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --source-repo "mcr.microsoft.com/*" --target-repo "*"
    

Passaggio 3: Creare un endpoint privato per il Registro Azure Container

az network private-endpoint create --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --subnet ${ACR_SUBNET_NAME} --private-connection-resource-id ${REGISTRY_ID} --group-id registry --connection-name myConnection

NETWORK_INTERFACE_ID=$(az network private-endpoint show --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --query 'networkInterfaces[0].id' --output tsv)

REGISTRY_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateIPAddress" --output tsv)

DATA_ENDPOINT_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$LOCATION'].privateIPAddress" --output tsv)

Passaggio 4: Creare una zona DNS privata e aggiungere record

Creare una zona DNS privata denominata privatelink.azurecr.io. Aggiungere i record per l'endpoint {REGISTRY_NAME}.azurecr.ioREST del Registro di sistema e l'endpoint {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.iodati del Registro di sistema .

az network private-dns zone create --resource-group ${RESOURCE_GROUP} --name "privatelink.azurecr.io"

az network private-dns link vnet create --resource-group ${RESOURCE_GROUP} --zone-name "privatelink.azurecr.io" --name MyDNSLink --virtual-network ${VNET_NAME} --registration-enabled false

az network private-dns record-set a create --name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${REGISTRY_PRIVATE_IP}

az network private-dns record-set a create --name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${DATA_ENDPOINT_PRIVATE_IP}

Passaggio 5: Creare il piano di controllo e le identità kubelet

Identità del piano di controllo

az identity create --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

CLUSTER_IDENTITY_RESOURCE_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

CLUSTER_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

Identità Kubelet

az identity create --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

KUBELET_IDENTITY_RESOURCE_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

KUBELET_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

Concedere le autorizzazioni AcrPull per l'identità Kubelet

az role assignment create --role AcrPull --scope ${REGISTRY_ID} --assignee-object-id ${KUBELET_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

Dopo aver configurato queste risorse, è possibile procedere con la creazione del cluster del servizio Azure Kubernetes isolato di rete con IL Registro Azure Container BYO.

Passaggio 6: Creare un cluster isolato di rete usando il registro di controllo di accesso BYO

Quando si crea un cluster del servizio Azure Kubernetes isolato di rete, è possibile scegliere una delle modalità cluster private seguenti: Collegamento privato o Integrazione rete virtuale del server API.

Indipendentemente dalla modalità selezionata, si impostano --bootstrap-artifact-source i parametri e --outbound-type .

--bootstrap-artifact-source può essere impostato Direct su o Cache corrispondente all'uso diretto mcr (non isolato dalla rete) e del record di controllo di accesso privato (isolato dalla rete) rispettivamente per le immagini pull.

Può --outbound-type parameter essere impostato su none o block. Se il tipo in uscita è impostato su none, il servizio Azure Kubernetes non configura connessioni in uscita per il cluster, consentendo all'utente di configurarle autonomamente. Se il tipo in uscita è impostato su blocca, tutte le connessioni in uscita vengono bloccate.

Creare un cluster di rete isolato basato su collegamento privato che accede al Registro Azure Container eseguendo il comando az aks create con i parametri necessari.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-private-cluster

Integrazione della rete virtuale del server API

Per un cluster isolato di rete con integrazione rete virtuale del server API, creare prima di tutto una subnet e assegnare il ruolo corretto con i comandi seguenti:

az network vnet subnet create --name ${APISERVER_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.3.0/24

export APISERVER_SUBNET_ID=$(az network vnet subnet show --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --name ${APISERVER_SUBNET_NAME} --query id -o tsv)
az role assignment create --scope ${APISERVER_SUBNET_ID} --role "Network Contributor" --assignee-object-id ${CLUSTER_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

Creare un cluster del servizio Azure Kubernetes isolato di rete configurato con Integrazione rete virtuale del server API e accedere al Registro Azure Container eseguendo il comando az aks create con i parametri necessari.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-apiserver-vnet-integration --apiserver-subnet-id ${APISERVER_SUBNET_ID}

Aggiornare un cluster del servizio Azure Kubernetes esistente

Se si preferisce abilitare l'isolamento di rete in un cluster del servizio Azure Kubernetes esistente anziché creare un nuovo cluster, usare il comando az aks update .

Quando si creano l'endpoint privato e la zona DNS privata per il Registro Azure Container BYO, usare la rete virtuale e le subnet esistenti del cluster del servizio Azure Kubernetes esistente. Quando si assegna l'autorizzazione AcrPull all'identità kubelet, usare l'identità kubelet esistente del cluster del servizio Azure Kubernetes esistente.

Per abilitare la funzionalità di isolamento della rete in un cluster del servizio Azure Kubernetes esistente, usare il comando seguente:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none

Dopo aver abilitato la funzionalità del cluster isolato di rete, i nodi nel pool di nodi appena aggiunti possono eseguire correttamente il bootstrap senza uscita. È necessario creare nuovamente l'immagine dei pool di nodi esistenti in modo che il nodo appena ridimensionato possa eseguire correttamente il bootstrap. Quando si abilita la funzionalità in un cluster esistente, è necessario creare manualmente l'immagine di tutti i nodi esistenti.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Ricordarsi di creare nuovamente l'immagine dei pool di nodi del cluster dopo aver abilitato la funzionalità del cluster isolato di rete. In caso contrario, la funzionalità non avrà effetto per il cluster.

Aggiornare l'ID registro Azure Container

È possibile aggiornare il Registro Azure Container privato usato con un cluster del servizio Azure Kubernetes isolato dalla rete. Per identificare l'ID risorsa registro Azure Container, usare il az aks show comando .

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

L'aggiornamento dell'ID registro Azure Container viene eseguito eseguendo il az aks update comando con i --bootstrap-artifact-source parametri e --bootstrap-container-registry-resource-id .

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id <New BYO ACR resource ID>

Quando si aggiorna l'ID registro Azure Container in un cluster esistente, è necessario creare manualmente l'immagine di tutti i nodi esistenti.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Ricordarsi di creare nuovamente l'immagine dei pool di nodi del cluster dopo aver abilitato la funzionalità del cluster isolato di rete. In caso contrario, la funzionalità non avrà effetto per il cluster.

Verificare che il cluster isolato di rete sia abilitato

Per verificare che la funzionalità cluster isolato di rete sia abilitata, usare il comando 'az aks show

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

L'output seguente mostra che la funzionalità è abilitata, in base ai valori della proprietà (nessuno o bloccato) e artifactSource della outboundType proprietà (memorizzata nella cache).

"kubernetesVersion": "1.30.3",
"name": "myAKSCluster"
"type": "Microsoft.ContainerService/ManagedClusters"
"properties": {
  ...
  "networkProfile": {
    ...
    "outboundType": "none",
    ...
  },
  ...
  "bootstrapProfile": {
    "artifactSource": "Cache",
    "containerRegistryId": "/subscriptions/my-subscription-id/my-node-resource-group-name/providers/Microsoft.ContainerRegistry/registries/my-registry-name"
  },
  ...
}

Disabilitare il cluster isolato di rete

Disabilitare la funzionalità del cluster isolato di rete eseguendo il az aks update comando con i --bootstrap-artifact-source parametri e --outbound-type .

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Direct --outbound-type LoadBalancer

Quando si disabilita la funzionalità in un cluster esistente, è necessario creare manualmente l'immagine di tutti i nodi esistenti.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Ricordarsi di creare nuovamente l'immagine dei pool di nodi del cluster dopo aver disabilitato la funzionalità del cluster isolato di rete. In caso contrario, la funzionalità non avrà effetto per il cluster.

Passaggi successivi

In questo articolo sono state fornite informazioni sulle porte e sugli indirizzi da consentire se si vuole limitare il traffico in uscita per il cluster.

Per configurare la configurazione delle restrizioni in uscita usando Firewall di Azure, vedere Controllare il traffico in uscita usando Firewall di Azure nel servizio Azure Kubernetes.

Per limitare il modo in cui i pod comunicano tra loro e le restrizioni del traffico east-west all'interno del cluster, vedere Proteggere il traffico tra i pod usando i criteri di rete nel servizio Azure Kubernetes.