Megosztás a következőn keresztül:


Felügyelt vagy felhasználó által hozzárendelt NAT-átjáró létrehozása az Azure Kubernetes Service-fürthöz

Bár a kimenő forgalmat az Azure Load Balanceren keresztül irányíthatja, a kimenő forgalom száma korlátozott. Az Azure NAT Gateway legfeljebb 64 512 kimenő UDP- és TCP-forgalmat tesz lehetővé IP-címenként, legfeljebb 16 IP-címmel.

Ez a cikk bemutatja, hogyan hozhat létre Azure Kubernetes Service-fürtöt (AKS) felügyelt NAT-átjáróval és felhasználó által hozzárendelt NAT-átjáróval a kimenő forgalom számára. Azt is bemutatja, hogyan tilthatja le az OutboundNAT-t Windows rendszeren.

Mielőtt elkezdené

  • Győződjön meg arról, hogy az Azure CLI legújabb verzióját használja.
  • Győződjön meg arról, hogy a Kubernetes 1.20.x vagy újabb verzióját használja.
  • A felügyelt NAT-átjáró nem kompatibilis az egyéni virtuális hálózatokkal.

Fontos

A nem privát fürtökben az API-kiszolgáló fürt forgalmát a rendszer a kimenő típuson keresztül irányítja és dolgozza fel. Ha meg szeretné akadályozni, hogy az API-kiszolgáló forgalma nyilvános forgalomként legyen feldolgozva, fontolja meg egy privát fürt használatát, vagy tekintse meg az API Server virtuális hálózatok integrációjának funkcióját.

Hozzon létre egy AKS-fürtöt felügyelt NAT-átjáróval.

  • Hozzon létre egy AKS-fürtöt egy új felügyelt NAT-átjáróval a az aks create, --outbound-type managedNATGateway, --nat-gateway-managed-outbound-ip-count és --nat-gateway-idle-timeout paranccsal. Ha azt szeretné, hogy a NAT-átjáró egy adott rendelkezésre állási zónából működjön, adja meg a zónát a következővel --zones: .
  • Ha egy felügyelt NAT-átjáró létrehozásakor nincs zóna megadva, a NAT-átjáró alapértelmezés szerint a "nincs zóna" értékre lesz üzembe helyezve. Ha a NAT-átjáró nincs elhelyezve egy zónában, az Azure saját maga helyezi el az erőforrást egy zónában. A nem zonális üzemi modellről további információt a nem zonális NAT-átjáróban talál.
  • A felügyelt NAT-átjáró-erőforrás nem használható több rendelkezésre állási zónában.

A következő parancsok először létrehozzák a szükséges erőforráscsoportot, majd egy felügyelt NAT-átjáróval rendelkező AKS-fürtöt.

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"

Eredmények:

{
  "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

Eredmények:

{
  "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"
}
  • Frissítse a kimenő IP-címet vagy az inaktivitási időtúllépést a az aks update paranccsal a --nat-gateway-managed-outbound-ip-count vagy --nat-gateway-idle-timeout paraméterrel.

Az alábbi példa 5-re növeli az AKS-fürt NAT átjáró által kezelt kimenő IP-címek számát.

az aks update \
    --resource-group $MY_RG \
    --name $MY_AKS \
    --nat-gateway-managed-outbound-ip-count 5

Eredmények:

{
  "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"
}

Felhasználó által hozzárendelt NAT-átjáróval rendelkező AKS-fürt létrehozása

Ehhez a konfigurációhoz saját hálózatkezelésre van szükség (Kubeneten vagy Azure CNI-n keresztül), és hogy a NAT-átjáró előre konfigurálva legyen az alhálózaton. A következő parancsok hozzák létre a forgatókönyvhöz szükséges erőforrásokat.

  1. Hozzon létre egy erőforráscsoportot a az group create paranccsal.

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    az group create --name $MY_RG --location southcentralus
    

    Eredmények:

    {
      "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx",
      "location": "southcentralus",
      "managedBy": null,
      "name": "myResourceGroupxxx",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": "Microsoft.Resources/resourceGroups"
    }
    
  2. Hozzon létre egy felügyelt identitást a hálózati engedélyekhez, és tárolja az azonosítót $IDENTITY_ID későbbi használatra.

    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)
    

    Eredmények:

    /xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myNatClusterIdxxx
    
  3. Hozzon létre egy nyilvános IP-címet a NAT-átjáróhoz a az network public-ip create paranccsal.

    export PIP_NAME="myNatGatewayPip$RANDOM_SUFFIX"
    az network public-ip create \
        --resource-group $MY_RG \
        --name $PIP_NAME \
        --location southcentralus \
        --sku standard
    

    Eredmények:

    {
      "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",
        ...
      }
    }
    
  4. Hozza létre a NAT-átjárót a az network nat gateway create paranccsal.

    export NATGATEWAY_NAME="myNatGateway$RANDOM_SUFFIX"
    az network nat gateway create \
        --resource-group $MY_RG \
        --name $NATGATEWAY_NAME \
        --location southcentralus \
        --public-ip-addresses $PIP_NAME
    

    Eredmények:

    {
      "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"
    }
    

    Fontos

    Egyetlen NAT-átjáró-erőforrás nem használható több rendelkezésre állási zónában. A zónarugalmasság biztosítása érdekében ajánlott NAT-átjáróerőforrást üzembe helyezni minden rendelkezésre állási zónában, és hozzárendelni az egyes zónákban lévő AKS-fürtöket tartalmazó alhálózatokhoz. Az üzembe helyezési modellről további információt az egyes zónák NAT-átjárójában talál. Ha a NAT-átjáróhoz nincs zóna konfigurálva, az alapértelmezett zónaelhelyezés a "nincs zóna", amelyben az Azure a NAT-átjárót egy zónába helyezi.

  5. Hozzon létre egy virtuális hálózatot a az network vnet create paranccsal.

    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/20 
    

    Eredmények:

    {
      "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",
        ...
      }
    }
    
  6. Hozzon létre egy alhálózatot a virtuális hálózaton a NAT-átjáróval, és tárolja az azonosítót $SUBNET_ID későbbi használatra.

    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)
    

    Eredmények:

    /xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/virtualNetworks/myVnetxxx/subnets/myNatClusterxxx
    
  7. Hozzon létre egy AKS-fürtöt az alhálózat NAT-átjárójával és felügyelt identitás használatával a az aks create parancs segítségével.

    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-keys
    

    Eredmények:

    {
      "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"
    }
    

