共用方式為


針對 OutboundConnFailVMExtensionError 錯誤碼 (50) 進行疑難排解

本文說明如何識別並解決 OutboundConnFailVMExtensionError 當您建立、啟動、調整或升級 Microsoft azure Kubernetes Service (AKS) 叢集時可能發生的錯誤(也稱為錯誤碼 ERR_OUTBOUND_CONN_FAIL、錯誤號碼 50)。

Prerequisites

  • Netcat (nc) 命令列工具

  • dig 命令列工具

  • 用戶端 URL (cURL) 工具

Symptoms

當您嘗試建立、調整或升級 AKS 叢集時,您可能會收到下列錯誤訊息:

無法從代理程式建立輸出連線,如需詳細資訊,請參閱 https://aka.ms/aks-required-ports-and-addresses

詳細資料:Code=“VMExtensionProvisioningError”

Message=“VM 在處理擴充功能 'vmssCSE' 時回報失敗。

錯誤訊息:「啟用失敗:無法執行命令:結束狀態為 50\n[stdout]\n\n[stderr]\nnc: 連線至 mcr.microsoft.com 連接埠 443 (tcp) 失敗:連線逾時\nCommand 結束且狀態為非零

錯誤詳細數據:“vmssCSE 錯誤訊息: {vmssCSE 結束狀態=50,output=pt/apt.conf.d/95proxy...}

此錯誤也可能造成執行中的節點變成 NotReady,或導致映像提取失敗,因為輸出連線已從叢集中的某些或所有節點遭到封鎖。

Cause

下載必要元件來佈建節點的自訂指令碼延伸模組無法建立獲取套件所需的出站連線。 針對公用叢集,節點會嘗試與埠 443 上的 Microsoft Container Registry (MCR) 端點 (mcr.microsoft.com) 通訊。

輸出流量可能會遭到封鎖的原因有很多。 針對輸出連線失敗進行疑難解答的最佳方式,是使用 Azure 虛擬網路驗證器執行連線分析(預覽版)。 藉由執行連接性分析,您可以將流量中的跳數可視化,並識別出 Azure 網路資源中可能存在的攔截流量的設定錯誤。 若要手動排除輸出連線失敗的問題,您可以使用安全殼通訊協定(SSH)連線到節點。 本節涵蓋這兩種調查類型的指示:

檢查 Azure 網路資源是否封鎖端點的流量

若要判斷流量是否因為 Azure 網路資源而封鎖到端點,請使用 Azure 虛擬網路驗證器 (預覽) 工具,從 AKS 叢集節點執行連線分析至端點。 連接性分析包括下列資源:

  • Azure Load Balancer
  • Azure 防火牆
  • 網路位址轉換 (NAT) 閘道
  • 網路安全性群組 (NSG)
  • 網路原則
  • 使用者定義的路由(路由表)
  • 虛擬網路互連

Note

Azure 虛擬網路驗證器(預覽版)無法存取任何外部或第三方網路資源,例如自定義防火牆。 如果連線分析未偵測到任何封鎖的流量,建議您手動檢查任何外部網路,以涵蓋所有流量傳輸的跳點。

目前,此功能不支援使用 Azure CNI 重疊的叢集。 對於 CNI Overlay 的支持計劃於 2025 年 8 月推出。

  1. 在 Azure 入口網站中瀏覽至您的叢集。 在側邊欄中,瀏覽至 [設定 -> 節點集區] 頁面。
  2. 找出您想要執行連線分析的 nodepool。 點擊節點池,將它選取為作用範圍。
  3. 從頁面頂端的工具列選取 [連線分析][預覽]。 若未看到,請點擊頁面頂端工具列中的三個點“...”,以開啟展開的功能表。 使用者在選取的節點集區上執行連線分析。
  4. 選取虛擬機擴展集 (VMSS) 實例作為來源。 來源IP位址會自動填入。
  5. 選取公用功能變數名稱/端點作為分析的目的地,其中一個範例是 mcr.microsoft.com。 目的地 IP 位址也會自動填入。
  6. 執行分析,並等候最多 2 分鐘的結果。 在產生的圖表中,識別相關聯的 Azure 網路資源,以及流量遭到封鎖的位置。 若要檢視詳細的分析輸出,請按兩下 [JSON 輸出] 索引標籤,或按兩下圖表中的箭號。

手動疑難排解

如果 Azure 虛擬網路驗證器(預覽)工具無法提供足夠的深入見解,您可以透過使用安全殼層通訊協定(SSH)來手動疑難排解向外連線失敗,並連線到節點。 若要進行連線,請依照連線至 Azure Kubernetes Service (AKS) 叢集節點中的 指示進行維護或疑難解答。 然後,依照下列步驟在叢集上測試連線能力:

  1. 線上到節點之後,請執行 ncdig 命令:

    nc -vz mcr.microsoft.com 443 
    dig mcr.microsoft.com 443
    

    Note

    如果您無法透過 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"
    
  2. 如果您嘗試使用 HTTP Proxy 建立 AKS 叢集,請在連線到節點之後執行 nccurldig 命令:

    # 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 443
    

    Note

    如果您無法透過 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
流量會遭到防火牆規則、Proxy 伺服器或網路安全組 (NSG) 封鎖 當防火牆、Proxy 伺服器或 NSG 封鎖 AKS 所需的埠或完整功能變數名稱 (FQDN) 時,就會發生此問題。 請確定允許這些埠和 FQDN。 若要判斷封鎖的內容,請檢查上述 [原因] 一節中提供的連線。 如需 AKS 必要埠和 FQDN 的詳細資訊,請參閱 Azure Kubernetes Service (AKS) 叢集的輸出網路和 FQDN 規則。
AAAA (IPv6) 記錄在防火牆上遭到封鎖 在您的防火牆上,確認沒有任何專案會封鎖端點在 Azure DNS 中解析。
私人叢集無法解析內部 Azure 資源 在私人叢集中,如果使用自定義 DNS,則必須將 Azure DNS IP 位址 (168.63.129.16) 新增為上游 DNS 伺服器。 確認您的 DNS 伺服器上已設定位址。 如需詳細資訊,請參閱 建立私人 AKS 叢集什麼是 IP 位址 168.63.129.16?

詳細資訊

協力廠商連絡資訊免責聲明

Microsoft 提供協力廠商連絡資訊,以協助您尋找有關此主題的其他資訊。 此連絡資訊可能會變更而不另行通知。 Microsoft 不保證協力廠商連絡資訊的準確性。

與我們連絡,以取得說明

如果您有疑問,可以詢問 Azure 社群支援。 您也可以向 Azure 意見反應社群提交產品意見反應。