Partager via


Créer un cluster Azure Kubernetes Service (AKS) isolé en réseau (préversion)

Les organisations ont généralement des exigences strictes en matière de sécurité et de conformité pour réglementer le trafic réseau (sortant) d’un cluster, afin d’éliminer les risques d’exfiltration des données. Par défaut, les clusters Azure Kubernetes Service (AKS) disposent d’un accès Internet sortant sans restriction. Ce niveau d’accès réseau permet aux nœuds et services que vous exécutez d’accéder aux ressources externes en fonction des besoins. Si vous souhaitez restreindre le trafic de sortie, un nombre limité de ports et adresses doit être accessible afin de gérer les tâches de maintenance d’intégrité du cluster.

Une solution pour sécuriser des adresses sortantes consiste à utiliser un dispositif de pare-feu permettant de contrôler le trafic sortant en fonction des noms de domaine.

Une autre solution, un cluster AKS isolé du réseau (préversion), simplifie la configuration des restrictions sortantes pour un cluster prêt à l’emploi. Un cluster AKS isolé du réseau réduit le risque d’exfiltration de données ou d’exposition involontaire des points de terminaison publics du cluster.

Important

Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les préversions sont fournies « en l’état » et « en fonction des disponibilités », et sont exclues des contrats de niveau de service et de la garantie limitée. Les préversions AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Telles quelles, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :

Avant de commencer

  • Cet article nécessite la version 2.63.0 ou ultérieure d’Azure CLI. Si vous utilisez Azure Cloud Shell, sachez que la dernière version y est déjà installée.

  • Installez la aks-preview version de l’extension Azure CLI 9.0.0b2 ou ultérieure.

    • Si vous n’avez pas encore l’extension aks-preview, installez-la en utilisant la commande az extension add.

      az extension add --name aks-preview
      
    • Si vous disposez déjà de l’extension aks-preview, mettez-la à jour pour vous assurer que vous disposez de la dernière version en utilisant la commande az extension update.

      az extension update --name aks-preview
      
  • Inscrivez l’indicateur de fonctionnalité NetworkIsolatedClusterPreview à l’aide de la commande az feature register.

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

    Vérifiez l’état de l’inscription à l’aide de la commande az feature show. Quelques minutes sont nécessaires pour que l’état affiche Inscrit :

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

    Remarque

    Si vous choisissez de créer un cluster isolé du réseau avec intégration de VNet de serveur d’API configuré pour l’accès privé du serveur d’API, vous devez répéter les étapes ci-dessus pour inscrire également EnableAPIServerVnetIntegrationPreview l’indicateur de fonctionnalité. Quand l’état indique Inscrit, actualisez l’inscription du fournisseur de ressources Microsoft.ContainerService et Microsoft.ContainerRegistryà l’aide de la commande az provider register :

     az provider register --namespace Microsoft.ContainerService
     az provider register --namespace Microsoft.ContainerRegistry
    
  • Si vous choisissez l’option BYO (Apportez le vôtre) Azure Container Registry (ACR), vous devez vous assurer que l’ACR répond aux exigences suivantes :

  • (Facultatif) Si vous souhaitez utiliser une fonctionnalité AKS ou un module complémentaire facultatif qui nécessite un accès réseau sortant, ce document contient les exigences sortantes pour chaque fonctionnalité. Ce document énumère également les fonctionnalités ou modules complémentaires qui prennent en charge l’intégration de liaison privée pour une connexion sécurisée à partir du réseau virtuel du cluster. Si l’intégration de liaison privée n’est pas disponible pour l’une de ces fonctionnalités, le cluster peut alors être configuré avec une table de routage définie par l’utilisateur et une instance Pare-feu Azure basés sur les règles du réseau et les règles d’application requises pour cette fonctionnalité.

Remarque

Les extensions de cluster AKS suivantes ne sont pas encore prises en charge sur des clusters isolés du réseau :

Déployer un cluster isolé du réseau avec ACR géré par AKS

AKS crée, gère et rapproche une ressource ACR dans cette option. Vous n’avez pas besoin d’attribuer d’autorisations ni de gérer l’ACR. AKS gère les règles de cache, la liaison privée et le point de terminaison privé utilisés dans le cluster isolé du réseau.

Créer un cluster isolé du réseau

