共用方式為


診斷已啟用 Azure Arc 的 Kubernetes 叢集的連線問題

如果您在將叢集連線到 Azure Arc 時遇到問題,可能是因為此處所列的其中一個問題所致。 我們提供兩個具有引導式說明的流程圖:一個適用於您未使用 Proxy 伺服器的情況,另一個則適用於您的網路連線使用 Proxy 伺服器的情況。

提示

不論您是使用 Azure CLI 還是Azure PowerShell 來連線叢集,都適用此流程圖中的步驟。 不過,某些步驟需要使用 Azure CLI。 如果您尚未安裝 Azure CLI,請務必在開始之前執行此動作。

沒有 Proxy 的連線

檢閱此流程圖,以診斷在沒有 Proxy 伺服器的情況下嘗試將叢集連線到 Azure Arc 時的問題。 以下提供有關每個步驟的更多詳細資料。

流程圖顯示不使用 Proxy 時檢查連線問題的可視化表示法。

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 伺服器後面執行命令,則需要設定所有必要的環境變數。 如需詳細資訊,請參閱使用輸出 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 解析的範例程式:

  1. 在與有問題的 Pod 相同的命名空間中啟動測試 Pod:

    kubectl run -it --rm test-pod --namespace <namespace> --image=debian:stable
    

    測試 Pod 執行之後,您將取得 Pod 的存取權。

  2. 執行下列 apt-get 命令以安裝其他工具套件:

    apt-get update -y
    apt-get install dnsutils -y
    apt-get install curl -y
    apt-get install netcat -y
    
  3. 安裝套件之後,請執行 nslookup 命令來測試端點的 DNS 解析:

    $ nslookup microsoft.com
    Server:         10.0.0.10
    Address:        10.0.0.10#53
    ...
    ...
    Name:   microsoft.com
    Address: 20.53.203.50
    
  4. 直接嘗試上游 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
    
  5. 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
    
  6. 在 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"
    
  7. 執行 kubectl exec 命令,以使用 PowerShell 連線到 Pod:

    kubectl exec -it dnsutil-win powershell
    
  8. 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>

當您建立支援要求時,請在 [其他詳細資料] 區段中,使用 [檔案上傳] 選項來上傳產生的記錄檔。

下一步