AzurePaaS研究サイト

~理解しずらい情報をシンプルにお伝えします~

SNAT ポート枯渇とは? 回避方法を説明します。

SNAT ポート枯渇とは

本事象は SNAT ポートの枯渇が原因で発生したと推測されます。

App Service におきましては、1 台のインスタンスに対して、SNAT 変換を行うために最低で 128 の SNAT ポートが保証されており、そこまでの SNAT ポートは問題なく確保されます。
そして、それを超える SNAT ポートが必要になった場合には、インスタンスが所属するスケール ユニット (スタンプ) から、余剰な SNAT ポートが動的に割り当てられます。
 
この際、1 つのスタンプでは、総計で 64,000 の SNAT ポートを確保できますが、スタンプ全体でそれを超えた SNAT ポートが要求された場合には、SNAT ポートの枯渇が発生することになります。
SNAT ポートの枯渇について、同一スタンプ内の他ユーザー様でポートの使用量が増加した、といったようなことがあった場合に、スタンプ全体でのポート使用量が増加し、最低保証数以上のポート確保ができなくなる可能性があります。
他ユーザのポート使用状況については、把握することが困難なものとなります。  
 
以下の公式ドキュメントに、トラブルシューティング ガイドが書いてあります。
 
送信プロキシの Azure Load Balancer > ポートの枯渇

アウトバウンド接続の送信元ネットワーク アドレス変換 (SNAT) - Azure Load Balancer | Microsoft Docs

===== 抜粋 ここから =====
ポートの枯渇が発生すると、宛先 IP への新しい送信接続は失敗します。 ポートが使用可能になると、接続は成功します。 この枯渇は、IP アドレスからの 64,000 個のポートが多数のバックエンド インスタンスにわたってまばらに分散されている場合に発生します。 SNAT ポートの枯渇を軽減するためのガイダンスについては、トラブルシューティング ガイドのページを参照してください。
===== 抜粋 ここまで =====
 
 
SNAT ポート枯渇が発生しないよう、何かしらを修正していく必要があります。
・お客様側にて、接続プールを使用するようにコードを改良する方法 ・App Service は VNet 統合を設定いただき、DataBase 側はサービス/プライベート エンドポイントに設定する方法

回避方法を紹介(知られてない情報です)

接続プールを使用するように、お客様側にてアプリケーションコードを改良する方法
 
以下の公式ドキュメントに、App Service における送受信接続エラーの回避策について書かれています。
 
Azure App Service での断続的な送信接続エラーのトラブルシューティング > 問題の回避

docs.microsoft.com

===== 抜粋 ここから =====
可能な場合は、接続プールを使用するようにコードを改良し、すべての状況を改善します。
必ずしも、この状況を軽減するのに十分な時間をかけてコードを変更できるとは限りません。
時間内にコードを変更できない場合は、他の解決策を利用してください。
問題を解決する最善策として、すべての解決策を可能な限り組み合わせることをお勧めします。
Azure サービスにはサービス エンドポイントとプライベート エンドポイントを、それ以外には NAT Gateway を使用してみてください。
===== 抜粋 ここまで =====
 
 
App Service では、1 台のインスタンスに対して、SNAT 変換を行うために最低で 128 の SNAT ポートが保証されており、そこまでの SNAT ポートは問題なく確保されます。 そして、それを超える SNAT ポートが必要になった場合には、インスタンスが所属するスケール ユニット (スタンプ) から、余剰な SNAT ポートが動的に割り当てられます。
この際、1 つのスタンプでは、総計で 64,000 の SNAT ポートを確保できるが、スタンプ全体でそれを超えた SNAT ポートが要求された場合には、SNAT ポートの枯渇が発生することになります。
 
SNAT ポートの枯渇について、同一スタンプ内の他ユーザーでポートの使用量が増加した、といったようなことがあった場合に、スタンプ全体でのポート使用量が増加し、最低保証数以上のポート確保ができなくなる可能性もあります。(※他ユーザのポート使用状況については確認することはできない)
 
SNAT ポートの枯渇に関する公式ドキュメントを貼っておきます。
送信プロキシの Azure Load Balancer > ポートの枯渇

docs.microsoft.com

===== 抜粋 ここから =====
ポートの枯渇が発生すると、宛先 IP への新しい送信接続は失敗します。 ポートが使用可能になると、接続は成功します。 この枯渇は、IP アドレスからの 64,000 個のポートが多数のバックエンド インスタンスにわたってまばらに分散されている場合に発生します。 SNAT ポートの枯渇を軽減するためのガイダンスについては、トラブルシューティング ガイドのページを参照してください。
===== 抜粋 ここまで =====

参考サイト

海外のサイト

4lowtherabbit.github.io

Microsoft エンジニアの方の記事

qiita.com

 
 
以上です。