共用方式為


針對虛擬網路外部端點的連線進行疑難解答

本文討論如何針對從 azure Kubernetes Service (AKS) 叢集Microsoft連線至虛擬網路外部端點的連線進行疑難解答。

必要條件

  • Azure CLI

  • 用戶端 URL (curl) 工具。

  • Kubernetes kubectl 工具,或連線至叢集的類似工具。 若要使用 Azure CLI 安裝 kubectl,請執行 az aks install-cli 命令。

疑難排解檢查清單

問題是否持續發生?

步驟 1:進行基本疑難解答

請確定您可以連線到因特網上的公用端點。 如需指示,請參閱 輸出 AKS 叢集連線的基本疑難解答。

步驟 2:判斷 AKS 叢集的輸出類型

若要識別 AKS 叢集的輸出類型,請執行 az aks show 命令:

az aks show --resource-group <resource_group> --name <cluster_name> --query "networkProfile.outboundType"

如果輸出類型為 loadBalancer,除非您使用 kubenet 網路,否則沒有路由表。 如果您使用 kubenet,請確定預設路由表沒有封鎖輸出因特網連線的額外設定。 如果您使用另一個網路,例如 Azure CNI、動態配置或 Azure CNI 重疊,則預設不會建立路由表。 在此情況下,請確定 NSG (網路安全組) 沒有封鎖輸出因特網連線的自定義組態。

如果輸出類型為 userDefinedRouting,請確定符合下列條件:

如果輸出類型為 managedNATGateway,請執行 az network nat gateway show 命令,檢查 AKS 子網是否與 NAT 閘道相關聯:

az network nat gateway show --resource-group <resource_group> --name <nat_gateway_name> --query "subnets[].id"

如需如何使用 NAT 閘道與 AKS 的詳細資訊,請參閱 受控 NAT 閘道

步驟 3:連線到應用程式 Pod 時檢查 curl 輸出

curl 回應碼可協助您識別問題類型。 當回應碼可供使用之後,請嘗試進一步了解問題的運作方式。 如需 HTTP 狀態代碼和問題基礎行為的詳細資訊,請參閱下表。

信源 連結
因特網指派號碼授權單位 (IANA) 超文本傳輸通訊協定 (HTTP) 狀態代碼登錄
Mozilla HTTP 回應狀態代碼
維基百科 HTTP 狀態碼清單

下列 HTTP 狀態代碼可能會指出列出的問題。

HTTP 狀態碼 問題 範例
4xx
  1. 問題會影響用戶端要求。
  2. 用戶端與伺服器之間存在網路封鎖程式。
  1. 要求的頁面不存在,或客戶端沒有存取頁面的許可權。
  2. 網路安全組或防火牆封鎖流量。
5xx 問題會影響伺服器。 應用程式已關閉,或閘道無法運作。

您可以使用 curl 嘗試連線到應用程式端點。 以下是範例命令和輸出:

# 404 error code example
$ curl -vv <host IP address>/test.index

*   Trying <host IP address>:80...
* TCP_NODELAY set
* Connected to <host IP address> (<host IP address>) port 80 (#0)
> GET /test.index HTTP/1.1
> Host: <host IP address>
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
...
* Connection #0 to host <host IP address> left intact

步驟 4:檢查輸出流量是否暫時略過虛擬設備會發生什麼事

若要快速測試以判斷輸出裝置(虛擬設備)是否造成問題,您可以暫時允許所有流量通過因特網。 若要設定此設定,您可以改為透過虛擬設備變更的預設IP位址和埠路由 0.0.0.0/0 ,以透過因特網進行。

如果輸出裝置在略過虛擬設備時運作良好,請檢查虛擬設備的記錄,以查看哪些封包遭到拒絕,並據以新增虛擬設備中的允許規則。

這個問題是斷斷續續地出現嗎?

您可能會因為許多原因而遇到間歇性輸出問題。 若要針對間歇性輸出連線問題進行疑難解答,請嘗試下列步驟:

步驟 1:檢查 Pod 或節點資源是否已用盡

執行下列命令來檢查使用多少資源:

kubectl top pods
kubectl top nodes

步驟 2:檢查作業系統磁碟是否大量使用

若要檢查作業系統磁碟是否大量使用,請遵循下列步驟:

  1. Azure 入口網站 中,搜尋並選取 [虛擬機擴展集]。

  2. 在擴展集清單中,選取用於 AKS 叢集的擴展集。

  3. 在擴展集瀏覽窗格中,移至 [監視] 區段,然後選取 [ 計量]。

  4. [計量 ] 區段尋找下列欄位,以檢視擴展集的磁碟計量。

    欄位
    範圍 VMSS 名稱
    計量命名空間 虛擬機器主機
    計量 OS 和資料磁碟計量

如需計量的詳細資訊,請參閱 OS 磁碟和數據磁碟計量

若要檢視有關磁碟使用率的 AKS 建議,請遵循下列步驟:

  1. Azure 入口網站 中,搜尋並選取 [Kubernetes 服務]。

  2. 在 Kubernetes 服務清單中,選取 AKS 叢集的名稱。

  3. 在 AKS 叢集瀏覽窗格中,移至 [監視] 區段,然後選取 [建議程序建議]。

  4. 檢閱有關磁碟使用量的列出的建議。

如果OS磁碟大量使用,請考慮使用下列補救措施:

如果這些補救措施無法解決問題,請分析在磁碟上執行大量讀取/寫入作業的程式。 然後,檢查您是否可以將動作移至數據磁碟,而不是OS磁碟。

步驟 3:檢查來源網路位址轉譯埠是否已用盡

如果應用程式進行許多輸出連線,它們可能會耗盡輸出裝置IP位址上的可用埠數目。 遵循標準負載平衡器診斷與計量、警示和資源健康情況,以監視現有負載平衡器來源網路位址轉換 (SNAT) 埠的使用方式和配置。 監視以驗證或判斷 SNAT 埠耗盡的風險

您是否達到或超過已配置的 SNAT 埠數目上限? 在此情況下,您可以檢查應用程式,以判斷它是否重複使用現有的連線。 如需詳細資訊,請參閱 設計應用程式以有效率地使用連線。

如果您覺得應用程式已正確設定,而且您需要比預設配置埠數目更多的 SNAT 連接埠,請遵循下列步驟:

  1. 增加輸出裝置上的公用 IP 數目。 如果輸出裝置是負載平衡器,您可以增加負載平衡器上的公用 IP 位址數目

  2. 為 AKS 背景工作節點增加每個節點的連接埠

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

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

與我們連絡,以取得說明

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