Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Même si vous pouvez acheminer le trafic de sortie via Azure Load Balancer, il existe des limites quant au nombre de flux de trafic sortants que vous pouvez avoir. La passerelle Azure NAT Gateway autorise jusqu’à 64 512 flux de trafic UDP et TCP sortants par adresse IP, avec un maximum de 16 adresses IP.
Cet article explique comment créer un cluster Azure Kubernetes Service (AKS) avec une passerelle NAT Gateway managée et une passerelle NAT Gateway attribuée par l’utilisateur pour le trafic de sortie. Il vous montre également comment désactiver OutboundNAT sur Windows.
Avant de commencer
- Assurez-vous que vous disposez de la version la plus récente d’Azure CLI.
- Vérifiez que vous utilisez Kubernetes version 1.20.x ou ultérieure.
- La passerelle NAT managée n’est pas compatible avec les réseaux virtuels personnalisés.
Important
Dans les clusters non privés, le trafic du cluster du serveur d’API est routé et traité via le type de sortie des clusters. Pour éviter que le trafic du serveur d’API ne soit traité comme du trafic public, envisagez d’utiliser un cluster privé, ou consultez la fonctionnalité Intégration au réseau virtuel du serveur d’API.
Créer un cluster AKS avec une passerelle NAT Gateway managée
- Créez un cluster AKS avec une nouvelle passerelle NAT managée à l’aide de la
az aks createcommande avec les--outbound-type managedNATGatewayparamètres ,--nat-gateway-managed-outbound-ip-countet--nat-gateway-idle-timeout. Si vous souhaitez que la passerelle NAT fonctionne à partir d’une zone de disponibilité spécifique, spécifiez la zone à l’aide de l’option--zones. - Si aucune zone n’est spécifiée lors de la création d’une passerelle NAT managée, la passerelle NAT est déployée sur « aucune zone » par défaut. Lorsque la passerelle NAT est placée dans aucune zone, Azure place la ressource dans une zone pour vous. Pour plus d’informations sur le modèle de déploiement non zonal, consultez passerelle NAT non zonale.
- Une ressource de passerelle NAT ne peut pas être utilisée sur plusieurs zones de disponibilité.
Les commandes suivantes créent d’abord le groupe de ressources requis, puis le cluster AKS avec une passerelle NAT managée.
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export MY_RG="myResourceGroup$RANDOM_SUFFIX"
export MY_AKS="myNatCluster$RANDOM_SUFFIX"
az group create --name $MY_RG --location "eastus2"
Résultats :
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx",
"location": "eastus2",
"managedBy": null,
"name": "myResourceGroupxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
az aks create \
--resource-group $MY_RG \
--name $MY_AKS \
--node-count 3 \
--outbound-type managedNATGateway \
--nat-gateway-managed-outbound-ip-count 2 \
--nat-gateway-idle-timeout 4 \
--generate-ssh-keys
Résultats :
{
"aadProfile": null,
"agentPoolProfiles": [
{
...
"name": "nodepool1",
...
"provisioningState": "Succeeded",
...
}
],
"dnsPrefix": "myNatClusterxxx-dns-xxx",
"fqdn": "myNatClusterxxx-dns-xxx.xxxxx.xxxxxx.cloudapp.azure.com",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myNatClusterxxx",
"name": "myNatClusterxxx",
...
"resourceGroup": "myResourceGroupxxx",
...
"provisioningState": "Succeeded",
...
"type": "Microsoft.ContainerService/ManagedClusters"
}
- Mettez à jour l’adresse IP sortante ou le délai d’inactivité à l’aide de la
az aks updatecommande avec le--nat-gateway-managed-outbound-ip-countparamètre ou--nat-gateway-idle-timeout.
L’exemple suivant met à jour le nombre d’adresses IP sortantes gérées par la passerelle NAT pour le cluster AKS à 5.
az aks update \
--resource-group $MY_RG \
--name $MY_AKS \
--nat-gateway-managed-outbound-ip-count 5
Résultats :
{
"aadProfile": null,
"agentPoolProfiles": [
{
...
"name": "nodepool1",
...
"provisioningState": "Succeeded",
...
}
],
"dnsPrefix": "myNatClusterxxx-dns-xxx",
"fqdn": "myNatClusterxxx-dns-xxx.xxxxx.xxxxxx.cloudapp.azure.com",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myNatClusterxxx",
"name": "myNatClusterxxx",
...
"resourceGroup": "myResourceGroupxxx",
...
"provisioningState": "Succeeded",
...
"type": "Microsoft.ContainerService/ManagedClusters"
}
Créer un cluster AKS avec une passerelle NAT Gateway attribuée par l’utilisateur
Cette configuration nécessite une mise en réseau personnalisée (par le biais de Kubenet ou d’Azure CNI) et que la passerelle NAT soit préconfigurée sur le sous-réseau. Les commandes suivantes créent les ressources requises pour ce scénario.
Créez un groupe de ressources à l’aide de la commande
az group create.export RANDOM_SUFFIX=$(openssl rand -hex 3) export MY_RG="myResourceGroup$RANDOM_SUFFIX" az group create --name $MY_RG --location southcentralusRésultats :
{ "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx", "location": "southcentralus", "managedBy": null, "name": "myResourceGroupxxx", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" }Créez une identité managée pour les autorisations réseau et stockez l’ID dans
$IDENTITY_IDpour une utilisation ultérieure.export IDENTITY_NAME="myNatClusterId$RANDOM_SUFFIX" export IDENTITY_ID=$(az identity create \ --resource-group $MY_RG \ --name $IDENTITY_NAME \ --location southcentralus \ --query id \ --output tsv)Résultats :
/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myNatClusterIdxxxCréez une adresse IP publique pour la passerelle NAT en utilisant la commande
az network public-ip create.export PIP_NAME="myNatGatewayPip$RANDOM_SUFFIX" az network public-ip create \ --resource-group $MY_RG \ --name $PIP_NAME \ --location southcentralus \ --sku standardRésultats :
{ "publicIp": { "ddosSettings": null, "dnsSettings": null, "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/publicIPAddresses/myNatGatewayPipxxx", "ipAddress": null, "ipTags": [], "location": "southcentralus", "name": "myNatGatewayPipxxx", ... "provisioningState": "Succeeded", ... "sku": { "name": "Standard", "tier": "Regional" }, "type": "Microsoft.Network/publicIPAddresses", ... } }Créez la passerelle NAT à l’aide de la
az network nat gateway createcommande .export NATGATEWAY_NAME="myNatGateway$RANDOM_SUFFIX" az network nat gateway create \ --resource-group $MY_RG \ --name $NATGATEWAY_NAME \ --location southcentralus \ --public-ip-addresses $PIP_NAMERésultats :
{ "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/natGateways/myNatGatewayxxx", "location": "southcentralus", "name": "myNatGatewayxxx", "provisioningState": "Succeeded", "publicIpAddresses": [ { "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/publicIPAddresses/myNatGatewayPipxxx" } ], ... "type": "Microsoft.Network/natGateways" }Important
Une ressource de passerelle NAT unique ne peut pas être utilisée sur plusieurs zones de disponibilité. Pour garantir la résilience des zones, il est recommandé de déployer une ressource de passerelle NAT dans chaque zone de disponibilité et de l’affecter à des sous-réseaux contenant des clusters AKS dans chaque zone. Pour plus d'informations sur ce modèle de déploiement, voir Passerelle NAT pour chaque zone. Si aucune zone n’est configurée pour la passerelle NAT, l’emplacement de zone par défaut est « aucune zone », dans lequel Azure place la passerelle NAT dans une zone pour vous.
Créer un réseau virtuel en utilisant la commande
az network vnet create.export VNET_NAME="myVnet$RANDOM_SUFFIX" az network vnet create \ --resource-group $MY_RG \ --name $VNET_NAME \ --location southcentralus \ --address-prefixes 172.16.0.0/20Résultats :
{ "newVNet": { "addressSpace": { "addressPrefixes": [ "172.16.0.0/20" ] }, ... "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/virtualNetworks/myVnetxxx", "location": "southcentralus", "name": "myVnetxxx", "provisioningState": "Succeeded", ... "type": "Microsoft.Network/virtualNetworks", ... } }Créez un sous-réseau dans le réseau virtuel à l’aide de la passerelle NAT et stockez l’ID dans
$SUBNET_IDpour une utilisation ultérieure.export SUBNET_NAME="myNatCluster$RANDOM_SUFFIX" export SUBNET_ID=$(az network vnet subnet create \ --resource-group $MY_RG \ --vnet-name $VNET_NAME \ --name $SUBNET_NAME \ --address-prefixes 172.16.0.0/22 \ --nat-gateway $NATGATEWAY_NAME \ --query id \ --output tsv)Résultats :
/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/virtualNetworks/myVnetxxx/subnets/myNatClusterxxxCréez un cluster AKS à l’aide du sous-réseau avec la passerelle NAT et l’identité managée avec la commande
az aks create.export AKS_NAME="myNatCluster$RANDOM_SUFFIX" az aks create \ --resource-group $MY_RG \ --name $AKS_NAME \ --location southcentralus \ --network-plugin azure \ --vnet-subnet-id $SUBNET_ID \ --outbound-type userAssignedNATGateway \ --assign-identity $IDENTITY_ID \ --generate-ssh-keysRésultats :
{ "aadProfile": null, "agentPoolProfiles": [ { ... "name": "nodepool1", ... "provisioningState": "Succeeded", ... } ], "dnsPrefix": "myNatClusterxxx-dns-xxx", "fqdn": "myNatClusterxxx-dns-xxx.xxxxx.xxxxxx.cloudapp.azure.com", "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myNatClusterxxx", "name": "myNatClusterxxx", ... "resourceGroup": "myResourceGroupxxx", ... "provisioningState": "Succeeded", ... "type": "Microsoft.ContainerService/ManagedClusters" }
Désactiver OutboundNAT pour Windows
Windows OutboundNAT peut provoquer certains problèmes de connexion et de communication avec vos pods AKS. Un exemple de problème est la réutilisation du port de nœud. Dans cet exemple, Windows OutboundNAT utilise les ports pour traduire votre adresse IP de pod en adresse IP hôte de votre nœud Windows, ce qui peut entraîner une connexion instable au service externe en raison d’un problème d’épuisement des ports.
Windows active OutboundNAT par défaut. Vous pouvez maintenant désactiver manuellement OutboundNAT lors de la création de pools d’agents Windows.
Prérequis
- Cluster AKS existant avec v1.26 ou version ultérieure. Si vous utilisez Kubernetes version 1.25 ou antérieure, vous devez mettre à jour votre configuration de déploiement.
Limites
- Vous ne pouvez pas définir le type de sortie du cluster sur LoadBalancer. Vous pouvez le définir sur NAT Gateway ou UDR :
- NAT Gateway : l’option NAT Gateway peut gérer automatiquement la connexion NAT et est plus puissante que Standard Load Balancer. Cette option risque d’entraîner des frais supplémentaires.
- UDR (UserDefinedRouting) : vous devez garder à l’esprit les limitations de port lors de la configuration des règles d’acheminement.
- Si vous devez passer d’un équilibreur de charge à NAT Gateway, vous pouvez ajouter une passerelle NAT au réseau virtuel ou exécuter
az aks upgradepour mettre à jour le type de sortie.
Remarque
UserDefinedRouting présente les limites suivantes :
- SNAT par Load Balancer (doit utiliser l’option OutboundNAT par défaut) a « 64 ports sur l’adresse IP hôte ».
- SNAT par Pare-feu Azure (désactivez OutboundNAT) a 2 496 ports par adresse IP publique.
- SNAT par NAT Gateway (désactivez OutboundNAT) a 64 512 ports par adresse IP publique.
- Si la plage de ports du Pare-feu Azure n’est pas suffisante pour votre application, vous devez utiliser NAT Gateway.
- Le Pare-feu Azure ne traduit pas l’adresse réseau source avec des règles de réseau lorsque l’adresse IP de destination se trouve dans une plage d’adresses IP privées conformément à la norme IANA RFC 1918 ou dans un espace d’adressage partagé conformément à la norme IANA RFC 6598.
Désactiver manuellement OutboundNAT pour Windows
Désactiver manuellement OutboundNAT pour Windows lors de la création de pools d’agents Windows à l’aide de la commande
az aks nodepool addavec l’indicateur--disable-windows-outbound-nat.Remarque
Vous pouvez utiliser un cluster AKS existant, mais vous devrez peut-être mettre à jour le type de sortie et ajouter un pool de nœuds pour activer
--disable-windows-outbound-nat.La commande suivante ajoute un pool de nœuds Windows à un cluster AKS existant, désactivant OutboundNAT.
export WIN_NODEPOOL_NAME="win$(head -c 1 /dev/urandom | xxd -p)" az aks nodepool add \ --resource-group $MY_RG \ --cluster-name $MY_AKS \ --name $WIN_NODEPOOL_NAME \ --node-count 3 \ --os-type Windows \ --disable-windows-outbound-natRésultats :
{ "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myNatClusterxxx/agentPools/mynpxxx", "name": "mynpxxx", "osType": "Windows", "provisioningState": "Succeeded", "resourceGroup": "myResourceGroupxxx", "type": "Microsoft.ContainerService/managedClusters/agentPools" }
Étapes suivantes
Pour plus d’informations sur la passerelle NAT Gateway, consultez la documentation relative à Azure NAT Gateway.