次の方法で共有


Azure Container Registry にアクセスしようとしたときに "I/O タイムアウト" エラーが発生する

この記事では、Azure Container Registry にアクセスしてコンテナー イメージまたは成果物をプルしようとしたときに発生する I/O タイムアウト エラーを解決する方法について説明します。

現象

次のエラー メッセージが表示されます。

イメージ構成のプル中にエラーが発生しました: 試行後にダウンロードに失敗しました =6: tcp <storage-endpoint-ip-address>:443: i/o タイムアウトをダイヤルする

原因 1: ポート 443 がストレージ (データ) エンドポイントで使用できない

Note

エラー メッセージに表示されるストレージ エンドポイントの IP アドレスが、プル操作中に常に使用される IP アドレスであると想定しないでください。 その他の IP アドレスも関係しており、それに応じてトラフィックを許可する必要があります。 特定の IP アドレスに基づくトラフィックは許可しないことをお勧めします。 これは、IP アドレスが動的であり、使用される IP アドレスの一覧が変更されるためです。 <storage-account-name>.blob.core.windows.net ドメインを許可することをお勧めします。 または、 Azure Container Registry データ エンドポイントを使用し クライアント ネットワーク ルールでそれらのデータ エンドポイントを許可することもできます。 他のオプションがない場合 (および他のオプションがない場合のみ) は、IP アドレスに基づいてトラフィックを許可することをお勧めします。

Azure 各レジストリの代わりに Azure Storage アカウントの BLOB ストレージ を割り当て、コンテナー イメージやその他の成果物のデータを管理します。 クライアントは、コンテナー レジストリ内のイメージ レイヤーにアクセスするときに、レジストリが提供するストレージ アカウント エンドポイントを使用して要求を行います。

既定のストレージ (データ) エンドポイントのドメイン名は、次の表に示すように、 dedicated データ エンドポイントを使用しているかどうかによって異なります。

使用中の専用データ エンドポイント 既定のストレージ (データ) エンドポイントのドメイン名形式
はい <container-registry-name>.<region-name>.data.azurecr.io
いいえ <storage-account-name>.blob.core.windows.net

デバイスとポート 443 のストレージ (データ) エンドポイントの間の接続を手動でテストするには、telnet または NetCat コマンドを実行します。 専用データ エンドポイントを使用する場合は、次のいずれかのコマンドを選択します。

  • Telnet コマンド:

    telnet <container-registry-name>.<region-name>.data.azurecr.io 443
    
  • NetCat コマンド:

    nc -vz <container-registry-name>.<region-name>.data.azurecr.io 443
    

専用データ エンドポイントを使用しない場合は、次のいずれかのコマンドを選択します。

  • Telnet コマンド:

    telnet <storage-account-name>.blob.core.windows.net 443
    
  • NetCat コマンド:

    nc -vz <storage-account-name>.blob.core.windows.net 443
    

解決策 1: デバイスとストレージ (データ) エンドポイント間の通信にポート 443 を使用できるようにする

ポート 443 経由でデバイスとストレージ (データ) エンドポイントの間にネットワーク接続があることを確認します。

デバイスが制限付きネットワーク アーキテクチャの一部である場合は、ポート 443 経由のストレージ (データ) エンドポイントとのネットワーク接続があることを確認します。 既存のファイアウォール、プロキシ サーバー、アクセス制御リスト、インターネット サービス プロバイダー (ISP) の制限などを確認することを検討できます。

Note

ストレージ (データ) エンドポイントには、多くの IP アドレス範囲が含まれています。 一部だけでなく、すべてを許可する必要があります。 すべての IP アドレス範囲を許可することも、 サービス タグを使用することもできます。 たとえば、サービス タグ Storage はクラウド全体の Azure Storage を表しますが、 Storage.<region-name> ( Storage.WestUS など) では、名前付きリージョンのストレージ IP アドレス範囲のみに範囲が絞り込まれます。

原因 2: VM の NIC またはサブネットに関連付けられている NSG によって通信がブロックされる

