この記事では、Microsoft Azure Kubernetes Service (AKS) クラスターを作成、開始、スケーリング、またはアップグレードした場合に発生する可能性がある OutboundConnFailVMExtensionError エラー (エラー コード ERR_OUTBOUND_CONN_FAIL、エラー番号 50 とも呼ばれます) を特定して解決する方法について説明します。
Prerequisites
Symptoms
AKS クラスターを作成、スケーリング、またはアップグレードしようとすると、次のエラー メッセージが表示されることがあります。
エージェントからの送信接続を確立できません。詳細については、 https://aka.ms/aks-required-ports-and-addresses を参照してください。
詳細: Code="VMExtensionProvisioningError"
Message="VM は拡張機能 'vmssCSE' の処理中にエラーを報告しました。
エラー メッセージ: "Enable failed: failed to execute command: command terminated with exit status=50\n[stdout]\n\n[stderr]\nnc: connect to mcr.microsoft.com port 443 (tcp) failed: Connection timed out\nCommand exited with non-zero status
エラーの詳細: "vmssCSE エラー メッセージ: {vmssCSE exit status=50, output=pt/apt.conf.d/95proxy...}
また、このエラーにより、クラスター内の一部またはすべてのノードから送信接続がブロックされるため、実行中のノードが NotReady になったり、イメージプルエラーが発生したりする可能性があります。
Cause
ノードをプロビジョニングするために必要なコンポーネントをダウンロードするカスタム スクリプト拡張機能では、パッケージを取得するために必要な送信接続を確立できませんでした。 パブリック クラスターの場合、ノードはポート 443 の Microsoft Container Registry (MCR) エンドポイント (mcr.microsoft.com) との通信を試みます。
送信トラフィックがブロックされる理由は多数あります。 送信接続エラーのトラブルシューティングを行う最善の方法は、 Azure Virtual Network Verifier (プレビュー) を使用して接続分析を実行することです。 接続分析を実行すると、トラフィック フロー内のホップと、トラフィックをブロックしている Azure ネットワーク リソース内の構成の誤りを視覚化できます。 送信接続エラーを手動でトラブルシューティングするには、Secure Shell プロトコル (SSH) を使用してノードに接続します。 このセクションでは、両方の種類の調査の手順について説明します。
Azure ネットワーク リソースがエンドポイントへのトラフィックをブロックしているかどうかを確認する
Azure ネットワーク リソースが原因でエンドポイントへのトラフィックがブロックされているかどうかを確認するには、Azure Virtual Network Verifier (プレビュー) ツールを使用して、AKS クラスター ノードからエンドポイントへの接続分析を実行します。 接続分析では、次のリソースについて説明します。
- Azure Load Balancer
- Azure Firewall
- ネットワーク アドレス変換 (NAT) ゲートウェイ
- ネットワーク セキュリティ グループ (NSG)
- ネットワーク ポリシー
- ユーザー定義ルート (ルート テーブル)
- 仮想ネットワークピアリング
Note
Azure Virtual Network Verifier (プレビュー) は、カスタム ファイアウォールなどの外部またはサードパーティのネットワーク リソースにアクセスできません。 接続分析でブロックされたトラフィックが検出されない場合は、トラフィック フロー内のすべてのホップをカバーするために、外部ネットワークの手動チェックを実行することをお勧めします。
現時点では、Azure CNI オーバーレイを使用するクラスターは、この機能ではサポートされていません。 CNI オーバーレイのサポートは、2025 年 8 月に予定されています。
- Azure portal でお使いのクラスターに移動します。 サイドバーで、[設定] -> [ノード プール] ブレードに移動します。
- 接続分析を実行するノードプールを特定します。 ノードプールをクリックして、スコープとして選択します。
- ページの上部にあるツール バーから [接続分析 (プレビュー)]を選択します。 対象のメニューが表示されない場合は、ページ上部のツールバーにある3つのドット「...」をクリックして、展開されたメニューを開いてください。
- ソースとして仮想マシン スケール セット (VMSS) インスタンスを選択します。 ソース IP アドレスは自動的に設定されます。
- 分析の宛先としてパブリック ドメイン名/エンドポイントを選択します。たとえば、
mcr.microsoft.com。 宛先 IP アドレスも自動的に設定されます。 - 分析を実行し、結果が表示されるまで最大 2 分待ちます。 結果の図で、関連付けられている Azure ネットワーク リソースとトラフィックがブロックされている場所を特定します。 詳細な分析出力を表示するには、[JSON 出力] タブをクリックするか、図の矢印をクリックします。
手動トラブルシューティング
Azure Virtual Network Verifier (プレビュー) ツールで問題に関する十分な分析情報が得られない場合は、Secure Shell プロトコル (SSH) を使用してノードに接続することで、送信接続エラーのトラブルシューティングを手動で行うことができます。 接続を確立するには、 Azure Kubernetes Service (AKS) クラスター ノードへの接続に関するページの手順に従って、メンテナンスまたはトラブルシューティングを行います。 次に、次の手順に従って、クラスター上の接続をテストします。
ノードに接続した後、
ncコマンドとdigコマンドを実行します。nc -vz mcr.microsoft.com 443 dig mcr.microsoft.com 443Note
SSH 経由でノードにアクセスできない場合は、仮想マシン スケール セット インスタンスに対して az vmss run-command invoke コマンドを実行して、送信接続をテストできます。
# Get the VMSS instance IDs. az vmss list-instances --resource-group <mc-resource-group-name> \ --name <vmss-name> \ --output table # Use an instance ID to test outbound connectivity. az vmss run-command invoke --resource-group <mc-resource-group-name> \ --name <vmss-name> \ --command-id RunShellScript \ --instance-id <vmss-instance-id> \ --output json \ --scripts "nc -vz mcr.microsoft.com 443"HTTP プロキシを使用して AKS クラスターを作成する場合は、ノードに接続した後、
nc、curl、およびdigコマンドを実行します。# Test connectivity to the HTTP proxy server from the AKS node. nc -vz <http-s-proxy-address> <port> # Test traffic from the HTTP proxy server to HTTPS. curl --proxy http://<http-proxy-address>:<port>/ --head https://mcr.microsoft.com # Test traffic from the HTTPS proxy server to HTTPS. curl --proxy https://<https-proxy-address>:<port>/ --head https://mcr.microsoft.com # Test DNS functionality. dig mcr.microsoft.com 443Note
SSH 経由でノードにアクセスできない場合は、仮想マシン スケール セット インスタンスに対して
az vmss run-command invokeコマンドを実行して、送信接続をテストできます。# Get the VMSS instance IDs. az vmss list-instances --resource-group <mc-resource-group-name> \ --name <vmss-name> \ --output table # Use an instance ID to test connectivity from the HTTP proxy server to HTTPS. az vmss run-command invoke --resource-group <mc-resource-group-name> \ --name <vmss-name> \ --command-id RunShellScript \ --instance-id <vmss-instance-id> \ --output json \ --scripts "curl --proxy http://<http-proxy-address>:<port>/ --head https://mcr.microsoft.com" # Use an instance ID to test connectivity from the HTTPS proxy server to HTTPS. az vmss run-command invoke --resource-group <mc-resource-group-name> \ --name <vmss-name> \ --command-id RunShellScript \ --instance-id <vmss-instance-id> \ --output json \ --scripts "curl --proxy https://<https-proxy-address>:<port>/ --head https://mcr.microsoft.com" # Use an instance ID to test DNS functionality. az vmss run-command invoke --resource-group <mc-resource-group-name> \ --name <vmss-name> \ --command-id RunShellScript \ --instance-id <vmss-instance-id> \ --output json \ --scripts "dig mcr.microsoft.com 443"
Solution
次の表に、トラフィックがブロックされる可能性がある具体的な理由と、それぞれの理由に対応するソリューションを示します。
| Issue | Solution |
|---|---|
| ファイアウォール規則、プロキシ サーバー、またはネットワーク セキュリティ グループ (NSG) によってトラフィックがブロックされる | この問題は、AKS に必要なポートまたは完全修飾ドメイン名 (FQDN) がファイアウォール、プロキシ サーバー、または NSG によってブロックされている場合に発生します。 これらのポートと FQDN が許可されていることを確認します。 ブロックされている内容を確認するには、前の 原因 セクションで提供されている接続を確認します。 AKS に必要なポートと FQDN の詳細については、「 Azure Kubernetes Service (AKS) クラスターの送信ネットワークと FQDN 規則を参照してください。 |
| AAAA (IPv6) レコードがファイアウォールでブロックされている | ファイアウォールで、Azure DNS でのエンドポイントの解決をブロックするものが何も存在しないことを確認します。 |
| プライベート クラスターで内部 Azure リソースを解決できない | プライベート クラスターでは、カスタム DNS を使用する場合は、アップストリーム DNS サーバーとして Azure DNS IP アドレス (168.63.129.16) を追加する必要があります。 DNS サーバーでアドレスが設定されていることを確認します。 詳細については、「 プライベート AKS クラスターの作成 と IP アドレス 168.63.129.16?を参照してください。 |
詳細情報
サードパーティのお問い合わせ窓口に関する免責事項
サードパーティのお問い合わせ窓口に関する情報は、ユーザーの便宜のために提供されているものであり、 この連絡先情報は、予告なしに変更される可能性があります。 マイクロソフトは、掲載されている情報に対して、いかなる責任も負わないものとします。
お問い合わせはこちらから
ご質問がある場合は、 Azure コミュニティサポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。