Azure Kubernetes Service (AKS) クラスターのマネージド NAT ゲートウェイまたはユーザー割り当て NAT ゲートウェイを作成する

Azure Load Balancer経由でエグレス トラフィックをルーティングできますが、使用できるトラフィックの送信フローの数には制限があります。 Azure NAT Gatewayでは、IP アドレスあたり最大 64,512 個の送信 UDP および TCP トラフィック フローが許可され、IP アドレスは最大 16 個です。 NAT ゲートウェイをサポートする送信の種類には、 managedNATGatewayV2 (プレビュー)、 managedNATGatewayuserAssignedNATGatewayの 3 種類があります。

マネージド NAT ゲートウェイ モデルでは、AKS によって NAT ゲートウェイが管理され、クラスター ノードに送信接続が提供されます。 AKS では、新しい managedNATGatewayV2 と元の managedNATGatewayの 2 つのマネージド NAT ゲートウェイ オプションがサポートされています。 managedNATgatewayV2 では、 既定でゾーン冗長である StandardV2 NAT ゲートウェイが使用され、1 つの可用性ゾーンがダウンした場合でも継続的な送信接続が提供されます。 Standard NAT ゲートウェイとは異なり、ゾーンを指定する必要がありません。ゾーン冗長性は自動的に組み込まれています。 StandardV2 NAT ゲートウェイでは、IPv6、より高いスループット、およびフロー ログもサポートされます。 詳細については、 StandardV2 NAT ゲートウェイ SKU に関するページを参照してください。

重要

managedNATGatewayV2送信の種類は現在プレビュー段階です。 Azureのベータ版、プレビュー版、またはまだ一般公開されていない機能に適用される法的条件については、Microsoft Azure プレビューの追加利用規約をご覧ください。

userAssignedNATGateway は、AKS とは無関係に構成するカスタマー マネージド NAT ゲートウェイ リソースであり、独自の仮想ネットワークを使用する場合に必要です。

この記事では、マネージド NAT ゲートウェイと、エグレス トラフィック用のユーザー割り当て NAT ゲートウェイを使用してAzure Kubernetes Service (AKS) クラスターを作成する方法について説明します。 また、Windowsで OutboundNAT を無効にする方法についても説明します。

開始する前に

  • 最新バージョンの Azure CLIを使用していることを確認します。
  • Kubernetes バージョン 1.20.x 以降を使用していることを確認します。
  • マネージド NAT ゲートウェイは、カスタム仮想ネットワークと互換性がありません。

重要

公開クラスターでは、API サーバー クラスターのトラフィックは、クラスターのアウトバウンド タイプを通じてルーティングされ、処理されます。 API サーバー トラフィックがパブリック トラフィックとして処理されることを防ぐには、プライベート クラスターの使用を検討するか、API Server VNet 統合機能を確認してください。

を使用して AKS クラスターを作成する managedNATgatewayV2

  • az aks create--outbound-type managedNATGateway--nat-gateway-outbound-ips--nat-gateway-outbound-ip-prefixes--nat-gateway-managed-outbound-ip-count、および--nat-gateway-managed-outbound-ipv6-countパラメーターを使用して、--nat-gateway-idle-timeout コマンドを使用して、マネージド StandardV2 NAT ゲートウェイを使用して AKS クラスターを作成します。
  • managedNATgatewayV2 の送信 IP を構成する場合は、次の方法のいずれかを使用する必要があります — Azure マネージドの送信 IP とカスタマー定義の送信 IP の両方を使用することはできません。
    • Azure マネージド IP--nat-gateway-managed-ip-outbound-count または --nat-gateway-managed-outbound-ipv6-count を使用して、Azure が送信パブリック IP を自動的に割り当てて管理します。
    • 顧客定義 IP--nat-gateway-outbound-ips--nat-gateway-outbound-ip-prefixes を使用して、事前にプロビジョニングされたパブリック IP アドレスまたはプレフィックスを独自に取り込み、送信トラフィックに使用される特定のアドレスを完全に制御できます。 StandardV2 NAT ゲートウェイでは、新しい StandardV2 パブリック IP を使用する必要があります。 既存の Standard SKU パブリック IP は、StandardV2 NAT ゲートウェイでは機能しません。

次の表では、各送信 IP パラメーターとその使用方法について説明します。

パラメーター 入力 IP バージョン パブリック IP を管理するのは誰か
--nat-gateway-managed-outbound-ip-count [1, 16] の範囲の値。 希望のアウトバウンド IPv4 の数は、NAT ゲートウェイのアウトバウンド接続用です。 IPv4 Azure
--nat-gateway-managed-outbound-ipv6-count [1, 16] の範囲の値。 NAT ゲートウェイの送信接続における必要なアウトバウンド IPv6 の数。 IPv6 Azure
--nat-gateway-outbound-ips NAT ゲートウェイ送信接続用のコンマ区切りのパブリック IP リソース ID。 IPv4 または IPv6 カスタマー
--nat-gateway-outbound-ip-prefixes NAT ゲートウェイ送信接続用のコンマ区切りのパブリック IP プレフィックス リソース ID。 IPv4 または IPv6 カスタマー