OutboundNAT letiltása Windowshoz

A Windows OutboundNAT bizonyos kapcsolati és kommunikációs problémákat okozhat az AKS-podokkal. Ilyen probléma például a csomópontportok újrafelhasználása. Ebben a példában a Windows OutboundNAT portok segítségével fordítja le a pod IP-címét a Windows-csomópont gazdagépének IP-címére, ami a portkimerülés okozta probléma miatt instabil kapcsolatot eredményezhet a külső szolgáltatással.

A Windows alapértelmezés szerint engedélyezi az OutboundNAT-t. Új Windows-ügynökkészletek létrehozásakor mostantól manuálisan is letilthatja a kimenőNAT-t.

Előfeltételek

Korlátozások

  • A fürt kimeneti típusát nem állíthatja be LoadBalancerre. Beállíthatja NAT-átjáróra vagy UDR-re:
    • NAT-átjáró: A NAT-átjáró képes automatikusan kezelni a NAT-kapcsolatot, és nagyobb teljesítményű, mint a Standard Load Balancer. Ezzel a lehetőséggel további díjak merülhetnek fel.
    • UDR (UserDefinedRouting): Az útválasztási szabályok konfigurálásakor szem előtt kell tartania a portkorlátozásokat.
    • Ha terheléselosztóról NAT-átjáróra kell váltania, hozzáadhat egy NAT-átjárót a virtuális hálózathoz, vagy futtathatja az aks upgrade a kimenő típus frissítéséhez.

Feljegyzés

A UserDefinedRouting a következő korlátozásokkal rendelkezik:

  • A Load Balancer által használt SNAT (az alapértelmezett OutboundNAT-t kell használnia) "64 porttal rendelkezik a hoszt IP-címéhez".
  • Az Azure Firewall által létrehozott SNAT (outboundNAT letiltása) nyilvános IP-címenként 2496 porttal rendelkezik.
  • A NAT-átjáró által létrehozott SNAT (outboundNAT letiltása) nyilvános IP-címenként 64512 porttal rendelkezik.
  • Ha az Azure Firewall porttartománya nem elég az alkalmazáshoz, a NAT Gatewayt kell használnia.
  • Az Azure Firewall nem SNAT hálózati szabályokkal rendelkezik, ha a cél IP-cím az IANA RFC 1918-ban egy privát IP-címtartományban van, vagy az IANA RFC 6598-onként megosztott címtérben van.

OutboundNAT manuális letiltása Windowshoz

  • Amikor új Windows-ügynökkészleteket hoz létre, manuálisan tiltsa le az OutboundNAT funkciót a az aks nodepool add paranccsal és a --disable-windows-outbound-nat jelzővel.

    Feljegyzés

    Használhat egy meglévő AKS-fürtöt, de lehet, hogy frissítenie kell a kimenő típusát, és hozzá kell adnia egy csomópontkészletet a --disable-windows-outbound-nat aktiválásához.

    Az alábbi parancs hozzáad egy Windows-csomópontkészletet egy meglévő AKS-fürthöz, letiltva a kimenőNAT-t.

      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-nat
    

    Eredmények:

    {
      "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"
    }
    

Következő lépések

További információ az Azure NAT Gatewayről: Azure NAT Gateway.