本文介绍云边运维通信组件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规则。