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

  • 用來處理封裝 的 apt-get 命令列工具。

  • 用戶端 URL ( cURL ) 工具,或類似的命令列工具。

  • Netcat ( nc ) TCP 連線的命令列工具。

    疑難排解檢查清單

    步驟 1:設定測試 Pod 和遠端伺服器埠

    設定測試 Pod,並確定遠端伺服器上已開啟必要的埠。 從來源 Pod (或與來源 Pod) 位於相同命名空間的測試 Pod 內,遵循下列步驟:

  • 執行 kubectl run 命令,在叢集中啟動測試 Pod:

    kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable
    
  • 取得 Pod 的存取權之後,請執行下列 apt-get 命令來安裝 DNS Utils、cURL 和 Netcat 套件:

    apt-get update -y
    apt-get install dnsutils -y
    apt-get install curl -y
    apt-get install netcat -y
    
  • 安裝套件之後,請執行下列 cURL 命令來測試 Pod IP 位址的連線能力:

    curl -Iv http://<pod-ip-address>:<port>
    
  • 執行 Netcat 命令,以檢查遠端伺服器是否開啟必要的埠:

    nc -z -v <endpoint> <port>
    

    步驟 2:檢視有關 Pod、容器、Kubernetes 服務和端點的作業資訊

    在命令列使用 kubectl 和 cURL,請遵循下列步驟來檢查一切是否如預期般運作:

  • 確認目的地 Pod 已啟動並執行:

    kubectl get pods -n <namespace-name>
    

    如果目的地 Pod 正常運作,Pod 狀態會顯示為 Running ,而 Pod 會顯示為 READY

    NAME           READY   STATUS    RESTARTS   AGE
    my-other-pod   1/1     Running   0          44m
    my-pod         1/1     Running   0          44m
    
  • 搜尋 Pod 記錄以尋找存取錯誤:

    kubectl logs <pod-name> -n <namespace-name>
    
  • 在多容器 Pod 中搜尋個別容器的 Pod 記錄:

    kubectl logs <pod-name> -n <namespace-name> -c <container-name>
    
  • 如果 Pod 內的應用程式重複重新開機,請檢視 stdout 先前容器實例的傾印 Pod 記錄,以取得結束訊息。 針對多容器案例,檢視 stdout 先前容器實例的傾印 Pod 容器記錄,以取得結束訊息:

    kubectl logs <pod-name> --previous                      
    
    kubectl logs <pod-name> -c <container-name> --previous  
    
  • 檢查是否有任何網路原則可能會封鎖流量:

    kubectl get networkpolicies -A
    

    您應該會看到類似下表的輸出。

    NAMESPACE     NAME                 POD-SELECTOR             AGE
    kube-system   konnectivity-agent   app=konnectivity-agent   4d1h
    

    如果您看到任何其他自訂建立的網路原則,請檢查該原則是否封鎖對 Pod 的存取或存取。

  • 檢查您是否可以從服務 IP 位址連線到應用程式。 首先,執行 命令來顯示服務資源的詳細資料,例如外部 IP 位址和埠 kubectl get services

    kubectl get services -n <namespace-name>
    
    NAME         TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)        AGE
    my-service   LoadBalancer   10.0.21.43   20.119.121.232   80:31773/TCP   28s
    

    然後,使用服務 IP 位址和埠來執行 cURL,以檢查您是否可以連線到應用程式:

    curl -Iv http://20.119.121.232:80
    < HTTP/1.1 200 OK
    HTTP/1.1 200 OK
    
  • 取得有關服務的詳細資訊:

    kubectl describe services <service-name> -n <namespace-name>
    
  • 檢查 Pod 的 IP 位址:

    kubectl get pods -o wide  
    
    NAME            READY   STATUS        RESTARTS   AGE   IP            NODE                                
    my-pod          1/1     Running       0          12m   10.244.0.15   aks-agentpool-000000-vmss000000  
    
  • 確認 Pod 的 IP 位址是以服務中的端點存在:

    kubectl describe services my-cluster-ip-service
    
    Name:              my-cluster-ip-service
    Namespace:         default
    Selector:          app=my-pod
    Type:              ClusterIP
    IP Family Policy:  SingleStack
    IP Families:       IPv4
    IP:                10.0.174.133
    IPs:               10.0.174.133
    Port:              <unset>  80/TCP
    TargetPort:        80/TCP
    Endpoints:         10.244.0.15:80     # <--- Here
    
  • 直接驗證端點:

    kubectl get endpoints
    
    NAME                      ENDPOINTS           AGE
    my-cluster-ip-service     10.244.0.15:80      14m
    
  • 如果與服務的連線無法運作,請重新開機 kube-proxy 和 CoreDNS Pod:

    kubectl delete pods -n kube-system -l component=kube-proxy
    kubectl delete pods -n kube-system -l k8s-app=kube-dns
    
  • 確認節點未過度使用:

    kubectl top nodes
    

    您也可以使用 Azure 監視器來取得叢集的使用量資料

    與我們連絡,以取得說明

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

  •