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

Azure Load Balancer 経由でエグレス トラフィックをルーティングできますが、使用できる送信フローのトラフィック数には制限があります。 Azure NAT Gateway では、IP アドレスあたり最大で 64,512 個の送信 UDP および TCP トラフィック フローが許容され、最大で 16 個の IP アドレスを使用できます。

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

開始する前に

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

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

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

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

  • マネージド NAT ゲートウェイ リソースは、複数の可用性ゾーンで使用することはできません。

      az aks create \
          --resource-group myResourceGroup \
          --name myNatCluster \
          --node-count 3 \
          --outbound-type managedNATGateway \
          --nat-gateway-managed-outbound-ip-count 2 \
          --nat-gateway-idle-timeout 4
    
  • az aks update または --nat-gateway-managed-outbound-ip-count パラメーターを指定して --nat-gateway-idle-timeout コマンドを使用して、送信 IP アドレスまたはアイドル タイムアウトを更新します。

    az aks update \ 
        --resource-group myResourceGroup \
        --name myNatCluster\
        --nat-gateway-managed-outbound-ip-count 5
    

ユーザー割り当て NAT Gateway を使用して AKS クラスターを作成する

この構成は、独自のネットワークを (Kubenet または Azure CNI 経由で) 持ち込むことと、NAT ゲートウェイがサブネットであらかじめ構成されていることを必要とします。 以下のコマンドを使用すると、このシナリオに必要なリソースが作成されます。

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

    az group create --name myResourceGroup \
        --location southcentralus
    
  2. ネットワークのアクセス許可のためのマネージド ID を作成し、後で使用できるように ID を $IDENTITY_ID に保存します。

    IDENTITY_ID=$(az identity create \
        --resource-group myResourceGroup \
        --name myNatClusterId \
        --location southcentralus \
        --query id \
        --output tsv)
    
  3. az network public-ip create コマンドを使用して、NAT ゲートウェイのパブリック IP を作成します。

    az network public-ip create \
        --resource-group myResourceGroup \
        --name myNatGatewayPip \
        --location southcentralus \
        --sku standard
    
  4. az network nat gateway create コマンドを使用して、NAT ゲートウェイを作成します。

    az network nat gateway create \
        --resource-group myResourceGroup \
        --name myNatGateway \
        --location southcentralus \
        --public-ip-addresses myNatGatewayPip
    

    重要

    1 つの NAT ゲートウェイ リソースを複数の可用性ゾーンで使用することはできません。 ゾーンの回復性を確保するには、NAT ゲートウェイ リソースを各可用性ゾーンにデプロイし、各ゾーン内の AKS クラスターを含むサブネットに割り当てることをお勧めします。 このデプロイ モデルの詳細については、各ゾーンの NAT ゲートウェイに関する記事を参照してください。 NAT ゲートウェイ用にゾーンが構成されていない場合、既定のゾーン配置は "ゾーンなし" で、その場合、Azure によって NAT ゲートウェイがゾーンに配置されます。

  5. az network vnet create コマンドを使用して、仮想ネットワークを作成します。

    az network vnet create \
        --resource-group myResourceGroup \
        --name myVnet \
        --location southcentralus \
        --address-prefixes 172.16.0.0/20 
    
  6. NAT ゲートウェイを使用して仮想ネットワークにサブネットを作成し、後で使用できるように ID を $SUBNET_ID に保存します。

    SUBNET_ID=$(az network vnet subnet create \
        --resource-group myResourceGroup \
        --vnet-name myVnet \
        --name myNatCluster \
        --address-prefixes 172.16.0.0/22 \
        --nat-gateway myNatGateway \
        --query id \
        --output tsv)
    
  7. az aks create コマンドを使用して、NAT ゲートウェイがあるサブネットとマネージド ID を使用する AKS クラスターを作成します。

    az aks create \
        --resource-group myResourceGroup \
        --name myNatCluster \
        --location southcentralus \
        --network-plugin azure \
        --vnet-subnet-id $SUBNET_ID \
        --outbound-type userAssignedNATGateway \
        --enable-managed-identity \
        --assign-identity $IDENTITY_ID
    

Windows の OutboundNAT を無効にする (プレビュー)

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

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

前提条件

  • Kubernetes バージョン 1.25 以前を使用している場合は、デプロイ構成を更新する必要があります。

  • aks-preview をインストールまたは更新し、機能フラグを登録する必要があります。

    1. az extension add または az extension update コマンドを使用して、aks-preview をインストールまたは更新します。
    # Install aks-preview
    az extension add --name aks-preview
    
    # Update aks-preview
    az extension update --name aks-preview
    
    1. az feature register コマンドを使用して、機能フラグを登録します。
    az feature register --namespace Microsoft.ContainerService --name DisableWindowsOutboundNATPreview
    
    1. az feature list コマンドを使用して、登録の状態を確認します。
    az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/DisableWindowsOutboundNATPreview')].{Name:name,State:properties.state}"
    
    1. az provider register コマンドを使用して、Microsoft.ContainerService リソース プロバイダーの登録を更新します。
    az provider register --namespace Microsoft.ContainerService
    

制限事項

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

Note

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

  • Load Balancer による SNAT (既定の OutboundNAT を使用する必要があります) には、"ホスト IP 上に 64 ポート" があります。
  • Azure Firewall による SNAT (OutboundNAT を無効にする) には、パブリック IP あたり 2,496 ポートがあります。
  • NAT Gateway による SNAT (OutboundNAT を無効にする) には、パブリック IP あたり 64,512 ポートがあります。
  • Azure Firewall のポート範囲がアプリケーションに十分ではない場合、NAT Gateway を使用する必要があります。
  • 宛先の IP アドレスが IANA RFC 1918 に基づくプライベート IP アドレス範囲、または IANA RFC 6598 に基づく共有アドレス空間内にある場合、Azure Firewall では、ネットワーク ルールによる SNAT は行われません。

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

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

    Note

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

    az aks nodepool add \
        --resource-group myResourceGroup
        --cluster-name myNatCluster
        --name mynodepool
        --node-count 3
        --os-type Windows
        --disable-windows-outbound-nat
    

次のステップ

NAT Gateway の詳細については、Azure NAT Gateway に関する記事を参照してください。