当前位置: 首页 > news >正文

k8s NodePort 类型 Service 无法访问 plugin type=“flannel“ failed (add)

问题描述

某个服务无法通过节点 IP 访问,具体表现为:

  • curl 192.168.31.32:32642/metrics - 连接失败
  • curl 192.168.31.61:32642/metrics - 连接失败

具体错误信息

Failed to create pod sandbox: plugin type="flannel" failed (add):
failed to set bridge addr: "cni0" already has an IP address different from 10.244.1.1/24

验证服务

查看服务是否正常

root@master-node1:~# kubectl get svc -A | grep dcgm
exporter                          dcgm-exporter                  ClusterIP   10.103.86.191    <none>        9400/TCP                     21h
exporter                          dcgm-exporter-nodeport         NodePort    10.103.10.199      <none>        9400:32642/TCP               4h17mroot@master-node1:~# kubectl get pods -n exporter -o wide
NAME                          READY   STATUS    RESTARTS   AGE     IP            NODE           NOMINATED NODE   READINESS GATES
dcgm-exporter-lxcch           1/1     Running   0          3h22m   10.244.0.8    edge-node1     <none>           <none>

查看iptables路由规则是否创建

root@edge-node1:~# iptables -t nat -L KUBE-NODEPORTS | grep 32642
KUBE-EXT-KESVHFWXM5EP343O  tcp  --  anywhere             anywhere             /* exporter/dcgm-exporter-nodeport:metrics */ tcp dpt:32642

这条规则表示接收来自任何地址、发往本机32642端口的所有 TCP 流量转发到后端的 dcgm-exporter Pod。

但是明明有iptables规则连接却被拒绝

先排除法将service转发到本机,从本机发起请求,这样可以绕过nodeport的iptables规则,然后验证是否可以请求,port-forward使用apiserver代理直接与pod通信。

root@master-node1:~# kubectl port-forward -n exporter svc/dcgm-exporter-nodeport 9400:9400

请求可以正常响应说明端口转发工作正常,服务本身没问题。问题还是在 NodePort 的路由。

查看iptables规则转发最终的位置

root@edge-node1:~# iptables -t nat -L KUBE-SEP-2EUH5K5MZAUPM34C
Chain KUBE-SEP-2EUH5K5MZAUPM34C (1 references)target     prot opt source               destinationKUBE-MARK-MASQ  all  --  10.244.0.12          anywhere             /* exporter/dcgm-exporter-nodeport:metrics */DNAT       tcp  --  anywhere             anywhere             /* exporter/dcgm-exporter-nodeport:metrics */ tcp to:10.244.0.12:9400

可以看到最终是路由到10.244.0.12:9400, 然后在node节点尝试 ping -c 2 10.244.0.12 发现无法ping通

Error: PING 10.244.0.12 (10.244.0.12) 56(84) bytes of data.From 10.244.0.1 icmp_seq=1 Destination Host UnreachableFrom 10.244.0.1 icmp_seq=2 Destination Host Unreachable--- 10.244.0.12 ping statistics ---2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1005mspipe 2

这样来看就是cni出现了问题…我本地环境使用的是flannel, 接下来就是检查flannel的配置和状态

root@edge-node1:~# ip addr show flannel.1
flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group defaultlink/ether f6:8a:62:59:d7:4e brd ff:ff:ff:ff:ff:ffinet 10.244.1.0/32 scope global flannel.1

查询节点的cidr范围

root@master-node1:~# kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}'
10.244.1.0/24 10.244.0.0/24

这里就发现了问题

edge-node1 有 flannel.1 接口,IP 是 10.244.1.0/32,Pod CIDR 是 10.244.1.0/24
master-node1 的 Pod CIDR 是 10.244.0.0/24
dcgm-exporter Pod IP 是 10.244.0.12,运行在 edge-node1 上,但它应该获得 10.244.1.x 的 IP

这里出现问题的原因是 Pod IP 分配冲突导致的。

问题修复

# 检查当前cni0网桥配置(子节点)
ip addr show cni0# 删除冲突的网桥(子节点)
ip link del cni0# 重启kubelet服务重新初始化网络(子节点)
systemctl restart kubelet# 删除并重新创建Pod
kubectl delete pod dcgm-exporter-xxx -n exporter

步骤 3: 验证修复

# 等待Pod重新创建并检查IP
kubectl get pods -n exporter -o wide# 验证NodePort访问
curl http://192.168.31.32:32642/metrics
curl http://192.168.31.61:32642/metrics

修复结果

# 查看 pod ip
root@master-node1:~# kubectl get pods -n exporter -o wide dcgm-exporter-lxcch
NAME                  READY   STATUS    RESTARTS   AGE     IP           NODE         NOMINATED NODE   READINESS GATES
dcgm-exporter-lxcch   1/1     Running   0          3h52m   10.244.1.8   edge-node1   <none>           <none>

测试 api 从任意 node ip 都可以发起请求

http://www.dtcms.com/a/486473.html

相关文章:

  • 鲲鹏服务器+银河麒麟系统安装KVM
  • 互联网大厂Java面试全解析及三轮问答专项
  • 大宗交易查询平台东莞seo公司首选3火星
  • 制作购物网站教程珠海哪个公司建设网站好
  • Github 的新动作
  • linux离线环境局域网远程ssh连接vscode
  • Electron 从低版本升级到高版本 - 开始使用@electron/remote的改造教程
  • 【源码讲解+复现】YOLOv10: Real-Time End-to-End Object Detection
  • GitHub Spec-Kit:AI 时代的规范驱动开发工具
  • 门户网站建设工作的自查报告wordpress获取链接
  • c++ STL容器.size()易造成的bug
  • 计算机组成原理01-定点数/浮点数的原/反/补码运算
  • 工控软件开发选择难?Electron、Qt、WPF 对比
  • 做网站一定需要icp么wordpress 头部菜单
  • 连云港专业网站制作互联网营销师培训方案
  • 网站 设计公司 温州wordpress新浪微博主题
  • Linux云计算基础篇(25)-DNS配置
  • 【007】墙绘产品交易平台
  • 【教学类-97-01】20251015拉布布涂色
  • 方法区与运行时常量池
  • 帮人网站开发维护违法WordPress加2Dli
  • 临清轴承网站建设企业官网wordpress主题
  • 三重变革:数字革命、地缘重构与生态危机
  • 人工智能|强化学习——基于人类反馈的强化学习(RLHF)深度解析
  • Python编程实战 · 基础入门篇 | Python能做什么
  • 【Web开发】从入门到精通,全面解析 Web 开发的过去、现在与未来
  • 系统重构过程以及具体方法
  • inline (optimizer hint)说明
  • 咖啡厅网站开发目标wordpress 文章结尾处
  • MiraiMind v1.1.49 | 来自日本的虚拟聊天软件,主打无敏感词,可以与知名动漫角色展开恋爱,需要特殊网络