針對虛擬網路外部端點的連線進行疑難解答
本文討論如何針對從 azure Kubernetes Service (AKS) 叢集Microsoft連線至虛擬網路外部端點的連線進行疑難解答。
必要條件
用戶端 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
,請確定符合下列條件:
輸出裝置 (防火牆或 Proxy) 可連線。
輸出裝置允許 來自叢集的必要輸出流量 。
若要取得 AKS 叢集允許的 FQDN 清單,請執行 az aks egress-endpoints list 命令:
az aks egress-endpoints list --resource-group <resource_group> --name <cluster_name>
如果輸出類型為 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 |
|
|
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:檢查作業系統磁碟是否大量使用
若要檢查作業系統磁碟是否大量使用,請遵循下列步驟:
在 Azure 入口網站 中,搜尋並選取 [虛擬機擴展集]。
在擴展集清單中,選取用於 AKS 叢集的擴展集。
在擴展集瀏覽窗格中,移至 [監視] 區段,然後選取 [ 計量]。
從 [計量 ] 區段尋找下列欄位,以檢視擴展集的磁碟計量。
欄位 值 範圍 VMSS 名稱 計量命名空間 虛擬機器主機 計量 OS 和資料磁碟計量
如需計量的詳細資訊,請參閱 OS 磁碟和數據磁碟計量。
若要檢視有關磁碟使用率的 AKS 建議,請遵循下列步驟:
在 Azure 入口網站 中,搜尋並選取 [Kubernetes 服務]。
在 Kubernetes 服務清單中,選取 AKS 叢集的名稱。
在 AKS 叢集瀏覽窗格中,移至 [監視] 區段,然後選取 [建議程序建議]。
檢閱有關磁碟使用量的列出的建議。
如果OS磁碟大量使用,請考慮使用下列補救措施:
增加 OS 磁碟大小。
切換至 暫時 OS 磁碟。
如果這些補救措施無法解決問題,請分析在磁碟上執行大量讀取/寫入作業的程式。 然後,檢查您是否可以將動作移至數據磁碟,而不是OS磁碟。
步驟 3:檢查來源網路位址轉譯埠是否已用盡
如果應用程式進行許多輸出連線,它們可能會耗盡輸出裝置IP位址上的可用埠數目。 遵循標準負載平衡器診斷與計量、警示和資源健康情況,以監視現有負載平衡器來源網路位址轉換 (SNAT) 埠的使用方式和配置。 監視以驗證或判斷 SNAT 埠耗盡的風險。
您是否達到或超過已配置的 SNAT 埠數目上限? 在此情況下,您可以檢查應用程式,以判斷它是否重複使用現有的連線。 如需詳細資訊,請參閱 設計應用程式以有效率地使用連線。
如果您覺得應用程式已正確設定,而且您需要比預設配置埠數目更多的 SNAT 連接埠,請遵循下列步驟:
增加輸出裝置上的公用 IP 數目。 如果輸出裝置是負載平衡器,您可以增加負載平衡器上的公用 IP 位址數目。
協力廠商連絡資訊免責聲明
Microsoft 提供協力廠商連絡資訊,以協助您尋找有關此主題的其他資訊。 此連絡資訊可能會變更而不另行通知。 Microsoft 不保證協力廠商連絡資訊的準確性。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。