Azure VM の SNAT Port枯渇への対処

Azure

概要

  • Azure 初心者の新川です。今回は、Azure VM の SNAT Portが枯渇した場合の対処について、記載します。

Azure VM のSNAT とは

  • SNAT(ソースネットワークアドレス変換)とは、送信元となるプライベートアドレスをグローバルアドレスに変換する技術を指します。
  • Azure VMでは、パブリックロードバランサー(LB)のフロントエンド IPアドレスを使用して、バックエンドインスタンスにアウトバウンド接続を提供します。この通信においてSNATが利用され、バックエンドインスタンスは、LBのパブリック IPアドレスを共有します。
AzureVM / Public IP / SNAT Port
AzureVM / Public IP / SNAT Port

SNAT Port の制約

  • LBはバックエンドインスタンスからの接続要求を受けますが、接続の確立にはエフェメラルポート を使用します。このSNAT を使用するための一時的なポートを SNAT Portと呼びます。
  • パブリック IPアドレスがLB のフロントエンドIP として追加されると、最大で64,000 個の SNAT Portが使用できるようになります。逆に言えば、64,000個以上の SNAT Port が必要であれば、パブリック IPアドレスを追加する必要があります。
  • SNAT Port の詳細は、下記Azure Document を参照ください。

 

Azure VM の SNAT Port枯渇

LBのアウトバウンド規則

  • 以前、下記記事において、VMSS のデプロイ方法を紹介しました。この時、LBに対してアウトバウンド規則を設定しています。SNATを使用するには、アウトバウンド規則が必要になります。このアウトバウンド規則に指定した「インスタンスごとのポート」or「バックエンド インスタンスの最大数」いずれかの設定によって、SNAT Port 数の割り当てが自動的に計算されます。(下図参照)
  • 前述の通り、パブリック IPアドレスあたり、64,000 個の SNAT Port が使用できるため、インスタンス 1台あたりの Port数 × LB 配下の VM 台数が 64k に収まるように設計する必要があります。

 

SNAT Port の枯渇について

  • 接続要求のバーストによって、SNAT Port の枯渇が発生する可能性があります。SNAT Port が枯渇した場合、バックエンドインスタンスへのSNAT Port割り当てが足りずパフォーマンスに影響を及ぼす、あるいはVMSSのスケールアウトに失敗します。
  • 以下は、使用可能なSNAT Port を超えたため、スケールアウトに失敗した場合のエラーメッセージです。

outboundrule exceeds total number of available ports XXXX. Reduce allocated ports or increase number of IP addresses for outbound rule.

 

対処1. インスタンス 1台あたりのPort割り当て数を減らす

  • SNAT Port の枯渇が発生した場合、可能であればインスタンス 1台あたりのPort割り当て数を減らします。
  • インスタンス 1台あたりの Port数 × LB 配下の VM 台数 = 64k に収まるようにSNAT Portを再設計する必要があります。

 

対処2. パブリック IPアドレスを追加する

  • インスタンス 1台あたりのPort割り当て数を減らすことが難しい場合は、パブリック IPアドレスを追加します。
  • 下記の例では、使用可能なSNAT Port数は"63992“となります。仮に、インスタンス 1台あたりのPort数を12,000個とした場合、「バックエンド インスタンスの最大数」は"5" になっております。

  • パブリック IPアドレスの追加手順を記載します。
  • 先ず、Azureコンソールから「パブリック IP アドレス」を選択し、追加でパブリック IP アドレスを作成します。

 

  • 次にロードバランサーの「フロントエンド IP 構成」を選択し、追加でフロントエンド IP アドレスを作成して先ほど作成したパブリック IP アドレスを指定します。

 

  • 続けて、「アウトバウンド規則」に、先ほど作成したフロントエンド IP アドレスを追加で割り当てます。フロントエンド IP アドレスの追加割り当て後、"2個が選択済み“に変わりました。
  • 下記の例では、使用可能なSNAT Port数は"127992“に増えました。また、"バックエンド インスタンスの最大数"も"10" に増えております。

 

 

SNAT Port のメトリクス

  • Load Balancer リソースにおいて、SNAT Port に関するメトリクスが取得できます。以下、ドキュメントからの説明抜粋です。
  • SNAT 接続数 (SUM)
    • Standard Load Balancer にて、パブリック IP アドレス フロントエンドにマスカレードされた送信フローの数を報告します。 成功した送信 SNAT フローと失敗した送信 SNAT フローのカウンターがレポートされるので、送信フローの正常性について、トラブルシューティングしたり、理解したりするのに役立てることができます。
  • 割り当てられる SNAT ポート (Average)
    • Standard Load Balancer にて、バックエンド インスタンスごとに割り当てられる SNAT ポートの数が報告されます。
  • 使用された SNAT ポート (Average)
    • Standard Load Balancer にて、バックエンド インスタンスごとに使用されている SNAT ポートの数が報告されます。

 

参考資料

Azure

Posted by takaaki