Azure 仮想マシン (VM) を使用して Azure Container Registry からプルする場合は、 network セキュリティ グループ (NSG) がデバイスとサインイン サーバー間の通信をブロックしている可能性があります。 ブロック NSG は、Azure VM のネットワーク アダプターまたはサブネットに関連付けられています。

Cause 1 に示されている telnet または NetCat コマンドを実行します。 タイムアウトが発生したことがコマンド出力に示されている場合は、NSG 構成によってストレージ アカウントの IP アドレスがブロックされているかどうかを確認します。 これを行うには、次の手順を実行します。

  1. Azure IP 範囲とサービス タグ – パブリック クラウドに移動し、ダウンロード ボタンを選択して、サービス タグの一覧を JSON ファイルとしてダウンロードします。

  2. ダウンロードした JSON ファイルをテキスト エディターで開き、 Storage.<region-name>を検索します。 ( <region-name> プレースホルダーは、コンテナー レジストリを含むリージョンの名前 ( BrazilSoutheast など) に置き換えます)。

  3. そのリージョンで使用できる IP アドレスを選択します。 (手順 6 のこの IP アドレスは、関連付けられているストレージ (データ) エンドポイントの IP アドレスとして使用します)。

  4. Azure ポータルでNetwork Watcher 検索して選択

  5. Network Watcher メニュー ウィンドウで、Network 診断ツール>NSG 診断を選択します。

  6. Network Watcher で |NSG 診断ページで、次の表の手順に従ってフォームに入力します。

    フィールド アクション
    ターゲット リソースの種類 一覧で 仮想マシン を選択します。
    仮想マシン 一覧で Azure VM の名前を入力または選択します。
    プロトコル 一覧 TCP を選択します。
    方向 Outbound オプションを選択します。
    ソースの種類 一覧 IPv4 アドレス/CIDR を選択します。
    IPv4 アドレス/CIDR Azure VM の IP アドレスを入力します。
    宛先 IP アドレス 手順 3 で選択した関連付けられているストレージ (データ) エンドポイントの IP アドレスを入力します。
    宛先ポート 443」を入力します。
  7. [NSG 診断の実行] ボタンを選択します。

  8. [ Results ボックスで、 Traffic status フィールドの値をオンにします。

Traffic status フィールドの値は Allowed または Denied です。 Denied状態は、選択した Azure VM と関連付けられたストレージ (データ) エンドポイント IP アドレスとの間のトラフィックが NSG によってブロックされていることを意味します。 この場合、ブロック NSG の名前も Results ボックスに表示されます。 結果テーブルで、対応する Applied アクション列の値が Deny である行のNSG 名列を見つけます。

Note

この手順により、問題の原因をより適切に評価できますが、まだ不完全です。 これは、関連付けられているリージョンの Azure Storage の単一の IP アドレスを使用して接続をテストするように指示されるためです。 ただし、ストレージ (データ) エンドポイントは多くの IP アドレス範囲に対するアクセスを許可する必要があるため、1 つの IP アドレスのテストが成功しても、すべての IP アドレス範囲の通信が成功したわけではありません。

解決策 2: VM と関連するストレージ (データ) エンドポイント間の接続を許可するように NSG 構成を変更する

Azure VM と関連付けられているストレージ (データ) エンドポイント (すべての IP アドレス範囲または関連するサービス タグ) の間のポート 443 で接続が許可されるように、NSG レベルで変更を行います。 具体的には、次の条件が満たされていることを確認します。

条件 詳細
ルート テーブルは、ストレージ (データ) エンドポイントへのトラフィックをドロップしません。 ストレージ (データ) エンドポイントに関連付けられているルートの次ホップが None に設定されている場合、トラフィックは破棄されます。 仮想ネットワーク トラフィックのルーティング
ルート テーブルが、Azure VM サブネットに関連付けられているファイアウォールなどの仮想アプライアンスにトラフィックを送信する場合は、ファイアウォールがポート 443 のストレージ (データ) エンドポイントへのトラフィックをブロックしていないことを確認します。 ファイアウォールの内側から Azure Container Registry にアクセスする規則を構成する

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。