Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Hoewel u uitgaand verkeer kunt routeren via een Azure Load Balancer, gelden er beperkingen voor het aantal uitgaande stromen verkeer dat u kunt hebben. Met Azure NAT Gateway kunnen maximaal 64.512 uitgaande UDP- en TCP-verkeersstromen per IP-adres met maximaal 16 IP-adressen worden toegestaan.
In dit artikel wordt beschreven hoe u een AKS-cluster (Azure Kubernetes Service) maakt met een beheerde NAT-gateway en een door de gebruiker toegewezen NAT-gateway voor uitgaand verkeer. Daarin wordt ook getoond hoe u Uitgaand NAT kunt uitschakelen in Windows.
Voordat u begint
- Zorg ervoor dat u de nieuwste versie van Azure CLI gebruikt.
- Zorg ervoor dat u Kubernetes versie 1.20.x of hoger gebruikt.
- Beheerde NAT-gateway is niet compatibel met aangepaste virtuele netwerken.
Belangrijk
In niet-privéclusters wordt het verkeer van API-serverclusters gerouteerd en verwerkt via het uitgaande type van de clusters. Als u wilt voorkomen dat API-serververkeer als openbaar verkeer wordt verwerkt, kunt u overwegen een privécluster te gebruiken of de functie VNet-integratie van API Server te bekijken.
Een AKS-cluster maken met een beheerde NAT-gateway
- Maak een AKS-cluster met een nieuwe beheerde NAT-gateway met behulp van de opdracht met de
az aks create--outbound-type managedNATGateway--nat-gateway-managed-outbound-ip-count, en--nat-gateway-idle-timeoutparameters. Als u wilt dat de NAT-gateway buiten een specifieke beschikbaarheidszone werkt, geeft u de zone op met behulp van--zones. - Als er geen zone is opgegeven bij het maken van een beheerde NAT-gateway, wordt de NAT-gateway standaard geïmplementeerd in 'geen zone'. Wanneer de NAT-gateway in geen zone wordt geplaatst, plaatst Azure de resource in een zone voor u. Zie niet-zonegebonden NAT-gateway voor meer informatie over het niet-zonegebonden implementatiemodel.
- Een beheerde NAT-gatewayresource kan niet worden gebruikt in meerdere beschikbaarheidszones.
Met de volgende opdrachten maakt u eerst de vereiste resourcegroep en vervolgens het AKS-cluster met een beheerde NAT-gateway.
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"
Resultaten:
{
"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
Resultaten:
{
"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"
}
- Werk het uitgaande IP-adres of de time-out voor inactiviteit bij met behulp van de
az aks updateopdracht met de--nat-gateway-managed-outbound-ip-countof--nat-gateway-idle-timeoutparameter.
In het volgende voorbeeld wordt het beheerde uitgaande IP-aantal van de NAT-gateway voor het AKS-cluster bijgewerkt naar 5.
az aks update \
--resource-group $MY_RG \
--name $MY_AKS \
--nat-gateway-managed-outbound-ip-count 5
Resultaten:
{
"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"
}
Een AKS-cluster maken met een door de gebruiker toegewezen NAT-gateway
Deze configuratie vereist bring-your-own-netwerken (via Kubenet of Azure CNI) en dat de NAT-gateway vooraf is geconfigureerd op het subnet. Met de volgende opdrachten maakt u de vereiste resources voor dit scenario.
Maak een resourcegroep met behulp van de
az group createopdracht.export RANDOM_SUFFIX=$(openssl rand -hex 3) export MY_RG="myResourceGroup$RANDOM_SUFFIX" az group create --name $MY_RG --location southcentralusResultaten:
{ "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx", "location": "southcentralus", "managedBy": null, "name": "myResourceGroupxxx", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" }Maak een beheerde identiteit voor netwerkmachtigingen en sla de id op voor later gebruik
$IDENTITY_ID.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)Resultaten:
/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myNatClusterIdxxxMaak een openbaar IP-adres voor de NAT-gateway met behulp van de
az network public-ip createopdracht.export PIP_NAME="myNatGatewayPip$RANDOM_SUFFIX" az network public-ip create \ --resource-group $MY_RG \ --name $PIP_NAME \ --location southcentralus \ --sku standardResultaten:
{ "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", ... } }Maak de NAT-gateway met behulp van de
az network nat gateway createopdracht.export NATGATEWAY_NAME="myNatGateway$RANDOM_SUFFIX" az network nat gateway create \ --resource-group $MY_RG \ --name $NATGATEWAY_NAME \ --location southcentralus \ --public-ip-addresses $PIP_NAMEResultaten:
{ "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" }Belangrijk
Om zoneredundantie te garanderen, is het raadzaam om een StandardV2 NAT-gatewayresource te implementeren, die meerdere beschikbaarheidszones in een regio omvat. Dit zorgt voor continue uitgaande connectiviteit, zelfs als één zone mislukt. Zie StandardV2 NAT-gateway voor meer informatie over de StandardV2 NAT-gateway en de voordelen ervan. Ter vergelijking: een Standaard NAT-gatewayresource biedt alleen tolerantie binnen de beschikbaarheidszone waarin deze wordt geïmplementeerd.
Maak een virtueel netwerk met behulp van de
az network vnet createopdracht.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/20Resultaten:
{ "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", ... } }Maak een subnet in het virtuele netwerk met behulp van de NAT-gateway en sla de ID op voor later gebruik.
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)Resultaten:
/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/virtualNetworks/myVnetxxx/subnets/myNatClusterxxxMaak een AKS-cluster met behulp van het subnet met de NAT-gateway en de beheerde identiteit met behulp van de
az aks createopdracht.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-keysResultaten:
{ "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" }
UitgaandeNAT voor Windows uitschakelen
Windows OutboundNAT kan bepaalde verbindings- en communicatieproblemen met uw AKS-pods veroorzaken. Een voorbeeld van een probleem is het hergebruik van knooppuntpoorten. In dit voorbeeld gebruikt Windows UitgaandeNAT poorten om uw pod-IP te vertalen naar het HOST-IP-adres van uw Windows-knooppunt, wat kan leiden tot een instabiele verbinding met de externe service vanwege een probleem met poortuitputting.
Windows schakelt standaard OutboundNAT in. U kunt outboundNAT nu handmatig uitschakelen bij het maken van nieuwe Windows-agentgroepen.
Vereisten
- Bestaand AKS-cluster met v1.26 of hoger. Als u Kubernetes versie 1.25 of ouder gebruikt, moet u de implementatieconfiguratie bijwerken.
Beperkingen
- U kunt het uitgaande clustertype niet instellen op LoadBalancer. U kunt deze instellen als NAT Gateway of UDR.
- NAT-gateway: NAT Gateway kan automatisch nat-verbinding verwerken en is krachtiger dan Standard Load Balancer. Voor deze optie worden mogelijk extra kosten in rekening gebracht.
- UDR (UserDefinedRouting): u moet rekening houden met poortbeperkingen bij het configureren van routeringsregels.
- Als u wilt overschakelen van een load balancer naar NAT-gateway, kunt u een NAT-gateway toevoegen aan het VNet of uitvoeren
az aks upgradeom het uitgaande type bij te werken.
Notitie
UserDefinedRouting heeft de volgende beperkingen:
- SNAT by Load Balancer (moet de standaard-uitgaandeNAT gebruiken) heeft '64 poorten op het host-IP-adres'.
- SNAT by Azure Firewall (outboundNAT uitschakelen) heeft 2496 poorten per openbaar IP-adres.
- SNAT by NAT Gateway (outboundNAT uitschakelen) heeft 64512 poorten per openbaar IP-adres.
- Als het poortbereik van Azure Firewall niet voldoende is voor uw toepassing, moet u NAT Gateway gebruiken.
- Azure Firewall biedt geen SNAT met netwerkregels wanneer het doel-IP-adres zich in een privé-IP-adresbereik bevindt per IANA RFC 1918 of gedeelde adresruimte per IANA RFC 6598.
UitgaandeNAT voor Windows handmatig uitschakelen
Schakel UitgaandeNAT voor Windows handmatig uit bij het maken van nieuwe Windows-agentgroepen met behulp van de
az aks nodepool addopdracht met de--disable-windows-outbound-natvlag.Notitie
U kunt een bestaand AKS-cluster gebruiken, maar mogelijk moet u het uitgaande type bijwerken en een knooppuntgroep toevoegen om dit in te schakelen
--disable-windows-outbound-nat.Met de volgende opdracht wordt een Windows-knooppuntgroep toegevoegd aan een bestaand AKS-cluster, waardoor UitgaandeNAT wordt uitgeschakeld.
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-natResultaten:
{ "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" }
Volgende stappen
Zie Azure NAT Gateway voor meer informatie over Azure NAT Gateway.