無法取得 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 位址。 如果容器登錄的公用存取已停用,且您只依賴私人連線,則此案例可能會導致許多問題,例如提取失敗。
注意
若要確認您的容器登錄已設定為私用,請遵循下列步驟:
在 Azure 入口網站 中,搜尋並選取 [容器登錄]。
在容器登錄清單中,選取容器登錄的名稱。
在容器登錄的功能表窗格中,選取 [設定>網络]。
在 [ 公用存取] 索引卷標上 ,確認 [公用網络存取 ] 字段已設定為 [已停用]。
選取 [私人存取] 索引標籤,並確認已設定私人端點連線。
徵兆
您可以使用功能變數名稱系統 (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 伺服器,伺服器會連同 Server
和 Address
欄位一起顯示其 IP 位址。
原因 1:容器登錄的私人端點和裝置位於不同的虛擬網路上
容器登錄私人端點的網路介面與嘗試解析容器登錄 FQDN 的裝置位於不同的虛擬網路上。
解決方案 1:從容器登錄的私人 DNS 區域層級連結到裝置的虛擬網路
若要成功查詢私人 DNS 區域中的 DNS 記錄, 請在容器登錄的私人 DNS 區域層級新增虛擬網路連結 ,以取得起始 DNS 查詢的裝置所在的虛擬網路。 此裝置可以是下列任一專案:
- Azure Kubernetes Service (AKS) 節點
- Azure 虛擬機器
- Azure 用於容器的 Web App
- 其他類型的裝置
若要從容器登錄的私人 DNS 區域層級將虛擬網路連結新增至裝置的虛擬網路,請使用下列其中一種方法:
透過 Azure 入口網站
在 Azure 入口網站 中,搜尋並選取 [私用 DNS 區域]。
在私人 DNS 區域清單中,選取 container-registry-name.privatelink.azurecr.io>。<
在私人 DNS 區域的功能表窗格中,選取 [設定>虛擬網络] 連結。
在 私人 DNS 區域的 [虛擬網络連結 ] 頁面中,選取 [ 新增]。
在 [新增虛擬網络連結] 頁面中,輸入連結名稱,然後選取必須私下解析容器登錄 FQDN 之裝置的虛擬網路。 (The 開啟自動註冊 選項是選擇性的。)
選取 [確定] 按鈕。
透過 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 等等)。
原因 3:您的自定義 DNS 伺服器不會私下連結至容器登錄
根據預設,Azure 虛擬網路會使用 Azure DNS 服務 (168.63.129.16
) 作為 DNS 伺服器,但您也可以使用自己的自定義 DNS 伺服器。 當您嘗試設定自己的自定義 DNS 伺服器時,您會在自定義 DNS 伺服器層級正確地將伺服器層級轉寄站設定為 Azure DNS 服務。 不過,您忘記在容器登錄的私人 DNS 區域層級新增虛擬網路連結,以取得自定義 DNS 伺服器所在的虛擬網路。
解決方案 3:從容器登錄的私人 DNS 區域層級連結至自定義 DNS 伺服器
若要從容器登錄的私人 DNS 區域層級將虛擬網路連結新增至自定義 DNS 伺服器,請使用下列其中一種方法:
透過 Azure 入口網站
在 Azure 入口網站 中,搜尋並選取 [私用 DNS 區域]。
在私人 DNS 區域清單中,選取 container-registry-name.privatelink.azurecr.io>。<
在私人 DNS 區域的功能表窗格中,選取 [設定>虛擬網络] 連結。
在 私人 DNS 區域的 [虛擬網络連結 ] 頁面中,選取 [ 新增]。
在 [新增虛擬網络連結] 頁面中,輸入 [鏈接名稱] 值,然後為自定義 DNS 伺服器選取適當的 [虛擬網络] 值。 (The 開啟自動註冊 選項是選擇性的。)
選取 [確定] 按鈕。
透過 Azure CLI
在 Azure CLI 中 ,執行 az network private-dns link vnet create 命令。
資源
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。