Lors de la création d’un cluster AKS isolé du réseau, vous pouvez choisir l’un des modes de cluster privé suivants : liaison privée ou intégration au réseau virtuel du serveur d’API.

Quel que soit le mode que vous sélectionnez, vous définissez les paramètres --bootstrap-artifact-source et --outbound-type.

--bootstrap-artifact-source peut être défini sur Direct ou sur Cache ce qui correspond à l’utilisation de MCR direct (NON isolé du réseau) et d’ACR privé (isolé du réseau) pour les tirages d’images respectivement.

Le --outbound-type parameter peut être défini sur none ou block. Si le type sortant est défini sur none, AKS ne configure pas de connexions sortantes pour le cluster, ce qui permet à l’utilisateur de les configurer lui même. Si le type sortant est défini sur bloquer, toutes les connexions sortantes sont bloquées.

Créez un cluster AKS isolé du réseau basé sur des liaisons privées en exécutant la commande az aks create avec les paramètres --bootstrap-artifact-source, --enable-private-cluster et --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

Intégration de VNet de serveur d’API

Créez un cluster AKS isolé du réseau configuré avec l’intégration de VNet de serveur d’API en exécutant la commande az aks create avec les paramètres --bootstrap-artifact-source, --enable-private-cluster, --enable-apiserver-vnet-integration et --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

Mettre à jour un cluster AKS existant vers un type isolé du réseau

Si vous préférez activer l’isolation réseau sur un cluster AKS existant au lieu de créer un cluster, utilisez la commande az aks update.

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

Une fois la fonctionnalité activée, tous les nœuds nouvellement ajoutés peuvent démarrer correctement sans sortie. Lorsque vous activez l’isolation du réseau sur un cluster existant, n’oubliez pas que vous devez réimager manuellement tous les nœuds existants.

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

Important

N’oubliez pas de réimager les pools de nœuds du cluster après avoir activé le mode d’isolation réseau pour un cluster existant. Sinon, la fonctionnalité ne prend pas effet pour le cluster.

Déployer un cluster isolé du réseau avec ACR apporté par vous

AKS prend en charge l’apport de votre propre ACR (BYO). Pour prendre en charge le scénario ACR BYO, vous devez configurer un point de terminaison privé ACR et une zone DNS privée avant de créer le cluster AKS.

Les étapes suivantes montrent comment préparer ces ressources :

  • Réseau virtuel personnalisé et sous-réseaux pour AKS et ACR.
  • ACR, règle de cache ACR, point de terminaison privé et zone DNS privée.
  • Identité du plan de contrôle personnalisé et identité kubelet.

Étape 1 : Créer le réseau virtuel et les sous-réseau

L’accès sortant par défaut pour le sous-réseau AKS doit être faux.

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

Étape 2 : Créer l’ACR et activer le cache d’artefacts

  1. Créez l’ACR avec la liaison privée et l’accès par extraction anonyme.

    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. Créez une règle de cache ACR pour permettre aux utilisateurs de mettre en cache les images conteneur MCR dans le nouvel ACR.

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

Étape 3 : Créer un point de terminaison privé pour l’ACR

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)

Étape 4 : Créez une zone DNS privée et ajoutez les enregistrements

Créer une zone DNS privée nommée privatelink.azurecr.io. Ajoutez les enregistrements du point de terminaison REST du registre {REGISTRY_NAME}.azurecr.io et le point de terminaison de données du registre {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.io.

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}

Étape 5 : Créer un plan de contrôle et des identités kubelet

Identité de plan de contrôle

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)

Accorder des autorisations AcrPull pour l’identité Kubelet

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

Après avoir configuré ces ressources, vous pouvez continuer à créer le cluster AKS isolé du réseau avec ACR BYO.

Étape 6 : Créer un cluster isolé du réseau à l’aide de l’ACR BYO

Lors de la création d’un cluster AKS isolé du réseau, vous pouvez choisir l’un des modes de cluster privé suivants : liaison privée ou intégration au réseau virtuel du serveur d’API.

Quel que soit le mode que vous sélectionnez, vous définissez les paramètres --bootstrap-artifact-source et --outbound-type.

--bootstrap-artifact-source peut être défini sur Direct ou sur Cache ce qui correspond à l’utilisation de MCR direct (NON isolé du réseau) et d’ACR privé (isolé du réseau) pour les tirages d’images respectivement.