managedNATGatewayV2送信の種類は現在プレビュー段階です。この送信の種類を使用するには、aks-preview Azure CLI 拡張機能をインストールし、ManagedNATGatewayV2Preview 機能フラグを登録するには、次の手順が必要です。

重要

AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。 詳細については、次のサポート記事を参照してください。

  1. az extension add または az extension update コマンドを使用して、Azure CLI プレビュー拡張機能をインストールまたは更新します。

    aks-preview Azure CLI 拡張機能の最小バージョンは 20.0.0b1 です。

    # Install the aks-preview extension
    az extension add --name aks-preview
    # Update the extension to make sure you have the latest version installed
    az extension update --name aks-preview
    
  2. ManagedNATGatewayV2Preview フィーチャーフラグを登録する

    ManagedNATGatewayV2Preview コマンドを使用して、az feature register 機能フラグを登録します。

    az feature register --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    

    az feature show コマンドを使用して、登録が成功したことを確認します。 登録が完了するまで数分かかります。

    az feature show --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    

    機能に Registered が表示されたら、Microsoft.ContainerService コマンドを使用して、az provider register リソース プロバイダーの登録を更新します。

    次のコマンドでは、必要なリソース グループ、NAT ゲートウェイにアタッチするパブリック IP およびパブリック IP プレフィックス リソース、およびマネージド StandardV2 NAT ゲートウェイを持つ AKS クラスターを作成します。

  3. az group create コマンドを使用して、リソース グループを作成します。

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    export MY_AKS="myNatV2Cluster$RANDOM_SUFFIX"
    export MY_IP="myNatOutboundIP$RANDOM_SUFFIX"
    export MY_IP_PREFIX="myNatOutboundIPPrefix$RANDOM_SUFFIX"
    az group create --name $MY_RG --location "eastus2"
    
  4. az network public-ip create コマンドを使用して、ゾーン冗長 IPv4 パブリック IP アドレスとパブリック IP プレフィックスを作成します。 マネージド StandardV2 NAT ゲートウェイの送信 IP として使用する $MY_IP$MY_IP_PREFIX を格納します。

    export MY_IP_ID=$(az network public-ip create \
        --resource-group $MY_RG \
        --name $MY_IP \
        --location eastus2 \
        --sku StandardV2 \
        --allocation-method Static \
        --version IPv4 \
        --zone 1 2 3 \
        --query id \
        --output tsv)
    
    export MY_IP_PREFIX_ID=$(az network public-ip prefix create \
        --resource-group $MY_RG \
        --name $MY_IP_PREFIX \
        --location eastus2 \
        --length 31 \
        --sku StandardV2 \
        --version IPv4 \
        --zone 1 2 3 \
        --query id \
        --output tsv)
    
  5. AKS クラスターを作成し、パブリック IP アドレス ($MY_IP_ID) とパブリック IP プレフィックス ($MY_IP_PREFIX_ID) を参照します。

    az aks create \
        --resource-group $MY_RG \
        --name $MY_AKS \
        --node-count 3 \
        --outbound-type managedNATGatewayV2 \
        --nat-gateway-outbound-ips $MY_IP_ID \
        --nat-gateway-outbound-ip-prefixes $MY_IP_PREFIX_ID \
        --nat-gateway-idle-timeout 4 \
        --generate-ssh-keys
    

az aks update--nat-gateway-outbound-ips--nat-gateway-outbound-ip-prefixes--nat-gateway-managed-outbound-count、または--nat-gateway-managed-outbound-ipv6-count パラメーターを使用して、--nat-gateway-idle-timeout コマンドを使用して、送信 IP、送信 IP プレフィックス、マネージド送信 IP 数、またはアイドル タイムアウトを更新します。 managedNATGatewayV2を更新して、作成後に顧客が定義した送信 IP アドレスと管理対象の送信 IP アドレスを切り替えることはできません。 送信 IP 構成は、StandardV2 NAT ゲートウェイが最初に作成され、変更不可のままである場合に決定されます。

を使用して AKS クラスターを作成する managedNATgateway

  • マネージド Standard NAT ゲートウェイを使用して、az aks create--outbound-type managedNATGateway コマンドを使用し、AKS クラスターを作成します。 --nat-gateway-managed-outbound-ip-countパラメーターと--nat-gateway-idle-timeoutパラメーター NAT ゲートウェイを特定の可用性ゾーンから操作する場合は、 --zonesを使用してゾーンを指定します。

  • マネージド NAT ゲートウェイ リソースは複数の可用性ゾーンで使用できません。 ゾーン冗長送信接続の場合は、 managedNATgatewayV2の使用を検討してください。

  • マネージド NAT ゲートウェイの作成時にゾーンが指定されていない場合、NAT ゲートウェイは既定で "ゾーンなし" にデプロイされます。 NAT ゲートウェイが ゾーンに配置されていない場合、Azure はリソースをゾーンに配置します。 ゾーンなしのデプロイ モデルの詳細については、ゾーンなしの NAT ゲートウェイに関する記事を参照してください。

を使用して AKS クラスターを作成する userAssignedNatGateway

