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

適用対象: ✔️ AKS 自動 ✔️ AKS Standard

ほとんどの運用ワークロードでは、AKS の推奨される運用環境対応の既定値は AKS Automatic です。 AKS 自動クラスターには、事前構成済みのマネージド NAT ゲートウェイが含まれます。

AKS Standard では、クラスターの AKS で管理される送信接続が必要な場合に、マネージド NAT ゲートウェイを作成または構成できます。 Bring Your Own (BYO) ネットワーク シナリオでは、ユーザー割り当て NAT ゲートウェイを使用します。

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

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

重要

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

前提条件

AKS 自動クラスターには、事前構成済みのマネージド NAT ゲートウェイが含まれます。 この記事の手順は、主に AKS Standard とカスタム ネットワークのシナリオを対象にしています。

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

重要

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

AKS のマネージド NAT ゲートウェイ

AKS Automatic では、事前構成済みの運用対応の既定値の一部としてマネージド NAT ゲートウェイが使用されます。 このセクションは、AKS Standard を使用している場合、または AKS クラスターでのマネージド NAT ゲートウェイの動作を理解する必要がある場合に使用します。

マネージド NAT ゲートウェイは、AKS で管理される送信オプションです。 AKS は、クラスター ノードに送信接続を提供するために NAT ゲートウェイを作成および管理します。

必要な場合は、マネージド NAT ゲートウェイを使用します。

  • 運用上のオーバーヘッドが少ない AKS で管理された送信接続。
  • 運用環境に優しい既定の送信パス。
  • カスタマー マネージド NAT ゲートウェイのデプロイよりも簡単なエグレス管理。
  • 独自の NAT ゲートウェイ リソースを持ち込まない標準的な AKS ネットワーク モデル。

マネージド NAT Gateway を使用して AKS クラスターを作成する

送信 IP パラメーター

次の表では、各送信 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 カスタマー

マネージド StandardV2 NAT ゲートウェイを使用して AKS クラスターを作成する (managedNATGatewayV2)

重要

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

  • 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 ゲートウェイでは機能しません。

aks-preview Azure CLI 拡張機能をインストールする

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

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

ManagedNATGatewayV2Preview フィーチャーフラグを登録する

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

    az feature register --namespace "Microsoft.ContainerService" --name "ManagedNATGatewayV2Preview"
    
  2. az feature show コマンドを使用して、登録が成功したことを確認します。 登録が完了するまで数分かかります。

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

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

マネージド StandardV2 NAT ゲートウェイを使用して AKS クラスターを作成する

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

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

    # Set environment variables for resource group, AKS cluster, public IP, and public IP prefix names
    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"
    
    # Create the resource group
    az group create --name $MY_RG --location "eastus2"
    
  2. az network public-ip create コマンドを使用して、ゾーン冗長 IPv4 パブリック IP アドレスとパブリック IP プレフィックスを作成します。 マネージド StandardV2 NAT ゲートウェイの送信 IP として使用する $MY_IP$MY_IP_PREFIX を格納します。

    # Create a zone redundant IPv4 public IP address and store the ID to $MY_IP_ID for later use
    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 publicIp.id \
        --output tsv)
    
    # Create a zone redundant IPv4 public IP prefix and store the ID to $MY_IP_PREFIX_ID for later use
    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)
    
  3. AKS クラスターを作成し、$MY_IP_ID$MY_IP_PREFIX_ID、およびaz aks createパラメーターで --outbound-type managedNATGatewayV2 コマンドを使用して、パブリック IP アドレス (--nat-gateway-outbound-ips) とパブリック IP プレフィックス (--nat-gateway-outbound-ip-prefixes) を参照します。

    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 ゲートウェイが最初に作成され、不変のままである場合に決定されます。

マネージド Standard NAT ゲートウェイを使用して AKS クラスターを作成する (managedNATGateway)

  • az aks create--outbound-type managedNATGateway、および--nat-gateway-managed-outbound-ip-countパラメーターを指定して --nat-gateway-idle-timeout コマンドを使用して、マネージド Standard NAT ゲートウェイを使用して AKS クラスターを作成します。 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 コマンドを使用して、リソース グループを作成します。

    # Set environment variables for resource group, AKS cluster, public IP, and public IP prefix names
    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export MY_RG="myResourceGroup$RANDOM_SUFFIX"
    
    # Create the resource group
    az group create --name $MY_RG --location southcentralus
    
  2. ネットワークアクセス許可のマネージド ID を作成し、後で使用するために $IDENTITY_ID に 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
    

実稼働に関する考慮事項

運用環境でマネージド NAT ゲートウェイを使用する場合は、送信トラフィックの動作、API サーバーのアクセス、ワークロードの回復性を計画します。

  • ほとんどの AKS ワークロードで推奨される運用環境対応の既定値が必要な場合は、AKS Automatic を使用します。
  • 独自の NAT ゲートウェイを使用せずに AKS で管理される送信接続が必要な場合は、AKS Standard でマネージド NAT ゲートウェイを使用します。
  • API サーバー トラフィックの露出を減らす場合は、プライベート クラスターまたは API Server VNet 統合を使用します。
  • 公開する前に、送信 IP 要件を確認します。
  • ワークロードが固定の送信アドレスに依存している場合は、デプロイ前にマネージド NAT ゲートウェイがこれらの要件を満たしていることを検証します。
  • AKS とは別に NAT を管理する必要がある場合は、ユーザー割り当て NAT ゲートウェイを使用します。

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 ゲートウェイに切り替えるには、NAT ゲートウェイを VNet に追加するか、 az aks upgrade 実行して送信の種類を更新します。

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

  • Load Balancerによる SNAT (既定の送信NAT を使用する必要があります) には、ホスト IP に 64 個のポートがあります。
  • SNAT by Azure Firewall (アウトバウンドNAT を無効にする) には、パブリック IP あたり 2,496 ポートがあります。
  • SNAT by NAT ゲートウェイ (アウトバウンド NAT を無効にする) には、パブリック 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 を有効にすることが必要な合があります。

    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と AKS Automatic の詳細については、次の記事を参照してください。