診斷已啟用 Azure Arc 的 Kubernetes 叢集的連線問題
如果您在將叢集連線到 Azure Arc 時遇到問題,可能是因為此處所列的其中一個問題所致。 我們提供兩個具有引導式說明的流程圖:一個適用於您未使用 Proxy 伺服器的情況,另一個則適用於您的網路連線使用 Proxy 伺服器的情況。
提示
不論您是使用 Azure CLI 還是Azure PowerShell 來連線叢集,都適用此流程圖中的步驟。 不過,某些步驟需要使用 Azure CLI。 如果您尚未安裝 Azure CLI,請務必在開始之前執行此動作。
沒有 Proxy 的連線
檢閱此流程圖,以診斷在沒有 Proxy 伺服器的情況下嘗試將叢集連線到 Azure Arc 時的問題。 以下提供有關每個步驟的更多詳細資料。
Azure 身分識別是否有足夠的權限?
檢閱連線叢集的必要條件,並確定您用來連線叢集的身分識別具有必要的權限。
您是否正在執行最新版的 Azure CLI?
確定您已安裝最新版本。
如果您使用 Azure PowerShell 來連線您的叢集,請確定您正在執行最新的版本。
connectedk8s
延伸模組是否為最新版本?
執行此命令,將 Azure CLI connectedk8s
延伸模組更新為最新版本:
az extension update --name connectedk8s
如果您尚未安裝延伸模組,您可以執行下列命令來執行此動作:
az extension add --name connectedk8s
kubeconfig 是否指向正確的叢集?
執行 kubectl config get-contexts
以確認目標內容名稱。 然後執行 kubectl config use-context <target-cluster-name>
,將預設內容設定為正確的叢集。
所有必要資源提供者都已註冊?
請確定已註冊 Microsoft.Kubernetes、Microsoft.KubernetesConfiguration 和 Microsoft.ExtendedLocation 資源提供者。
是否符合所有網路需求?
檢閱網路需求,並確保未封鎖任何必要的端點。
azure-arc
命名空間中的所有 Pod 是否執行中?
如果一切正常運作,您的 Pod 應該全都處於 Running
狀態。 執行 kubectl get pods -n azure-arc
以確認任何 Pod 的狀態是否不是 Running
。
仍然有問題嗎?
上述步驟將解決許多常見的連線問題,但如果您仍然無法成功連線,請產生疑難排解記錄檔,然後開啟支援要求,以便我們可以進一步調查問題。
若要產生疑難排解記錄檔,請執行下列命令:
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
當您建立支援要求時,請在 [其他詳細資料] 區段中,使用 [檔案上傳] 選項來上傳產生的記錄檔。
使用 Proxy 伺服器的連線
如果您在至少一部機器上使用 Proxy 伺服器,請完成非 Proxy 流程圖的前五個步驟 (透過資源提供者註冊),以進行基本疑難排解步驟。 然後,如果您仍然遇到問題,請檢閱下一個流程圖以取得其他疑難排解步驟。 以下提供有關每個步驟的更多詳細資料。
機器是否在 Proxy 伺服器後方執行命令?
如果機器在 Proxy 伺服器後面執行命令,則需要設定所有必要的環境變數。 如需詳細資訊,請參閱使用輸出 Proxy 伺服器連線。
例如:
export HTTP_PROXY="http://<proxyIP>:<proxyPort>"
export HTTPS_PROXY="https://<proxyIP>:<proxyPort>"
export NO_PROXY="<cluster-apiserver-ip-address>:<proxyPort>"
Proxy 伺服器是否只接受信任的憑證?
執行 az connectedk8s connect
命令時,請務必包含 --proxy-cert <path-to-cert-file>
來併入憑證檔案路徑。
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-cert <path-to-cert-file>
Proxy 伺服器是否能夠連線到所需的網路端點?
檢閱網路需求,並確保未封鎖任何必要的端點。
Proxy 伺服器是否只使用 HTTP?
如果您的 Proxy 伺服器只使用 HTTP,您可以對這兩個參數使用 proxy-http
。
如果您的 Proxy 伺服器同時設定 HTTP 和 HTTPS,請執行 az connectedk8s connect
命令並搭配指定 --proxy-https
和 --proxy-http
參數。 請確定您對 HTTP Proxy 使用 --proxy-http
和對 HTTPS Proxy 使用 --proxy-https
。
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port>
Proxy 伺服器是否需要略過服務對服務通訊的範圍?
如果您需要略過範圍,請在 az connectedk8s connect
命令中使用 --proxy-skip-range <excludedIP>,<excludedCIDR>
。
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port> --proxy-skip-range <excludedIP>,<excludedCIDR>
azure-arc
命名空間中的所有 Pod 是否執行中?
如果一切正常運作,您的 Pod 應該全都處於 Running
狀態。 執行 kubectl get pods -n azure-arc
以確認任何 Pod 的狀態是否不是 Running
。
檢查端點的 DNS 解析是否成功
從 Pod 內,您可以對端點執行 DNS 查詢。
如果您無法執行 kubectl exec 命令來連線到 Pod 並安裝 DNS Utils 套件,該怎麼辦? 在此情況下,您可以在與有問題的 Pod 相同的命名空間中啟動測試 Pod,然後執行測試。
注意
如果 DNS 解析或輸出流量無法讓您安裝必要的網路套件,您可使用 rishasi/ubuntu-netutil:1.0
docker 映像。 在此映像中,已安裝必要的套件。
以下是檢查 DNS 解析的範例程序:
在與有問題的 Pod 相同的命名空間中啟動測試 Pod:
kubectl run -it --rm test-pod --namespace <namespace> --image=debian:stable
測試 Pod 執行之後,您將取得 Pod 的存取權。
執行下列
apt-get
命令來安裝其他工具套件:apt-get update -y apt-get install dnsutils -y apt-get install curl -y apt-get install netcat -y
安裝套件之後,執行 nslookup 命令來測試端點的 DNS 解析:
$ nslookup microsoft.com Server: 10.0.0.10 Address: 10.0.0.10#53 ... ... Name: microsoft.com Address: 20.53.203.50
直接嘗試上游 DNS 伺服器的 DNS 解析。 此範例使用 Azure DNS:
$ nslookup microsoft.com 168.63.129.16 Server: 168.63.129.16 Address: 168.63.129.16#53 ... ... Address: 20.81.111.85
執行
host
命令,檢查 DNS 要求是否路由傳送至上游伺服器:$ host -a microsoft.com Trying "microsoft.com.default.svc.cluster.local" Trying "microsoft.com.svc.cluster.local" Trying "microsoft.com.cluster.local" Trying "microsoft.com.00idcnmrrm4edot5s2or1onxsc.bx.internal.cloudapp.net" Trying "microsoft.com" Trying "microsoft.com" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62884 ;; flags: qr rd ra; QUERY: 1, ANSWER: 27, AUTHORITY: 0, ADDITIONAL: 5 ;; QUESTION SECTION: ;microsoft.com. IN ANY ;; ANSWER SECTION: microsoft.com. 30 IN NS ns1-39.azure-dns.com. ... ... ns4-39.azure-dns.info. 30 IN A 13.107.206.39 Received 2121 bytes from 10.0.0.10#53 in 232 ms
在 Windows 節點集區中執行測試 Pod:
# For a Windows environment, use the Resolve-DnsName cmdlet. kubectl run dnsutil-win --image='mcr.microsoft.com/windows/servercore:1809' --overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "windows"}}}' -- powershell "Start-Sleep -s 3600"
執行 kubectl exec 命令,以使用 PowerShell 連線到 Pod:
kubectl exec -it dnsutil-win -- powershell
在 PowerShell 中執行 Resolve-DnsName Cmdlet,以檢查 DNS 解析是否適用於端點:
PS C:\> Resolve-DnsName www.microsoft.com Name Type TTL Section NameHost ---- ---- --- ------- -------- www.microsoft.com CNAME 20 Answer www.microsoft.com-c-3.edgekey.net www.microsoft.com-c-3.edgekey. CNAME 20 Answer www.microsoft.com-c-3.edgekey.net.globalredir.akadns.net net www.microsoft.com-c-3.edgekey. CNAME 20 Answer e13678.dscb.akamaiedge.net net.globalredir.akadns.net Name : e13678.dscb.akamaiedge.net QueryType : AAAA TTL : 20 Section : Answer IP6Address : 2600:1408:c400:484::356e Name : e13678.dscb.akamaiedge.net QueryType : AAAA TTL : 20 Section : Answer IP6Address : 2600:1408:c400:496::356e Name : e13678.dscb.akamaiedge.net QueryType : A TTL : 12 Section : Answer IP4Address : 23.200.197.152
如果 DNS 解析不成功,請驗證叢集的 DNS 組態。
仍然有問題嗎?
上述步驟將解決許多常見的連線問題,但如果您仍然無法成功連線,請產生疑難排解記錄檔,然後開啟支援要求,以便我們可以進一步調查問題。
若要產生疑難排解記錄檔,請執行下列命令:
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
當您建立支援要求時,請在 [其他詳細資料] 區段中,使用 [檔案上傳] 選項來上傳產生的記錄檔。