レジストリに関するネットワークの問題のトラブルシューティング

この記事は、仮想ネットワーク内またはファイアウォールやプロキシ サーバーの内側で Azure Container Registry にアクセスするときに発生する可能性のある問題のトラブルシューティングに役立ちます。

現象

次のうち 1 つ以上が含まれる場合があります。

  • イメージをプッシュまたはプルできず、エラー dial tcp: lookup myregistry.azurecr.io が発生する
  • イメージをプッシュまたはプルできず、エラー Client.Timeout exceeded while awaiting headers が発生する
  • イメージをプッシュまたはプルできず、Azure CLI エラー Could not connect to the registry login server が発生する
  • レジストリから Azure Kubernetes Service または別の Azure サービスにイメージをプルできない
  • HTTPS プロキシの背後にあるレジストリにアクセスできず、エラー Error response from daemon: login attempt failed with status: 403 Forbidden または Error response from daemon: Get <registry>: proxyconnect tcp: EOF Login failed が発生する
  • 仮想ネットワーク設定を構成できず、エラー Failed to save firewall and virtual network settings for container registry が発生する
  • Azure portal でレジストリ設定にアクセスまたは表示できないか、Azure CLI を使用してレジストリを管理できない
  • 仮想ネットワークの設定またはパブリック アクセス規則を追加または変更できない
  • ACR タスクによるイメージのプッシュまたはプルができない
  • Microsoft Defender for Cloud でレジストリ内のイメージをスキャンできない、またはスキャン結果が Microsoft Defender for Cloud に表示されない
  • プライベート エンドポイントを使用して構成されたレジストリにアクセスしようとすると、エラー host is not reachable が発生します。

原因

  • クライアントのファイアウォールまたはプロキシによってアクセスが妨げられている - 解決策
  • レジストリのパブリック ネットワーク アクセス規則によってアクセスが妨げられている - 解決策
  • 仮想ネットワークまたはプライベート エンドポイントの構成によってアクセスが妨げられている - 解決策
  • Microsoft Defender for Cloud または特定の他の Azure サービスをプライベート エンドポイント、サービス エンドポイント、またはパブリック IP アクセス規則を持つレジストリと統合しようとしている - 解決策

詳しい診断

az acr check-health コマンドを実行して、レジストリ環境の正常性に関する詳細情報を取得し、必要に応じてターゲット レジストリにアクセスします。 たとえば、特定のネットワーク接続や構成の問題を診断します。

コマンドの例については、「Azure コンテナー レジストリの正常性のチェック」を参照してください。 エラーが報告された場合は、推奨される対処法について、エラー リファレンスと次のセクションを確認してください。

Azure Kubernetes Service と統合レジストリを使用しているときに問題が発生する場合は、az aks check-acr コマンドを実行して、AKS クラスターがレジストリに到達できることを確認します。

Note

また、レジストリの認証または承認に問題がある場合にも、ネットワーク接続の現象が発生することがあります。 「レジストリ ログインのトラブルシューティング」を参照してください。

対処法

クライアント ファイアウォール アクセスを構成する

クライアント ファイアウォールまたはプロキシ サーバーの背後からレジストリにアクセスするには、レジストリのパブリック REST エンドポイントおよびデータ エンドポイントにアクセスするようにファイアウォール規則を構成します。 専用データ エンドポイントが有効になっている場合は、次にアクセスするための規則が必要です。

  • REST エンドポイント: <registryname>.azurecr.io
  • データ エンドポイント: <registry-name>.<region>.data.azurecr.io

geo レプリケートされたレジストリの場合は、リージョンのレプリカごとにデータ エンドポイントへのアクセスを構成します。

HTTPS プロキシの背後で、Docker クライアントと Docker デーモンの両方をプロキシの動作用に確実に構成します。 Docker デーモンのプロキシ設定を変更する場合は、必ずデーモンを再起動してください。

ContainerRegistryLoginEvents テーブルのレジストリ リソース ログは、ブロックされている接続試行の診断に役立ちます。

