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 ゲートウェイは、カスタム仮想ネットワークと互換性がありません。
重要
公開クラスターでは、API サーバー クラスターのトラフィックは、クラスターの送信の種類を通じてルーティングされ、処理されます。 API サーバー トラフィックが公開トラフィックとして処理されないようにするには、プライベート クラスターの使用を検討するか、API Server VNet 統合機能を確認してください。
マネージド 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 ゲートウェイは既定で "ゾーンなし" にデプロイされます。 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 \ --generate-ssh-keys
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 ゲートウェイがサブネットであらかじめ構成されていることを必要とします。 以下のコマンドを使用すると、このシナリオに必要なリソースが作成されます。
az group create
コマンドを使用して、リソース グループを作成します。az group create --name myResourceGroup \ --location southcentralus
ネットワークのアクセス許可のためのマネージド ID を作成し、後で使用できるように ID を
$IDENTITY_ID
に保存します。IDENTITY_ID=$(az identity create \ --resource-group myResourceGroup \ --name myNatClusterId \ --location southcentralus \ --query id \ --output tsv)
az network public-ip create
コマンドを使用して、NAT ゲートウェイのパブリック IP を作成します。az network public-ip create \ --resource-group myResourceGroup \ --name myNatGatewayPip \ --location southcentralus \ --sku standard
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 ゲートウェイがゾーンに配置されます。
az network vnet create
コマンドを使用して、仮想ネットワークを作成します。az network vnet create \ --resource-group myResourceGroup \ --name myVnet \ --location southcentralus \ --address-prefixes 172.16.0.0/20
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)
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 \ --assign-identity $IDENTITY_ID \ --generate-ssh-keys
Windows の OutboundNAT を無効にする
Windows OutboundNAT が原因で、AKS ポッドとの特定の接続と通信で問題が発生する可能性があります。 問題問題の一例として、ノード ポートの再利用があります。 この例では、Windows OutboundNAT で、ポッド IP を Windows ノード ホスト IP に変換するためにポートが使用されるため、ポートの枯渇の問題が原因で外部サービスへの接続が不安定になる可能性があります。
Windows では、既定で OutboundNAT が有効になります。 新しい Windows エージェント プールを作成するとき、OutboundNAT を手動で無効にできます。
前提条件
- v1.26 以上の既存の AKS クラスター。 Kubernetes バージョン 1.25 以前を使用している場合は、デプロイ構成を更新する必要があります。
制限事項
- クラスターの送信の種類を 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 mynp \ --node-count 3 \ --os-type Windows \ --disable-windows-outbound-nat
次のステップ
NAT Gateway の詳細については、Azure NAT Gateway に関する記事を参照してください。
Azure Kubernetes Service