云边运维通信组件Tunnel FAQ

本文介绍云边运维通信组件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之间没有建立网络链接。

解决方案

  1. 执行以下命令,查看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
  2. 收集出现问题的边缘节点的诊断信息。具体操作,请参见如何收集ACK Edge集群节点的诊断信息?

  3. 在收集到的信息中,查看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\""
    • 若没有出现以上信息,请提交工单处理。

    • 若出现以上信息,请转下一步。

  4. 执行以下命令,查看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
  5. 在边缘节点上检查与tunnel-server的网络连通性,您可以通过ping 47.99.XX.XX查看网络是否连通。

    • 如果网络不通,则需要继续排查网络问题。

    • 如果网络连通,则执行下一步。

  6. 在边缘节点上telnet 47.99.XX.XX 10262查看是否连通。如果端口不通,则需要检查云上安全组、SLB的ACL规则、tunnel-server所在节点的iptables规则,确认这些规则是否阻碍网络链接的建立。

  7. 如果云上安全策略没有阻拦,则需要检查边缘节点本身网络策略是否对出公网10262端口进行拦截。

    重要
    • 目前Tunnel采用10262,10263,10264三个端口,云上安全策略不允许对这三个端口进行任何限制;云下安全策略不允许对10262端口进行任何限制。

    • SLB无任何ACL,请勿私自添加ACL规则。