本文介紹雲邊營運通訊組件Tunnel的常見問題。
kubectl exec/logs不通、Prometheus和Metrics Server不能擷取邊緣節點的Metrics資料
問題現象
執行命令
kubectl exec -it edge-tunnel-agent-xxx -n kube-system -- sh時,輸出報錯資訊error: unable to upgrade connection: fail to setup the tunnel: fail to setup TLS handshake through the Tunnel。Prometheus不能擷取邊緣節點的Metrics資料。
Metrics Server不能擷取邊緣節點的Metrics資料。
問題原因
出現此類問題,可能是由於雲上的edge-tunnel-server與edge-tunnel-agent之間沒有建立網路連結。
解決方案
執行以下命令,查看edge-tunnel-server Pod的日誌。替換以下
edge-tunnel-server-xxx為您edge-tunnel-server Pod的名稱。kubectl logs edge-tunnel-server-xxx -n kube-system預期輸出中出現以下錯誤提示。
tunnel.go:74] "currently no tunnels available" err="No backend available" interceptor.go:115] successfully setup connection to "127.0.0.1:10255" with headers: "\r\nX-Tunnel-Proxy-Host: xxxx\r\nUser-Agent: Go-http-client/1.1" interceptor.go:136] fail to write request to tls connection: write unix @->/tmp/interceptor-proxier.sock: write: broken pipe收集出現問題的邊緣節點的診斷資訊。具體操作,請參見如何收集ACK Edge叢集節點的診斷資訊?
在收集到的資訊中,查看edge-tunnel-agent的日誌,是否出現以下提示資訊。
1 clientset.go:156] "cannot sync once" err="rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp xxx.xxx.xxx.xxx:10262: i/o timeout\""若沒有出現以上資訊,請提交工單處理。
若出現以上資訊,請轉下一步。
執行以下命令,查看tunnel-server的暴露地址。
kubectl get svc -n kube-system | grep tunnel-server-svc預期輸出:
x-tunnel-server-svc LoadBalancer 172.16.XX.XX 47.99.XX.XX 10262:30164/TCP 47h在邊緣節點上檢查與tunnel-server的網路連通性,您可以通過
ping 47.99.XX.XX查看網路是否連通。如果網路不通,則需要繼續排查網路問題。
如果網路連通,則執行下一步。
在邊緣節點上
telnet 47.99.XX.XX 10262查看是否連通。如果連接埠不通,則需要檢查雲上安全性群組、SLB的ACL規則、tunnel-server所在節點的iptables規則,確認這些規則是否阻礙網路連結的建立。如果雲上安全性原則沒有阻攔,則需要檢查邊緣節點本身網路原則是否對出公網10262連接埠進行攔截。
重要目前Tunnel採用10262,10263,10264三個連接埠,雲上安全性原則不允許對這三個連接埠進行任何限制;雲下安全性原則不允許對10262連接埠進行任何限制。
SLB無任何ACL,請勿私自添加ACL規則。