记一次问题排查:为什么在POD无法通过Service访问自己?

kubernetes 24、排查pod,service,ingress是否正常的方法 目标: 当k8s的某个应用的api的pod无法接受到请求时的问题排查方法 总体步骤: 分别排查pod,service,ingress是否正常 1 验证api的pod可以收到请求 kubectl get pods -n openstack -o wide --show-labels|grep scheduler-das scheduler-dashboard-api-6455678546-tspsq 1/1 Running 0 3m13s 1... 阅读详情

问题现象

创建一个nginx pod,并配置了service访问,service后端指向pod。

进入pod中使用service ip 或者service 域名,无法访问。

一开始以为是环境配置或者k8s版本(1.9)的问题,在其他1.13的kubernetes环境下也试了,还是同样的问题。

环境配置

使用的cni插件是flannel,但不是容器化安装,也不是标准化的通过kubelet指定cni plugin(--cni-bin-dir,--cni-conf-dir参数),而是通过dockerd 提供的-bip参数指定容器的子网,而这个值是从/run/flannel/subnet.env(flannel会将获取到的子网写入到该文件)

排查过程

「1、首先尝试通过pod ip尝试是否可访问,已验证是可通的。」

「2、尝试对docker0网桥进行抓包」

tcpdump -i docker0

神奇的在这里,再次尝试通过service 访问是居然可以通,发现只要tcpdump断开就不行了。

❝

到这里的时候有点觉得诡异了

❞

在pod内通过service访问的时候网络的流向应该是

pod内部访问service->docker0网桥->宿主机的iptables规则->docker0网桥->pod内部

查阅了相关资料后,看到kubelet有个--hairpin-mod参数:

文档说明:

❝

如果网络没有为“发夹模式”流量生成正确配置,通常当 kube-proxy 以 iptables 模式运行,并且 Pod 与桥接网络连接时,就会发生这种情况。Kubelet 公开了一个 hairpin-mode 标志,如果 pod 试图访问它们自己的 Service VIP,就可以让 Service 的端点重新负载到他们自己身上。hairpin-mode 标志必须设置为 hairpin-veth 或者 promiscuous-bridge。

❞

可是我设置之后还是没有还是不行,翻了一下kubelet里面的代码,发现cni组件并没有取这个值做任何才做(在kubnet中有)

查看这个讨论:https://github.com/kubernetes/kubernetes/issues/45790

「大致结论是,应该由cni插件来根据这个值来做对应的操作。」

还是没解决我的问题?

不过我看到hairpin开启的标志位是通过/sys/devices/virtual/net/docker0/brif/veth-xxx/hairpin_mod 内容设置为1开启的。

所以我将所有veth该文件内容设置1

