k8s service nodePort无法访问的问题解决
目录
- 0. 前言
- 1、背景
- 2、 配置如下
- 3、集群信息如下
- 4、 问题
- 5、解决方案
- 总结
0. 前言
本文主要针对的是:不在同一内网且机器的公网IP并未显示的绑定在机器网卡上(也就是云主机,比如阿里云、腾讯云等等)出现的pod之间无法访问的问题,如果不是的话就可以撤退了,节约时间~~
1、背景
我有闲置的腾讯云两台服务器,最近想搭建个k8s集群玩玩,于是按照b站某教程搭建,出现了网络问题,具体如下。
2、 配置如下

公网ip已打码,毕竟还在使用,见谅
master节点叫:k8s-master-q,worker节点叫:k8s-master
3、集群信息如下
应用部署在了 worker节点的pod上
4、 问题
master节点:curl 10.244.1.3(podIP) 、curl 10.96.6.212都没法连通,且:在浏览器输入:http://master公网IP:30002/也无法访问
worker:恰恰相反
翻遍整个网络,没找到解决方案,或者说自己没深刻理解k8s,无法根据关键信息搜索,也不知道问题发生的原因,导致一直没找解决方案,困扰好几天。经过不懈努力,偶然间发现了问题的关键,便是 master节点与worker节点不在同一内网内。
什么意思?其实也就是对k8s集群内网络转发模型的不了解,即下图:

这是k8s的flannel网络模型,具体原理与工作流程参考大佬博客,我也是看到这篇博客才得到解决
Kuberbetes Pod间无法通信问题处理
大概原因就是,数据包从节点A发给节点B的,但使用的目的IP却是节点B的内网IP,而节点A和B并不在同一内网,并无法直接访问,这就导致了数据包中途丢包而无法连接。
可以看下自己的节点是否是使用的内网IP
[root@k8s-master-q ~]# kubectl describe nodes k8s-master


可以发现,在flannel网络模型中,使用的都是各自节点的内网IP, 又不在同一网段,确实无法访问。
5、解决方案
目前看来,我只找到了上面博主写的方案,其他方案未知,即将 IP改为 公网IP。
# master节点操作 # 修改为使用公网ip # kubectl annotate node k8s-master-q flannel.alpha.coreos.com/public-ip-overwrite=各节点公网ip --overwrite [root@k8s-master-q ~]# kubectl annotate node k8s-master flannel.alpha.coreos.com/public-ip-overwrite=1.12.xxx.xxxx --overwrite node/k8s-master annotated [root@k8s-master-q ~]# kubectl annotate node k8s-master-q flannel.alpha.coreos.com/public-ip-overwrite=43.139.xxx.xxxx --overwrite node/k8s-master-q annotated # 还需要配置内网ip转发到外网ip(内网IP是指服务器硬件本身的内网ip,不是flannel分配的) # 因为flannel重启后会重新构建iptables规则,有可能把这几条就移除掉了,重启应用后如果不能访问,需要重新执行 # iptables -t nat -A OUTPUT -d 私网ip -j DNAT --to-destination 公网ip [root@k8s-master-q ~]# iptables -t nat -A OUTPUT -d 10.0.12.13 -j DNAT --to-destination 43.139.xxx.xxx # worker 节点操作, 同样改变iptables规则 [root@k8s-master ~]# iptables -t nat -A OUTPUT -d 10.0.12.2 -j DNAT --to-destination 1.12.xxx.xxx # 之后重启相关应用,master节点和worker节点都需要操作 # 重启应用 systemctl stop kubelet systemctl stop docker systemctl stop docker iptables --flush iptables -tnat --flush systemctl start kubelet systemctl start docker
更改之后再次查询:


master节点和worker节点都已经改了,等待一会即可解决。
参考文章如下:
https://blog.csdn.net/a437936609/article/details/122325282
https://cloud.tencent.com/developer/article/1819134
总结
上一篇:nginx如何配置x-forwarded-for头部
栏 目:其它服务器
本文标题:k8s service nodePort无法访问的问题解决
本文地址:https://zz.feitang.co/server/30613.html
您可能感兴趣的文章
- 12-20Kubernetes中使用临时容器进行故障排查的方法
- 12-20Nginx设置HTTPS的方法步骤
- 12-20二进制方式安装 Kubernetes1.18.3版本实现脚本
- 12-20Nginx工作模式及代理配置的使用细节
- 12-20ZooKeeper分布式协调服务设计核心概念及安装配置
- 12-20Kubernetes部署可视化地图的十个步骤
- 12-20关于docker清理Overlay2占用磁盘空间的问题(亲测有效)
- 12-20Docker compose配置文件写法及命令使用示例
- 12-20openwrt安装docker并启动的操作方法
- 12-20云原生Kubernetes初始化容器Init使用教程


阅读排行
推荐教程
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07新版Eclipse集成Tomcat时找不到server选项的解决方法
- 12-06IIS7 应用程序池自动回收关闭的解决方案
- 12-05Windows Server 2019安装VMware
- 12-05Windows服务器默认IE浏览器无法下载文件的解决方法
- 12-05Docker安装Jenkins全过程
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法






