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>
在命令列使用 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 社群支援。