for intf in /sys/devices/virtual/net/docker0/brif/*; do echo 1> $intf/hairpin_mod; done

可以访问了。????

解疑:promiscuous-bridge 与 hairpin-veth

「为什么我无法访问」

bridge不允许包从收到包的端口发出,比如这种情况,在pod内通过docker0访问service,后续又通过docker0网桥进来,所以需要开启hairpin_mod

「为什么使用tcpdump 可以让访问可通?」

因为tcpdump要抓取所有经过该网卡,所以需要开启混杂模式。可以在/var/log/message看到device docker0 entered promiscuous mode的log。

❝

混杂模式(英語:promiscuous mode)是电脑网络中的术语。是指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序。

❞

手动开关命令:ifconfig docker0 promisc on/off

总结

其实我们集群通过这种比较另类的方式来分配POD IP也用了了很久了,之所以没出问题,应该是业务基本没遇到这种pod内通过service访问自己的情况。

所以还是要跟着标准的k8s方式来安装cni,避免入坑,比如flannel就已经提供给了hairpinMode参数来进行配置开启。

一波四折——记一次K8S集群应用故障排查 一波四折——记一次K8S集群应用故障排查 目录一波四折——记一次K8S集群应用故障排查part1 初露端倪part2 一波刚平一波又起part3 慢=不可用part4 问题的真相只有一个! part1 初露端倪 一个周四的下午,客户的报障打破了微信群的平静。“我们部署在自建K8S集群上的应用突然无法正常访问了,现在业务受到了影响!”收到客户的报障,我们立刻响应,向客户了解了问题现象和具体报错信息。客户反馈K8S集群部署在云主机上,K8S的应用pod example-app通过访问外部域名example-ap 阅读详情

相关推荐

【K8S系列】Kubernetes 中 Pod 无法通过 Service 名称访问服务的 DNS 解析失败问题【已解决】

在 Kubernetes 中,Service 提供了一种稳定的方式,通过名称访问一组 Pod。当其他 Pod 无法通过 Service 名称访问服务,并且出现 DNS 解析失败时,通常会导致应用无法正常工作。本文将详细分析此问题的常见原因及其解决方案。

颜淡慕潇 1万+

解决k8s中pod无法访问service的问题

解决k8s中pod无法访问service的问题。

点滴记录IT技术进程 4648

【K8S问题系列 | 2】Kubernetes 中 Pod 无法通过 Service 名称访问服务的 DNS 解析失败【已解决】

在 Kubernetes 中,Service 提供了一种稳定的方式,通过名称访问一组 Pod。当其他 Pod 无法通过 Service 名称访问服务,并且出现 DNS 解析失败时,通常会导致应用无法正常工作。本文将详细分析此问题的常见原因及其解决方案。

颜淡慕潇 1万+

k8s pod内部ping不通service

pod内部访问不了svc

weixin_45912745的博客 5742

【K8S问题系列 |14】K8S 中 Service 无法访问问题【已解决】

在 Kubernetes 使用过程中,Service 是实现 Pod 之间以及 Pod 与外部之间通信的重要组件。然而,用户在访问 Service 时,可能会遇到无法访问的问题。以下是对 Service 无法访问问题的详细分析、常见原因及其解决方案。

颜淡慕潇 9851

【K8S系列】Kubernetes 中 Service 无法访问问题及解决方案【已解决】

在 Kubernetes 使用过程中,Service 是实现 Pod 之间以及 Pod 与外部之间通信的重要组件。然而,用户在访问 Service 时,可能会遇到无法访问的问题。以下是对 Service 无法访问问题的详细分析、常见原因及其解决方案。

颜淡慕潇 1万+

k8s pod内无法通过域名访问service 排查问题定位

去看返回的ip是不是你刚才查到的ip。这个时候如果不一致了,那么可能是kube-proxy的问题了。再次去curl,但是这次通过上面的IP:Port去curl ,这次通了。在pod内 无法通过service名:端口去访问。k8s pod内无法通过域名访问service。那么kube-proxy的为什么会出现问题呢?找到对应的svc的IP。

qq_32949893的博客 1393

【K8S问题系列 | 12】K8S 中 Service 更改未生效的故障排查【已解决】

在 Kubernetes 中,Service 是实现 Pod 之间通信的核心组件。当您对 Service 进行更改(如修改端口或选择器)时,有时可能会发现这些更改未能生效,导致服务无法正常工作。本文将详细描述这一问题,并提供故障排查步骤、常见原因及解决方案。

颜淡慕潇 1万+

[kubernetes]-Pod无法通过 Service IP 访问自身

Pod 无法通过 Service IP 访问自身 同样的镜像 在自己环境可以跑起来,放到朋友rancher搭建的环境里就出现了pod的cluster ip+ port可以访问,但是通过service ip+port就无法访问的情况。 后来通过修改svc 模式 cluster ip 到load balance解决。具体出现这个问题的原因,没有去查证。朋友的环境是一主一从,具体环境已经无法验证了。看到...

爷来辣的博客 6183

【K8S问题系列 | 3】Kubernetes 中 Service 更改未生效的故障排查【已解决】

在 Kubernetes 中,Service 是实现 Pod 之间通信的核心组件。当您对 Service 进行更改(如修改端口或选择器)时,有时可能会发现这些更改未能生效,导致服务无法正常工作。本文将详细描述这一问题,并提供故障排查步骤、常见原因及解决方案。

颜淡慕潇 6831

【K8S系列】Kubernetes 中 Service 无法访问及解决方案【已解决】

在 Kubernetes 使用过程中,Service 是实现 Pod 之间以及 Pod 与外部之间通信的重要组件。然而,用户在访问 Service 时,可能会遇到无法访问的问题。以下是对 Service 无法访问问题的详细分析、常见原因及其解决方案。

颜淡慕潇 1万+

转载:k8s在pod内无法ping通servicename和ClusterIP

转载自:k8s在pod内无法ping通servicename和ClusterIP iptables与IPVS对比 Iptables: 灵活,功能强大 规则遍历匹配和更新,呈线性时延 IPVS: 工作在内核态,有更好的性能 调度算法丰富:rr,wrr,lc,wlc,ip hash… 生产环境推荐使用IPVS ①、进入容器内部测试 ping ClusterIP:无法ping通 coder@user1-container10-79754b6fcd-vmrhp:~/project$ ping 10.103.84.9

那个那个 8085

【K8S系列】Kubernetes 新创建的 Service 或 Pod 无法被发现问题【已解决】

在 Kubernetes 中,服务(Service)和 Pod 的发现是实现微服务架构的核心。服务发现机制通常依赖于标签(Label)和选择器(Selector),使得不同组件能够相互通信。然而,实际使用中,新创建的 Service 或 Pod 可能无法被其他服务发现,这可能导致请求失败或流量无法路由到目标 Pod。本文将详细分析可能的原因,并提供解决方案。

颜淡慕潇 8535

jetbot 无法通过浏览器访问_为什么 Pod 无法通过 Service 访问自己?

问题现象创建一个nginx pod,并配置了service访问,service后端指向pod。进入pod中使用service ip 或者service 域名,无法访问。一开始以为是环境配置或者k8s版本(1.9)的问题,在其他1.13的kubernetes环境下也试了,还是同样的问题。环境配置使用的cni插件是flannel,但不是容器化安装,也不是标准化的通过kubelet指定cni ...

weixin_39598796的博客 258

PWM与光耦的完美联姻:低成本4-20mA转换方案揭秘

本文揭秘了PWM与光耦结合的低成本4-20mA转换方案,适用于工业自动化领域。通过PWM信号控制输出电流,光耦实现电气隔离,该方案成本低廉、电路简单且隔离可靠。文章详细介绍了两种经典电路实现方案,包括四光耦线性模式方案和PWM控制LM317方案,并提供了实战技巧与优化策略,帮助中小企业和电子DIY爱好者构建经济高效的4-20mA转换系统。

weixin_29229055的博客 536

立创EDA实战:基于NE555的夜间氛围呼吸灯电路设计与模式切换

本文详细介绍了使用立创EDA设计基于NE555芯片的夜间氛围呼吸灯电路。项目核心是利用NE555产生PWM信号,并通过RC充放电电路实现LED亮度的缓慢周期性变化,形成呼吸效果。文章手把手教学,涵盖从电路原理分析、元件参数计算,到在立创EDA中进行原理图绘制、PCB布局布线,直至焊接调试的完整硬件设计流程,是电子爱好者入门实战的经典项目。

weixin_42153793的博客 125

【Kubernetes】Pod无法访问Service域名问题排查

部署过多套k8s集群,发现在其中一套k8s环境中,在Pod内无法访问,访问了很多次,偶尔又能通,使用Service的IP能正常访问,域名解析的问题基本确定与CoreDNS有关系,于是开始了一系列的排查之路。

Java技术栈,分享不断学习、不断超越、不断积累的历程! 2083

点餐系统数据库设计--SQL Server

友情链接 1、学生成绩管理系统数据库设计–MySQL 学生成绩管理系统数据库设计–MySQL 2、医疗信息管理系统数据库–MySQL 医疗信息管理系统数据库–MySQL 3、邮件管理数据库设计–MySQL 邮件管理数据库设计–MySQL 4、SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database) SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database) 5

若如初见 8万+

k8s hostNetwork 网络的 pod 无法解析 service 排查

背景 公司内大部分 pod 因为特殊环境使用的 host 网络,最近无意中发现,有一个 pod 无法解析 k8s 的 service,于是展开了后面的排查 排查步骤 查阅百度发现文章都是一群人一个抄一个,句句不在点子上,如 ...

甄能忽悠的博客 3741

(第七章)FAST开发方法

摘要: FAST是一种轻量级、业务驱动的系统分析与开发框架,适用于中小型项目,强调快速交付和组件化开发。其核心包括8个阶段:范围定义、问题分析、需求分析、逻辑设计、决策分析、物理设计、构造测试和安装发布。特点为结构化、用户参与、迭代渐进,适合需求明确且需快速交付的项目。与RUP(重量级)、敏捷(极轻量)相比,FAST更侧重业务分析和模块化开发。软考中可通过口诀“范围问题求逻辑,决策物理构发布”记忆阶段,并掌握五大开发方法(瀑布、原型、FAST、RUP、敏捷)的核心区别及适用场景。

echo的博客 915

Qlib:微软开源的AI量化投资平台 极简入门快速上手教程:使用 Qlib 进行中芯国际股价回测和预测

Qlib是由微软开源的面向AI量化投资的工具包。它提供了构建量化投资模型所需的基础设施,旨在帮助研究者和从业人员更高效地进行量化研究和策略开发。

AI天才研究院 5411

Service 无法访问后端 Pod,如何逐步定位问题

Service 无法访问后端 Pod,如何逐步定位问题?

bltyu2000的博客 1323

C# MES通信从入门到精通(10)——C#使用HTTP的Post和Get方法和Mes系统通信

本文详细介绍了如何利用C#完成与HTTP协议的MES系统进行通信,通过POST和GET方法实现与MES系统的交互,由高级工程师的实战经验总结,实属C#与MES通信领域的葵花宝典!

qq_34059233的博客 3413

记录一次k8s pod之间ip无法访问,问题排查与定位

node之间通信正常部分node上的pod无法通信。

忙碌的吴小二博客 1284

树莓派 5 AI 套件(Hailo)示例

该用户自定义类作为输入传递给回调函数,该函数在管道输出上运行。它用于主程序与回调函数之间的通信。它对 hailo_rpi_common::app_callback_class 进行了扩展,并可根据应用程序的具体情况定制附加变量和方法。

机器人控制与仿真应用 4115

OV5645摄像头原理图设计,已量产

在嵌入式视觉项目里,摄像头小板真正决定量产稳定性的,往往不是把传感器接出来这件事本身,而是电源域有没有拆清、参考时钟够不够干净、主板调试时有没有留出可落地的接口。ATK-MC5645 这张原理图的价值,就在于它没有把 OV5645 裸接到一排连接器上,而是把 AFVDD_2V8、DOVDD_1V8、DVDD_1V5、24MHz 时钟和 MIPI/控制信号都收敛在一块独立模组上。

不脱发的程序猿 330
上一篇: 推荐一个Go包:singleflight使用以及原理
下一篇: postgres入门
学点程序
博客等级 码龄12年 64粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值