修改dns配置后还需要重启coredns才生效

另外可以贴下你的coredns配置吗,kubectl get cm -n kube-system coredns -oyaml

    ShadowOvO 我记得你说过在POD内ping不通114对吧?如果是无法连接外网,那问题的根源不在coredns,而是整个网络连接的问题。
    从你POD内的ip route看上去,POD网络设置是没问题的,试试在节点上执行iptables-save看看是否设置了正确的拦截规则与转发规则。

    可以在宿主机上抓包看pod访问外网的流量,然后看看flannel的配置/run/flannel/subnet.env是否和flannel.1的地址匹配

    建议咨询阿里云服务排查相关网络配置是否正确,如安全组、防火墙等

      ShadowOvO IP-MASQ应该是flannel自己做的,你的flannel是怎么安装的呢,为什么会有这个问题。

        ShadowOvO 你是先在Linux上用kk安装了K8S与KS,CNI用的Calico,然后卸载了Calico,自己手动apply flannel的yaml安装的flannel?

          ShadowOvO 你的flannel设置的集群ip地段是10.244.0.0/16
          但是你这个节点分到的ip段是10.1.0.0/24,不在集群ip段里
          iptables规则里,flannel已经设置好了该有的masq规则,但是因为没有覆盖到节点ip段,导致masq失败,也就是pod不能连通外网
          即使是手动加了masq规则,你目前的配置也只能支持一个节点的k8s运行,如果添加节点,网络还是会出错
          至于为什么节点分配到的ip不在集群ip配置的范围内,值得研究

            kevendeng 是的,不知道是部署的原因还是和云服务厂商有关,本地没出现过这个问题

            kevendeng 还发现一个问题,不知您有遇到过没。就是 插入MASQUERADE规则到第一行,并且填写的是 IP/Mask 。但查看后发现变成了 HostName 形式,而 ip 形式的没有生效,也没有数据。这是什么问题

              ShadowOvO
              你是执行的iptables -L吧,它默认会对ip地址进行反向DNS查询,显示hostname,你用iptables -L -n看就行了。
              至于这个kubespheredev的hostname,应该是你自己配置的吧
              iptables规则的行为也与这个无关,如果行为非预期,那应该是规则没写对

                kevendeng -n 显示的是预期的值。而且公网IP还无法访问kubesphere面板,是为什么,宿主机上能抓到数据包

                  ShadowOvO 你的截图只能说明你的本地客户端到宿主机的30880是连通的,但整个流程还需经过Service、NAT、Flannel的overlay网络、Pod,最后再回包,而你的Flannel配置应该是有问题的。