Le --outbound-type parameter peut être défini sur none ou block. Si le type sortant est défini sur none, AKS ne configure pas de connexions sortantes pour le cluster, ce qui permet à l’utilisateur de les configurer lui même. Si le type sortant est défini sur bloquer, toutes les connexions sortantes sont bloquées.

Créez un cluster isolé basé sur des liaisons privées qui accède à votre ACR en exécutant la commande az aks create avec les paramètres requis.

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

Intégration de VNet de serveur d’API

Pour un cluster isolé du réseau avec l’intégration de VNet de serveur d’API, commencez par créer un sous-réseau et attribuez le rôle approprié avec les commandes suivantes :

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

Créez un cluster AKS isolé du réseau configuré avec l’intégration de VNet de serveur d’API et accédez à votre ACR en exécutant la commande az aks create avec les paramètres requis.

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}

Mettre à jour un cluster AKS existant

Si vous préférez activer l’isolation réseau sur un cluster AKS existant au lieu de créer un cluster, utilisez la commande az aks update.

Lors de la création du point de terminaison privé et de la zone DNS privée pour l’ACR BYO, utilisez le réseau virtuel et les sous-réseaux existants du cluster AKS existant. Lorsque vous affectez l’autorisation AcrPull à l’identité kubelet, utilisez l’identité kubelet existante du cluster AKS existant.

Pour activer la fonctionnalité isolée du réseau sur un cluster AKS existant, utilisez la commande suivante :

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

Une fois la fonctionnalité de cluster isolé réseau activée, les nœuds du pool de nœuds nouvellement ajouté peuvent démarrer correctement sans sortie. Vous devez réimager des pools de nœuds existants, afin que le nœud nouvellement mis à l’échelle puisse s’amorcer correctement. Lorsque vous activez la fonctionnalité sur un cluster existant, vous devez réimager manuellement tous les nœuds existants.

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

Important

N’oubliez pas de réimager les pools de nœuds du cluster après avoir activé la fonction de cluster isolé du réseau. Sinon, la fonctionnalité ne prend pas effet pour le cluster.

Mettre à jour votre ID ACR

Il est possible de mettre à jour l’ACR privé utilisé avec un cluster AKS isolé du réseau. Pour identifier l’ID de ressource ACR, utilisez la commande az aks show.

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

La mise à jour de l’ID ACR est effectuée en exécutant la commande az aks update avec les paramètres --bootstrap-artifact-source et --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>

Lorsque vous mettez à jour l’ID ACR sur un cluster existant, vous devez réimager manuellement tous les nœuds existants.

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

Important

N’oubliez pas de réimager les pools de nœuds du cluster après avoir activé la fonction de cluster isolé du réseau. Sinon, la fonctionnalité ne prend pas effet pour le cluster.

Vérifier que le cluster isolé du réseau est activé

Pour valider que la fonctionnalité de cluster isolé du réseau est activée, utilisez la commande «az aks show

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

La sortie suivante montre que la fonctionnalité est activée, en fonction des valeurs de la propriété outboundType (aucune ou bloquée) et de la propriété artifactSource (Mise en 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"
  },
  ...
}

Désactiver un cluster isolé du réseau

Désactivez la fonctionnalité de cluster isolé du réseau en exécutant la commande az aks update avec les paramètres --bootstrap-artifact-source et --outbound-type.

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

Lorsque vous désactivez la fonctionnalité sur un cluster existant, vous devez réimager manuellement tous les nœuds existants.

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

Important

N’oubliez pas de réimager les pools de nœuds du cluster après avoir désactivé la fonction de cluster isolé du réseau. Sinon, la fonctionnalité ne prend pas effet pour le cluster.

Étapes suivantes

Dans cet article, vous avez découvert les ports et adresses à autoriser pour limiter le trafic de sortie du cluster.

Si vous souhaitez définir une configuration de restriction à l’aide du Pare-feu Azure, consultez Contrôler le trafic de sortie à l’aide de Pare-feu Azure dans AKS.

Si vous souhaitez limiter la communication entre les pods et le trafic Est-Ouest au sein du cluster, consultez Sécurisation du trafic entre les pods à l’aide de stratégies réseau dans AKS.