関連リンク:

レジストリへのパブリック アクセスを構成する

インターネット経由でレジストリにアクセスしている場合は、クライアントからのパブリック ネットワーク アクセスがレジストリで許可されていることを確認します。 既定では、Azure Container Registry によって、すべてのネットワークからのパブリック レジストリエンド ポイントへのアクセスが許可されています。 レジストリでは、選択したネットワークまたは選択した IP アドレスへのアクセスを制限することができます。

レジストリがサービス エンドポイントを持つ仮想ネットワーク用に構成されている場合、パブリック ネットワークアクセスを無効にすると、サービス エンドポイント経由のアクセスも無効になります。 レジストリが Private Link を使用する仮想ネットワーク用に構成されている場合、IP ネットワーク規則は、レジストリのプライベート エンドポイントには適用されません。

関連リンク:

VNet アクセスを構成する

Private Link のプライベート エンドポイントまたはサービス エンドポイント (プレビュー) のいずれかを使用して、仮想ネットワークが構成されていることを確認します。 現在、Azure Bastion エンドポイントはサポートされていません。

プライベート エンドポイントが構成されている場合は、DNS によってレジストリのパブリック FQDN (myregistry.azurecr.io など) がレジストリのプライベート IP アドレスに解決されることを確認します。

  • --vnet パラメーターを指定して az acr check-health コマンドを実行し、仮想ネットワーク内のプライベート エンドポイントへの DNS ルーティングを確認します。
  • DNS の参照には dignslookup などのネットワーク ユーティリティを使用します。
  • レジストリの FQDN と各データ エンドポイントの FQDN 用に DNS レコードが構成されていることを確認します。

ネットワーク内の他のリソースからレジストリへのトラフィックを制限するために使用される NSG ルールとサービス タグを確認します。

レジストリへのサービス エンドポイントが構成されている場合は、そのネットワーク サブネットからのアクセスを許可するネットワーク規則がレジストリに追加されていることを確認します。 サービス エンドポイントによって、ネットワーク内の仮想マシンおよび AKS クラスターからのアクセスのみがサポートされます。

別の Azure サブスクリプションの仮想ネットワークを使用してレジストリ アクセスを制限する場合は、必ずそのサブスクリプションに Microsoft.ContainerRegistry リソース プロバイダーを登録してください。 Azure portal、Azure CLI、またはその他の Azure ツールを使用して Azure Container Registry のリソース プロバイダーを登録します

Azure Firewall または同様のソリューションがネットワークに構成されている場合は、AKS クラスターなどの他のリソースからのエグレス トラフィックが、レジストリ エンドポイントに到達できるようになっていることを確認します。

関連リンク:

サービス アクセスを構成する

現時点では、ネットワークが制限されたコンテナー レジストリへのアクセスは、次のいくつかの Azure サービスでは許可されていません。

  • Microsoft Defender for Cloud では、プライベート エンドポイント、選択したサブネット、または IP アドレスへのアクセスを制限するレジストリでイメージの脆弱性のスキャンを実行することはできません。
  • Azure App Service や Azure Container Instances を含む特定の Azure サービスのリソースは、ネットワークが制限されたコンテナー レジストリにアクセスすることはできません。

コンテナー レジストリに対するこれらの Azure サービスのアクセスや統合が必要な場合は、ネットワークの制限を解除します。 たとえば、レジストリのプライベート エンドポイントを削除するか、レジストリのパブリック アクセス規則を削除または変更します。

2021 年 1 月以降、選択した信頼されたサービスからのアクセスを許可するように、ネットワーク制限付きレジストリを構成できます。

関連リンク:

高度なトラブルシューティング

レジストリでリソース ログの収集が有効になっている場合は、ContainterRegistryLoginEvents ログを確認します。 このログには、受信 ID や IP アドレスを含む、認証イベントと状態が格納されています。 ログでレジストリ認証エラーのクエリを実行します。

関連リンク:

次のステップ

ここで問題を解決できない場合は、次のオプションを参照してください。