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
- Consultez la vue d’ensemble conceptuelle de cette fonctionnalité, qui explique le fonctionnement des clusters isolés du réseau. En outre, l’article de vue d’ensemble :
- Explique les deux méthodes d’accès, ACR managée par AKS ou BYO ACR, vous pouvez choisir entre ces deux méthodes dans cet article.
- Décrit les limitations actuelles.
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
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 commandeaz 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 commandeaz 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 ressourcesMicrosoft.ContainerService
etMicrosoft.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 :
- L’accès par extraction anonyme doit être activé pour l’ACR.
- L’ACR doit être du niveau de service de référence SKU Premium
(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.
Liaison privée
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
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)
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.
Liaison privée
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.
Azure Kubernetes Service