K8S 网络问题导致 ns 相关的服务不能互相访问

2023-10-27

背景

近期重新部署了一套K8S环境,是基于本机虚拟机,采用 Kuboard-Spray 方式

使用 KuboardSpray 安装kubernetes_v1.23.1 | Kuboard

安装成功后,并无感觉不妥,看到 pod 状态都是 running,以为大功告成,便开始部署应用。

发现问题

第一次发现问题时,当时是部署了一套若依系统,后端服务都是running,但是前端服务running20s左右状态变成了error.

 通过 查看log发现了端倪, nginx无法找到 upstream。而实际上这个应该是一个 host,却被当成了 upstream。

 nginx 部分配置如下

		
	    location ^~ /prod-api/{
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://ruoyi-gateway.ruoyi-k8s:8080/;
        }

通过ping ruoyi-gateway.ruoyi-k8s 也不通。

当时就怀疑集群安装有问题,这整套服务之前在华为云服务器用k8s部署是ok的,本机部署就存在这种问题,配置调了几轮,无果。

后面又用 system服务访问gateway服务,通过ping的方式仍然不通。

当时就下结论,是集群网络问题,但具体是啥问题,还是一头雾水。

准备再次重装集群的时候,问了以下同事——杰哥。 

按照杰哥的思路,查了下网络插件,用的是 calico,都是running,以为正常,杰哥给我画了圈圈,一下子就明白了,原来虽然是running,但不代表服务是正常的,因为Ready数是0。

 沟通之后犹如醍醐灌顶,顺藤摸瓜,终于发现了插件网络不通。

kubectl describe pods calico-node-f5qzf   -n kube-system

...
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  88s                default-scheduler  Successfully assigned kube-system/calico-node-f5qzf to node1
  Normal   Pulled     89s                kubelet            Container image "quay.io/calico/cni:v3.21.5" already present on machine
  Normal   Created    89s                kubelet            Created container upgrade-ipam
  Normal   Started    88s                kubelet            Started container upgrade-ipam
  Normal   Pulled     88s                kubelet            Container image "quay.io/calico/cni:v3.21.5" already present on machine
  Normal   Created    88s                kubelet            Created container install-cni
  Normal   Started    87s                kubelet            Started container install-cni
  Normal   Pulled     86s                kubelet            Container image "quay.io/calico/pod2daemon-flexvol:v3.21.5" already present on machine
  Normal   Created    86s                kubelet            Created container flexvol-driver
  Normal   Started    85s                kubelet            Started container flexvol-driver
  Normal   Pulled     85s                kubelet            Container image "quay.io/calico/node:v3.21.5" already present on machine
  Normal   Created    85s                kubelet            Created container calico-node
  Normal   Started    84s                kubelet            Started container calico-node
  Warning  Unhealthy  78s (x4 over 83s)  kubelet            Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused
  Warning  Unhealthy  69s                kubelet            Readiness probe failed: 2022-07-01 03:42:37.964 [INFO][220] confd/health.go 180: Number of node(s) with BGP peering established = 0
calico/node is not ready: BIRD is not ready: BGP not established with 192.168.0.211
  Warning  Unhealthy  59s  kubelet  Readiness probe failed: 2022-07-01 03:42:47.960 [INFO][255] confd/health.go 180: Number of node(s) with BGP peering established = 0
calico/node is not ready: BIRD is not ready: BGP not established with 192.168.0.211
  Warning  Unhealthy  49s  kubelet  Readiness probe failed: 2022-07-01 03:42:57.893 [INFO][282] confd/health.go 180: Number of node(s) with BGP peering established = 0
calico/node is not ready: BIRD is not ready: BGP not established with 192.168.0.211
  Warning  Unhealthy  39s  kubelet  Readiness probe failed: 2022-07-01 03:43:07.909 [INFO][311] confd/health.go 180: Number of node(s) with BGP peering established = 0
