ShadowOvO 把这一条删掉再重新测试下是否联通吧,这个规则把flannel的masq逻辑打乱了。

    ShadowOvO
    你现在外网跟容器双向都不连通是吧,是只有端口不连通还是双向ping也不通?
    看看iptables的filter表中的forward链是否允许转发外网与pod的数据包
    iptables -nvL FORWARD
    看看endpoints是否正常注册了
    kubectl -n kubesphere-system get endpoints ks-console
    再看看kube-proxy跟flanneld的日志是否有报错

    当然,你最好也能在整个链路上每个接口:宿主机 pod上都抓包,看看数据包是在哪一步停止传输的

      kevendeng 通过在容器上,宿主机上,远端主机抓包发现。容器的数据包能到达宿主机,能到达远端主机,远端主机的数据包能回到宿主机,但宿主机上的数据包无法回到容器

        ShadowOvO 看看forward链的规则吧,正常情况下flannel会设置两条10.244.0.0的accept规则。

          ShadowOvO
          flannel设置的accept规则就是kubespheredev那两条,说明数据包不是在这被拦截的

            kevendeng
            ks-console 内部监听,没问题,数据包都进来了也处理返回了,但就宿主机那块儿一直没有回包没法响应浏览器。。。我吐了。加了MASQ怎么就不行呢:)

              ShadowOvO 从目前的信息来看我认为组件都工作正常,唯一可能是人为的错误配置或者别的组件,不过我没注意到的。
              期待你查到root cause并分享。

                3 个月 后
                5 个月 后

                ShadowOvO

                我也碰到了这样 问题,从pod无法ping公网,在cni0 上不能抓到ICMP包。
                如果直接ping cni0的ip,可以抓到ICMP包。

                `

                jacarrichan@jcpc:~/k8s$ !714

                kubectl exec -it traceroute – ping 10.240.0.1

                PING 10.240.0.1 (10.240.0.1): 56 data bytes

                64 bytes from 10.240.0.1: seq=0 ttl=64 time=0.080 ms

                64 bytes from 10.240.0.1: seq=1 ttl=64 time=0.156 ms

                64 bytes from 10.240.0.1: seq=2 ttl=64 time=0.155 ms

                C

                --- 10.240.0.1 ping statistics —

                3 packets transmitted, 3 packets received, 0% packet loss

                round-trip min/avg/max = 0.080/0.130/0.156 ms

                jacarrichan@jcpc:~/k8s$ kubectl exec -it traceroute – ping 114.114.114.114

                PING 114.114.114.114 (114.114.114.114): 56 data bytes

                C

                --- 114.114.114.114 ping statistics —

                10 packets transmitted, 0 packets received, 100% packet loss

                command terminated with exit code 1

                `