共用方式為


無法取得 Azure Container Registry FQDN 的私人 IP 位址

本文提供指引,讓您無法將Microsoft Azure Container Registry 的完整域名 (FQDN) 解析為其私人 IP 位址,以針對最常見的情況進行疑難解答。

概觀

在 Azure Container Registry 中,您可以使用 Azure Private Link 搭配私人端點和 私人 DNS 區域 ,將虛擬網路私人 IP 位址指派給登錄 FQDN(也稱為登入伺服器或 REST API 端點)。

因為 Azure Container Registry 服務是多租使用者,所以一律會有公用 IP 位址。 如果您將容器登錄設定為使用登錄 FQDN 的 Private Link 技術,您的容器登錄會發出公用 IP 位址和私人 IP 位址。

設定此組態之後,在某些情況下,容器登錄 FQDN 的 DNS 解析會傳回公用 IP 位址,即使您預期 DNS 解析會傳回私人 IP 位址。 如果容器登錄的公用存取已停用,且您只依賴私人連線,則此案例可能會導致許多問題,例如提取失敗。

注意

若要確認您的容器登錄已設定為私用,請遵循下列步驟:

  1. Azure 入口網站 中,搜尋並選取 [容器登錄]。

  2. 在容器登錄清單中,選取容器登錄的名稱。

  3. 在容器登錄的功能表窗格中,選取 [設定>網络]。

  4. 在 [ 公用存取] 索引卷標上 ,確認 [公用網络存取 ] 字段已設定為 [已停用]。

  5. 選取 [私人存取] 索引標籤,並確認已設定私人端點連線。

徵兆

您可以使用功能變數名稱系統 (DNS) 公用程式工具來執行 DNS 查詢,並在查詢結果中取得 容器登錄的公用 IP 位址。 不過,容器登錄實際上已設定為私用,而 DNS 查詢結果表示容器登錄已設定為私用。

注意

如果標準名稱的格式為 , <container-registry-name>.privatelink.azurecr.io容器登錄會設定為私用。

例如,下列 nslookup 命令會在 acrpe332.azurecr.io 容器登錄 FQDN 上執行 DNS 查詢:

nslookup acrpe332.azurecr.io

nslookup 輸出會傳回 的正式名稱 acrpe332.privatelink.azurecr.io,因此您知道 acrpe332 容器登錄已設定為私用。 不過,輸出也會針對容器登錄 FQDN 傳回 的acrpe332公用 IP 位址20.62.128.38

Server:         168.63.129.16
Address:        168.63.129.16#53

Non-authoritative answer:
acrpe332.azurecr.io     canonical name = acrpe332.privatelink.azurecr.io.
acrpe332.privatelink.azurecr.io canonical name = eus1.fe.azcr.io.
eus1.fe.azcr.io canonical name = eus-acr-reg.trafficmanager.net.
eus-acr-reg.trafficmanager.net  canonical name = r0318eus-az.eastus.cloudapp.azure.com.
Name:   r0318eus-az.eastus.cloudapp.azure.com
Address: 20.62.128.38

注意

此範例會 使用 Azure DNS 服務 (168.63.129.16 作為 DNS 伺服器。 如果您使用自定義 DNS 伺服器,伺服器會連同 ServerAddress 欄位一起顯示其 IP 位址。

原因 1:容器登錄的私人端點和裝置位於不同的虛擬網路上

容器登錄私人端點的網路介面與嘗試解析容器登錄 FQDN 的裝置位於不同的虛擬網路上。

若要成功查詢私人 DNS 區域中的 DNS 記錄, 請在容器登錄的私人 DNS 區域層級新增虛擬網路連結 ,以取得起始 DNS 查詢的裝置所在的虛擬網路。 此裝置可以是下列任一專案:

  • Azure Kubernetes Service (AKS) 節點
  • Azure 虛擬機器
  • Azure 用於容器的 Web App
  • 其他類型的裝置

若要從容器登錄的私人 DNS 區域層級將虛擬網路連結新增至裝置的虛擬網路,請使用下列其中一種方法:

  • 透過 Azure 入口網站

    1. 在 Azure 入口網站 中,搜尋並選取 [私用 DNS 區域]。

    2. 在私人 DNS 區域清單中,選取 container-registry-name.privatelink.azurecr.io>。<

    3. 在私人 DNS 區域的功能表窗格中,選取 [設定>虛擬網络] 連結。

    4. 私人 DNS 區域的 [虛擬網络連結 ] 頁面中,選取 [ 新增]。

    5. 在 [新增虛擬網络連結] 頁面中,輸入連結名稱,然後選取必須私下解析容器登錄 FQDN 之裝置的虛擬網路。 (The 開啟自動註冊 選項是選擇性的。)

    6. 選取 [確定] 按鈕。

  • 透過 Azure CLI

    在 Azure CLI 中 ,執行 az network private-dns link vnet create 命令。

原因 2:您的自定義 DNS 伺服器不會轉送至 Azure DNS 服務

根據預設,Azure 虛擬網路會使用 Azure DNS 服務 (168.63.129.16) 作為 DNS 伺服器,但您也可以使用自己的自定義 DNS 伺服器。 不過,當您嘗試設定自己的自定義 DNS 伺服器時,您忘記在自定義 DNS 伺服器層級將伺服器層級轉寄站設定為 Azure DNS 服務。

解決方案 2:設定伺服器層級轉寄站至 Azure DNS 服務

如果您預期透過私人IP位址解析容器登錄 FQDN 的裝置是使用自訂 DNS 伺服器的 Azure 虛擬網路的一部分,您必須在自定義 DNS 伺服器上設定伺服器層級轉寄站至 Azure DNS 服務。 確切的組態選項和步驟取決於您現有的網路和 DNS(例如 Windows Server、CoreDNS 等等)。

根據預設,Azure 虛擬網路會使用 Azure DNS 服務 (168.63.129.16) 作為 DNS 伺服器,但您也可以使用自己的自定義 DNS 伺服器。 當您嘗試設定自己的自定義 DNS 伺服器時,您會在自定義 DNS 伺服器層級正確地將伺服器層級轉寄站設定為 Azure DNS 服務。 不過,您忘記在容器登錄的私人 DNS 區域層級新增虛擬網路連結,以取得自定義 DNS 伺服器所在的虛擬網路。

若要從容器登錄的私人 DNS 區域層級將虛擬網路連結新增至自定義 DNS 伺服器,請使用下列其中一種方法:

  • 透過 Azure 入口網站

    1. 在 Azure 入口網站 中,搜尋並選取 [私用 DNS 區域]。

    2. 在私人 DNS 區域清單中,選取 container-registry-name.privatelink.azurecr.io>。<

    3. 在私人 DNS 區域的功能表窗格中,選取 [設定>虛擬網络] 連結。

    4. 私人 DNS 區域的 [虛擬網络連結 ] 頁面中,選取 [ 新增]。

    5. 在 [新增虛擬網络連結] 頁面中,輸入 [鏈接名稱] 值,然後為自定義 DNS 伺服器選取適當的 [虛擬網络] 值。 (The 開啟自動註冊 選項是選擇性的。)

    6. 選取 [確定] 按鈕。

  • 透過 Azure CLI

    在 Azure CLI 中 ,執行 az network private-dns link vnet create 命令。

資源

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。