calico/node is not ready: BIRD is not ready: BGP not established with 192.168.0.211

网络异常解决

calico/node is not ready: BIRD is not ready: BGP not established with 192.168.0.211

有异常就好办了,网上慰问了一番度娘,终于找出了问题。

原因是通过 Kuboard-Spray 方式安装 K8s 集群,calico 网络默认读取的是 eth0 网口,但是,如果是通过 VM 虚拟机安装系统,网口一般为ens33,也就是网口配置不对。

解决

需要打开配置calico的YAML文件

原始部分内容如下:

            - name: CALICO_NETWORKING_BACKEND
              valueFrom:
                configMapKeyRef:
                  key: calico_backend
                  name: calico-config
            - name: IP_AUTODETECTION_METHOD
              value: skip-interface=eth0

将IP_AUTODETECTION_METHOD 的值改成  interface=ens33 即可,注意,yaml有几处都需要修改(大概是3处)。

修改后自动重启服务

再来看看 calico 

 READY 变成 了1/1,running状态。

再次重启若依 web服务,也变成了running了,查看日志并无报错,

 再来检验system服务与gateway服务的网络

kubectl exec -it ruoyi-system-7b6488bdd4-4kz5m -n ruoyi-k8s /bin/bash

前方道路畅通 (* ̄︶ ̄)

参考网址

https://www.codenong.com/cs109711759/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K8S 网络问题导致 ns 相关的服务不能互相访问 的相关文章

