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

总结

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

(0)

相关推荐

  • k8s如何给node添加标签(最新推荐)

    目录 一.为什么需要标签? 二.怎么查看目前node上具有的标签 三.设置节点标签信息 1.设置节点标签 2.查看 worker02的标签是否已经设置上 3.多维度标签 3.1 设置多维度标签 3.2  显示节点的相应标签 四.通过标签来查找node 4.1 查找env=test的节点 五.修改标签 六.删除node的标签 七.标签选择器 一.为什么需要标签? k8s集群如果由大量节点组成,可将节点打上对应的标签,然后通过标签进行筛选及查看,更好的进行资源对象的相关选择与匹配 二.怎么查看目前n

  • k8s node节点重新加入master集群的实现

    1.删除node节点 执行kubectl delete node node01 2.这时如果直接执行加入,会报错.如下: [root@k8s-node02 pki]# kubeadm join 192.168.140.128:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:a3d9827be411208258aea7f3ee9aa396956c0a77c8b570503dd677aa3b6eb6

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

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

  • k8s service使用详解(云原生kubernetes)

    目录 一.什么是服务service? 二.service分类 2.1 ClusterIP 2.2 NodePort 2.3 LoadBalancer(付费方案) 2.4 ExternalName (使用较少) 三.service和pod的关系 四.Service 之 ClusterIP 使用 4.1 在当前目录下,创建一个deploy-nginx-pod.yaml,配置如下 4.2 暴露服务为 clusterIP 类型 4.3 查看服务 五.Service 之 NodePort 使用 5.1 关

  • Docker MySQL无法被宿主机访问的问题解决

    目录 1 问题描述 2 原因 3 解决方案 1 问题描述 Docker启动MySQL容器后,创建一个localhost访问的用户: create user test@localhost identified by 'test'; 但是在宿主机中无法通过该用户登录: mycli -u test 2 原因 在Docker中的MySQL创建localhost的用户只能在Docker内部访问,而不能通过外部访问. 至于为什么能在宿主机访问root,是因为默认存在两个root,分别是: root@loca

  • docker部署golang http服务时端口无法访问的问题解决

    目录 1.背景 1.1 问题描述 1.2 webserver代码 3.Dockerfile文件 2.问题分析 3.解决方案 需要使用docker将golang的httpserver容器化.在这个过程中遇到了一个低级问题,golang http服务时端口无法访问,特此记录解决这个问题的过程. 1.背景 1.1 问题描述 问题描述: docker镜像启动成果之后,通过curl不能访问: [root@hecs-205828 ~]# curl -XGET http://127.0.0.1:8360/he

  • Nginx下修改WordPress固定链接导致无法访问的问题解决

    今天下午没事,像以往一样开始做seo的优化,当然牵扯到永久链接,wordpress提供多种类型的链接形式 1/%year%/%monthnum%/%day%/%postname%/ 2/%year%/%monthnum%/%postname%/ 3/%year%/%monthnum%/%day%/%postname%.html 4/%year%/%monthnum%/%postname%.html 5/%category%/%postname%.html 6/%post_id%.html 7/%

  • React 使用browserHistory项目访问404问题解决

    最近项目里面用到了React但是发布到iis站点之后,路由地址 刷新访问直接404错误.查阅资料之后发现是iis缺少配置URL重写 的问题导致的.下面我们来图形化配置,简单的配置下IIS 打开IIS使用 Web平台安装程序 搜索 url 关键字,您会看到 直接安装 关掉IIS 重新打开IIS在站点右边的控制面板可以看到一个URL重写的功能 新增配置如下 也可以直接 使用我的配置 配置如下 关键节点是: rewrite <?xml version="1.0" encoding=&q

  • docker nginx 运行后无法访问的问题解决

    ## 1 最近在学docker部署,一开始打算将nginx先docker化的. 对照官方的docker镜像介绍说明,进行自定义配置 将官方的nginx.conf复制出来后,修改添加了一些自定义,主要是屏蔽了default.conf,以及include文件夹 sites-available # include /etc/nginx/conf.d/.conf; include /etc/nginx/sites-available/; 官方原先配置 user nginx; worker_process

  • K8S部署Kafka界面管理工具(kafkamanager)方法详解

    kafka-manager 是雅虎开源的apache-kafka管理工具,是用Scala编写的,可以在web页面进行kafka的相关操作. 一.制作kafkamanager的image镜像 下载kafka-manager-2.0.0.2.zip,在解压目录的conf下的application.conf文件里,修改kafka-manager.zkhosts地址和cmake.zkhosts地址为: zok-0.zk-hs.wiseco.svc.cluster.local:2181,zok-1.zk-

  • 浏览器不能正常访问Github的问题解决

    目录 引言 一.查询IP地址 二.修改配置hosts文件 三.检测 引言 作为一个合格的开发者,对Github肯定不陌生,有些人可能每天都会到这个开源平台,学习.Clone.Fork各种项目. 但是因为各种原因.各种限制,导致浏览器经常不能正常访问Github,相信很多小伙伴都遇到过这种情况,很困扰很头疼.本文就简单介绍一下解决办法. 一.查询IP地址 1.进入Github的IP地址查询网站:https://websites.ipaddress.com/ 2.在下方的输入框中输入 github.

  • Kubernetes(K8S)容器集群管理环境完整部署详细教程-下篇

    本文系列: Kubernetes(K8S)容器集群管理环境完整部署详细教程-上篇 Kubernetes(K8S)容器集群管理环境完整部署详细教程-中篇 Kubernetes(K8S)容器集群管理环境完整部署详细教程-下篇 在前一篇文章中详细介绍了Kubernetes(K8S)容器集群管理环境完整部署详细教程-中篇,这里继续记录下Kubernetes集群插件等部署过程: 十一.Kubernetes集群插件 插件是Kubernetes集群的附件组件,丰富和完善了集群的功能,这里分别介绍的插件有cor

随机推荐