k8s service nodePort无法访问的问题解决

 更新时间:2023年01月19日 10:44:36   作者:小丶事情  
今天有一个项目做service nodeport转发,结果设置完之后发现外网访问失败,下面这篇文章主要给大家介绍了关于k8s service nodePort无法访问的问题解决,文中通过图文介绍的非常详细,需要的朋友可以参考下

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

总结

到此这篇关于k8s service nodePort无法访问问题解决的文章就介绍到这了,更多相关k8s service nodePort无法访问内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 超详细的Kubernetes (k8s)常用命令整理

    超详细的Kubernetes (k8s)常用命令整理

    这篇文章主要介绍了Kubernetes (k8s)常用命令整理的相关资料,讲解了Kubernetes集群管理、节点资源查看、Pod管理、部署管理、命名空间管理、服务负载均衡、调试排错以及备份恢复等操作的命令,需要的朋友可以参考下
    2025-03-03
  • Jenkins打包、发布、部署完整骤记录

    Jenkins打包、发布、部署完整骤记录

    这篇文章主要介绍了Jenkins的基本概念,服务器环境检查,以及如何安装和配置Jenkins,包括安装FTP服务、Maven、Git和Jenkins本身,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • K8s搭建Jenkins的详细教程(附源代码)

    K8s搭建Jenkins的详细教程(附源代码)

    Jenkins 是一个开源的自动化服务器,主要用于持续集成和持续交付,这篇文章主要来和大家介绍一下如何在K8s中搭建Jenkins,有需要的可以了解下
    2025-03-03
  • 关于k8s 使用 Service 控制器对外暴露服务的问题

    关于k8s 使用 Service 控制器对外暴露服务的问题

    这篇文章主要介绍了k8s使用Service控制器对外暴露服务,包括部署deploy,部署 service及查看 service 和 pod 的关系,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 一文搞懂K8S中的NodeSelector

    一文搞懂K8S中的NodeSelector

    NodeSelector是Kubernetes用于指定Pod运行节点的机制,通过节点上的标签(label)来选择性地调度Pod,增加调度的灵活性和精确性,首先需要给节点打上标签,本文给大家介绍K8S中的NodeSelector,感兴趣的朋友一起看看吧
    2024-10-10
  • kubeadm 搭建 K8s的详细过程

    kubeadm 搭建 K8s的详细过程

    这篇文章主要介绍了kubeadm 搭建 K8s详细过程,环境使用 VirtualBox 构建的3台虚拟机,虚拟机网络配置的相关步骤给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 云原生技术kubernetes之volumes容器的使用

    云原生技术kubernetes之volumes容器的使用

    这篇文章主要为大家介绍了云原生技术kubernetes之volumes容器使用方式, 有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • K8S  Config应用配置小结

    K8S  Config应用配置小结

    本文主要介绍了Kubernetes中ConfigMap和Secret的使用方法,以及如何在Pod和容器中进行资源配置,文中详细讲解了如何创建和使用ConfigMap来管理非机密性配置,以及如何使用Secret来存储敏感信息,同时,还介绍了如何在Pod中配置资源请求和限制,感兴趣的朋友一起看看吧
    2025-03-03
  • K8S-ConfigMap实现应用和配置分离详解

    K8S-ConfigMap实现应用和配置分离详解

    这篇文章主要为大家介绍了K8S-ConfigMap实现应用和配置分离详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 使用sealos快速搭建K8s集群环境的过程

    使用sealos快速搭建K8s集群环境的过程

    这篇文章主要介绍了使用sealos快速搭建K8s集群环境,主要包括sealos安装方法,虚拟机设置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09

最新评论