随机推荐

  • system/WIFEXITED/WEXITSTATUS函数-linux

    system 感性认识 systerm两层含义 1 正确退出后 还需要再判断 操作成功或者操作失败 2 错误退出 include
  • TOMCAT配置:参数大小maxPostSize,参数个数maxParameterCount

    在更新了JSON校验器后 理论上不再存在问题 但是在使用JSON传递表单数据进行保存时依然出现了保存异常的情况 前台数据为7200个JSONObject组成的JSONArray 大小约为1 83M 其他参数若干 在参数传递到后台时发现后台并
  • 最新的Vivado安装、使用教程(2022/12/31)

    本文主要参考了黑金社区提供的资料 整理而成 目录 1 Vivado 开发环境 1 1 Vivado 软件介绍 1 2 Vivado 软件版本 2017 4比较稳定 2 Vivado 软件 Windows 下安装 3 重新安装驱动 4 大功告
  • 中位数(C语言)

    Description 计算有限个数的数据的中位数的方法是 把所有的同类数据按照大小的顺序排列 如果数据的个数是奇数 则中间那个数据就是这群数据的中位数 如果数据的个数是偶数 则中间那2个数据的算术平均值就是这群数据的中位数 现在给出n个正
  • Go语言最全面试题,拿offer全靠它,附带免积分下载pdf

    面试题文档下链接点击这里免积分下载 go语言入门到精通点击这里免积分下载 文章目录 Go 基础类 GO 语言当中 NEW 和 MAKE 有什么区别吗 PRINTF SPRINTF FPRINTF 都是格式化输出 有什么不同 GO 语言当中数
  • xss-level1

    首先搭建xss靶场 打开浏览器输入地址来到第一关 这里我先查看了一下源代码 先试一下弹出会话框 name lt
  • 程序跑飞的如何查问题

    在下这厢有礼了 最近一直在调试公司的代码 调的我有点慢 给自己总结一下 我是在FPGA上调试 一个通信交互的工程 我遇到程序跑飞的无非是三种情况 1 数组越界 就是数组的大小只有array 100 但是那你用了array 500 产生越界
  • rk3368 开机内核启动不了

    Platform RK3368 OS Android 6 0 Kernel 3 10 0 电源管理芯片用的是配套的rk818 经测量发现板子在上电启动时 u boot阶段与kernel阶段dcdc电压不一样 从uboot切换到kernel时
  • 矩阵特征值与行列式、迹的关系

    矩阵的特征值之和等于矩阵的行列式 矩阵的特征值之积等于矩阵的迹 简单的理解证明如下 1 二次方程的韦达定理 请思考 x 2 bx c 0 这个方程的所有根的和等于多少 所有根的积等于多少 2 把二次方程推广到 N 次
  • Linux下安装opencv with-ffmpeg解决无法读取视频的问题

    Linux下安装opencv with ffmpeg解决无法读取视频的问题 参考文章 1 Linux下安装opencv with ffmpeg解决无法读取视频的问题 2 https www cnblogs com haiyang21 p 1
  • 求最大公约数,最小公倍数(c++)

    文章目录 最大公约数 质数和合数 公约数 计算最大公约数 辗转相除法 最小公倍数 最大公约数 质数和合数 质数也称素数 指大于1 并且除了1和它自己 不能被任何其他自然数整除的数 除了1和质数的其他自然数称为合数 合数必定可以分解成2个或以
  • Spring Cloud中的服务注册和发现是怎样实现的?Spring Boot和Spring Cloud的关系是怎样的?Spring的核心容器包括哪些模块?Spring的Bean作用域有哪些?它们的区

    1 Spring Cloud中的服务注册和发现是怎样实现的 在Spring Cloud中 服务注册和发现是通过Eureka来实现的 Eureka是Netflix开源的一个服务治理组件 用于实现服务注册和发现的功能 具体来说 服务的提供方会在
  • vue3使用jodit富文本编辑器,自定义各项配置及组件封装

    目录 常用配置 设置中文 字体设置 CDN的引用 图片上传 对编辑器中生成的元素添加默认属性 组件封装 本文使用时的版本 vue 3 2 36 jodit 3 24 7 Jodit 是国外编写的一个功能强大的富文本编辑器 有常规版本和PRO
  • “数据库事务(Database Transaction)

    事务的使用 关于事务 我今天要把自己放在一个初学者的心态来写这篇文章 之前几篇文章大多讲的是对于Winner的应用 今天要从根本上来讲 一下 事务 以及事务在Winner中的应用 首先从基础讲起 什么是 事务 事务能帮我们解决哪些问题 摘录
  • 每日一解 戳气球(困难的动归)

    题目 戳气球 有 n 个气球 编号为0 到 n 1 每个气球上都标有一个数字 这些数字存在数组 nums 中 现在要求你戳破所有的气球 如果你戳破气球 i 就可以获得 nums left nums i nums right 个硬币 这里的
  • Unit Test 5--编写第一个单元测试

    大家好 我是神韵 是一个技术 生活博主 出文章目的主要是两个 一是好记忆不如烂笔头 记录总结中提高自己 二是希望我的文章可以帮到大家 欢迎来点赞打卡 你们的行动将是我无限的动力 本篇主题是 编写第一个单元测试 其它文章链接 Unit Tes
  • 几个小程序

    1 求变量val中1的个数 方法1 逐个去比较 int getNum1 int val int num 0 while val num val 0x01 val val gt gt 1 return num 方法2 使用x x 1 int
  • pycharm中通过命令行运行程序,进行程序调试

    1 点击菜单栏run gt edit configurations 2 如果命令行输入python ecode py users items 则在parameters框中输入 users items
  • Ubuntu下启动idea的方法

    最近在ubuntu下部署网站 使用IDEA进行开发 但是平时使用linux比较少 所以一路上踩到了很多坑 光是idea的启动就折腾了半天 后来发现是输入的命令有问题 安装好IDEA以后 应该进入安装目录的bin文件夹下 关键点来了 linu
  • K8S 网络问题导致 ns 相关的服务不能互相访问

    背景 近期重新部署了一套K8S环境 是基于本机虚拟机 采用 Kuboard Spray 方式 使用 KuboardSpray 安装kubernetes v1 23 1 Kuboard 安装成功后 并无感觉不妥 看到 pod 状态都是 run