この構成では、(Azure CNI 経由で) 独自のネットワークを使用し、NAT ゲートウェイがサブネットに事前構成されている必要があります。 この outbound-typeでは、Standard と StandardV2 の両方の NAT ゲートウェイがサポートされています。 次のコマンドでは、AKS クラスターの StandardV2 NAT ゲートウェイ リソースをデプロイするために必要なリソースを作成します。

  1. az group create コマンドを使用して、リソース グループを作成します。

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    az group create --name $MY_RG --location southcentralus
    
  2. ネットワークのアクセス許可のためのマネージド ID を作成し、後で使用できるように ID を $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)
    

    結果:

    /xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myNatClusterIdxxx
    
  3. az network public-ip create コマンドを使用して、NAT ゲートウェイの StandardV2 パブリック IP を作成します。 StandardV2 NAT ゲートウェイには、StandardV2 パブリック IP アドレスが必要です。

    export PIP_NAME="myNatGatewayPip$RANDOM_SUFFIX"
    az network public-ip create \
        --resource-group $MY_RG \
        --name $PIP_NAME \
        --location southcentralus \
        --allocation-method Static \
        --version IPv4 \
        --zone 1 2 3 \
        --sku standard-v2
    
  4. az network nat gateway create コマンドを使用して StandardV2 NAT ゲートウェイを作成します。

    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 \
        --sku StandardV2
        --idle-timeout 4
    

    重要

    ゾーンの冗長性を確保するには、StandardV2 NAT ゲートウェイ リソースをデプロイすることをお勧めします。これは、リージョン内の複数の可用性ゾーンにまたがっています。 これにより、1 つのゾーンで障害が発生した場合でも、継続的な送信接続が保証されます。 StandardV2 NAT ゲートウェイとその利点の詳細については、「 StandardV2 NAT ゲートウェイ」を参照してください。 これに対して、Standard NAT ゲートウェイ リソースは、デプロイされている可用性ゾーン内でのみ回復性を提供します。

  5. 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/20 
    
  6. NAT ゲートウェイを使用して仮想ネットワークにサブネットを作成し、後で使用できるように ID を $SUBNET_ID に保存します。

    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)
    
  7. az aks create コマンドを使用して、NAT ゲートウェイがあるサブネットとマネージド ID を使用する AKS クラスターを作成します。

    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
    

Windows のアウトバウンドNATを無効にする

outboundNAT Windows、AKS ポッドとの特定の接続と通信の問題を引き起こす可能性があります。 問題問題の一例として、ノード ポートの再利用があります。 この例では、Windows OutboundNAT はポートを使用してポッド IP を Windows ノード ホスト IP に変換します。これにより、ポート不足の問題が原因で外部サービスへの接続が不安定になる可能性があります。

Windowsは、既定で OutboundNAT を有効にします。 新しいWindows エージェント プールを作成するときに、OutboundNAT を手動で無効にできるようになりました。

前提条件

  • v1.26 以上の既存の AKS クラスター。 Kubernetes バージョン 1.25 以前を使用している場合は、デプロイ構成を更新する必要があります。

制限事項

  • クラスターの送信の種類を LoadBalancer に設定することはできません。 NAT ゲートウェイまたは UDR に設定できます。
    • NAT ゲートウェイ: NAT ゲートウェイは NAT 接続を自動的に処理でき、Standard Load Balancerよりも強力です。 このオプションを使用すると、追加料金が発生する場合があります。
    • UDR (UserDefinedRouting): ルーティング規則を構成する場合は、ポートの制限事項に留意する必要があります。
    • ロード バランサーから NAT Gateway に切り替える必要がある場合は、NAT Gateway を VNet に追加するか、az aks upgrade を実行して送信の種類を更新できます。

UserDefinedRouting には次の制限があります。

  • Load Balancerによる SNAT (既定の送信NAT を使用する必要があります) には、"ホスト IP 上の 64 ポート" があります。
  • SNAT by Azure Firewall (アウトバウンドNAT を無効にする) には、パブリック IP あたり 2496 ポートがあります。
  • NAT Gateway による SNAT (OutboundNAT を無効にする) には、パブリック IP あたり 64,512 ポートがあります。
  • Azure Firewallポート範囲がアプリケーションに対して十分でない場合は、NAT ゲートウェイを使用する必要があります。
  • 宛先 IP アドレスが IANA RFC 1918 または IANA RFC 6598 ごとの共有アドレス空間のプライベート IP アドレス範囲にある場合、Azure Firewallはネットワーク 規則を使用して SNAT を行いません。

Windowsの OutboundNAT を手動で無効にする

  • az aks nodepool add フラグを指定して --disable-windows-outbound-nat コマンドを使用して新しいWindows エージェント プールを作成するときに、Windowsの outboundNAT を手動で無効にします。

    既存の AKS クラスターを使用できますが、送信の種類を更新し、ノード プールを追加して --disable-windows-outbound-nat を有効にすることが必要な合があります。

    次のコマンドは、既存の AKS クラスターに Windows ノード プールを追加し、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-nat
    

    結果:

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

次のステップ

Azure NAT Gatewayの詳細については、「Azure NAT Gatewayを参照してください。