剖析kubernetes service的IP能否在宿主机中ping通


文章目录

  • 前言
  • 一、serviceIP是怎么产生的
  • 二、宿主机中ping serviceIP地址
    • 1.ping示例
    • 2.为什么ping不通剖析
      • 2.1.封装及解封装过程
      • 2.2.ICMP报文以太网数据帧格式
      • 2.3.原因
  • 三、ping不通svcIP是否跟iptables规则有关?
  • 四、为什么ipvs的的clusterIP类型的service能够ping通?


前言

当kubernetes的kube-proxy组件使用iptables模式时,已经创建好的service产生的ip是否能在宿主机中ping通?这也算是初级k8s面试中常问到的一个问题,因此本篇文章就针对该问题进行剖析,看是否能ping通?以及ping不通的原因是什么进行探索。


一、serviceIP是怎么产生的

确认kube-proxy使用的工作模式w为iptables
在这里插入图片描述

[root@xmhl-std24 ~]# curl 127.0.0.1:10249/proxyMode
iptables

service 示例
在这里插入图片描述
service ip的产生方式
在这里插入图片描述
service-cluster-ip-range=10.96.0.0/12表明了service ip地址的范围起始 10.96.0.1--10.111.255.254

二、宿主机中ping serviceIP地址

1.ping示例

以上述第一张截图中的svc ip地址为例进行ping测试,发现ping没返回值,ping不通
在这里插入图片描述

2.为什么ping不通剖析

先温习以下TCP/IP四层协议
在这里插入图片描述

由上图可知ICMP 是网络层协议,但是它不像 IP 协议和 ARP 协议一样直接传递给数据链路层,
而是先封装成 IP 数据包然后再传递给数据链路层。所以在 IP 数据包中如果协议类型字段的值是 1 的话,就表示 IP 数据是 ICMP 报文。
IP 数据包就是靠这个协议类型字段来区分不同的数据包的。

2.1.封装及解封装过程

在这里插入图片描述

2.2.ICMP报文以太网数据帧格式

在这里插入图片描述
在这里插入图片描述

2.3.原因

如上两张图,icmp协议用于探测两台主机之间是否能够通信
而icmp是位于网络层的协议,网络层下还有数据链路层【mac地址在这一层进行封装】主机在接收到一个icmp的【Echo request】请求时
必须回复一个 【Echo replay】才能确认两个主机之间能够通信, 但是在回复 【Echo replay】之前,主机会确认请求中的ip是否是自己
以及Mac地址是否是自己的。然而虚拟IP是没有mac地址的,所有这个数据被直接丢弃了。

三、ping不通svcIP是否跟iptables规则有关?

背景: k8s版本1.18,kube-proxy使用的是iptables模式 ;service是cluster/NodePort类型
在这里插入图片描述

结论: 这个说法是错误的,与iptables规则没有关系。请看下面的示例分析

剖析过程
在这里插入图片描述

1、当在宿主机master对svc ip发起ping请求时,根据上图所示,首先进入的是NAT表中的PREROUTING链,查看该链
[root@xxx ~]# iptables -nv -t nat -L PREROUTING
Chain PREROUTING (policy ACCEPT 3757 packets, 259K bytes)pkts bytes target     prot opt in     out     source               destination         219M   15G KUBE-SERVICES  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */116M 8303M DOCKER     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL
2、查看k8下svc的自定义链KUBE-SERVICES
[root@xxx ~]# iptables -nv -t nat -L KUBE-SERVICES |grep '10.106.217.166'0     0 KUBE-SVC-VN4GKQXOG5WZADQZ  tcp  --  *      *       0.0.0.0/0            10.106.217.166       /* default/kube-controller-manager:https cluster IP */ tcp dpt:10257
3、查看该svc 对应KUBE-SERVICES链下的规则
[root@xxx ~]# iptables -nv -t nat -L KUBE-SVC-VN4GKQXOG5WZADQZ
Chain KUBE-SVC-VN4GKQXOG5WZADQZ (1 references)pkts bytes target     prot opt in     out     source               destination         0     0 KUBE-SEP-TJB7QBJQQRG5Z5OE  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* default/kube-controller-manager:https */ statistic mode random probability 0.333333333490     0 KUBE-SEP-MP3K7DO6P2Y6F4TD  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* default/kube-controller-manager:https */ statistic mode random probability 0.500000000000     0 KUBE-SEP-2LOQ54ZVXRADQ4ZA  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* default/kube-controller-manager:https */
4、查看其中任意一条规则
[root@xxx ~]# iptables -nv -t nat -L KUBE-SEP-TJB7QBJQQRG5Z5OE
Chain KUBE-SEP-TJB7QBJQQRG5Z5OE (1 references)pkts bytes target     prot opt in     out     source               destination         0     0 KUBE-MARK-MASQ  all  --  *      *       10.241.243.202       0.0.0.0/0            /* default/kube-controller-manager:https */0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* default/kube-controller-manager:https */ tcp to:10.241.243.202:10257

如上所示,iptables并没有拒绝icmp协议的数据包,只针对该service的tcp协议做了流量转发,并没有对icmp协议进行额外处理,因此与iptables规则无关.

四、为什么ipvs的的clusterIP类型的service能够ping通?

如下所示

[root@xxx ~]# ip a|grep ipvs0
11: ipvs0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000link/ether ce:8b:5d:28:59:28 brd ff:ff:ff:ff:ff:ffinet 10.107.3.175/22 scope global ipvs0valid_lft forever preferred_lft foreverinet6 fe80::cc8b:5dff:fe28:5928/64 scope link valid_lft forever preferred_lft forever

因为ipvs将所有的clusterIP都设置在了一个kube-ipvs0的网卡上不再是虚拟IP,这个ipvs既有实际的ip地址,还有对应的mac地址,同时也符合icmp协议的封包过程


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目部署到github pages后页面显示不出来??

问题&#xff1a; 当我们在命令行执行 npm run build 后&#xff0c;项目的目录下会生成一个 dist 文件夹&#xff0c;它里面又包含一个 static 文件夹和一个 index.html 文件&#xff0c;这是 webpack 最终打包好的文件 项目上传到仓库后发现页面为空&#xff0c;找不到文件路…

ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本)

ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本) code review! 参考笔记 1.ROS基本框架1——编写简单的发布者和订阅者(C++和Python版本) 2.ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本) 文章目录 ROS基本框架2——在ROS开发中创建并使用自定义…

ccf A 类与sci 一区那个比较难? + 论文常识

论文常识&#xff1a; ESI 基本科学指标数据库(EssentialScience Indicators ) 高被引论文&#xff08;Highly Cited Paper&#xff09;&#xff1a;根据同一年同一ESI学科统计最近10年发表论文中被引用次数进入世界前1%的论文&#xff1b;在硕士论文中文献综述是作为论文的理…

异步处理优化:多线程线程池与消息队列的选择与应用

目录 一、异步处理方式引入 &#xff08;一&#xff09;异步业务识别 &#xff08;二&#xff09;明确异步处理方式 二、多线程线程池&#xff08;Thread Pool&#xff09; &#xff08;一&#xff09;工作原理 &#xff08;二&#xff09;直面优缺点和适用场景 1.需要快…

IS-IS的原理

IS-IS的基本概念&#xff1a; 概述&#xff1a; IS-IS&#xff0c;中间系统到中间系统&#xff0c;是ISO国际标准化组织为它的无连接网络协议设计的一种动态路由协议 IS-IS支持CLNP网络和IP网络&#xff0c;采用数据链路层封装&#xff0c;区别于ospf只支持IP网络&#xff0…

代理ip工具在网络安全中的作用是什么

代理IP工具在网络安全中扮演着至关重要的角色&#xff0c;它们不仅能够帮助用户保护隐私&#xff0c;还能提高网络性能&#xff0c;增强安全性。本文将深入探讨代理IP工具的定义、工作原理以及在网络安全中的具体应用&#xff0c;旨在为读者提供全面的理解和指导。 一、代理IP工…

IDEA 2024 配置Maven

Step 1:确定下载Apache Maven版本 在IDEA 2024中&#xff0c;随便新建一个Maven项目&#xff1b; 在File下拉菜单栏中&#xff0c;找到Setings&#xff1b; 在Build&#xff0c;Execution&#xff0c;Deployment中找到Maven 确定下载的Apache Maven版本应略低于或等于IDEA绑…

107.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…

MySQL笔记-启动时log报错Table ‘mysql.user‘ doesn‘t exist

安装好mysql后&#xff0c;正常使用&#xff08;使用的是rpm版安装的&#xff09; service mysqld start | stop | restart 不会出现这个问题。 我遇到的情况是在凝思操作系统上&#xff0c;已经存在了一个mysql。网上查找了一些资料&#xff0c;卸载&#xff0c;后可能卸载…

Mybatis 复习

1 什么是MyBatis MyBatis是一个优秀的持久层框架&#xff0c;它对JDBC操作数据库的过程进行封装&#xff0c;使开发者只需要关注 SQL 本身&#xff0c;而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、 结果集检索等JDBC繁杂的过程代码 。…

HNTS-MRG 2024 Challenge:是一个包含200个头颈癌病例的磁共振图像及其标注的公开数据集,旨在推动AI在头颈癌放射治疗自动分割领域的研究。

2024-11-28,由德克萨斯大学MD安德森癌症中心创建HNTS-MRG 2024 Challenge数据集&#xff0c;目的通过公开数据集推动自动分割算法的发展&#xff0c;这对于提高放射治疗的精确性和效率具有重要意义。 数据集地址&#xff1a;HNTS-MRG 2024|癌症放射治疗数据集|医学影像分析数据…

【python】OpenCV—Tracking(10.5)—dlib

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数dlib.correlation_tracker() 6、参考 1、功能描述 基于 dlib 库&#xff0c;实现指定类别的目标检测和单目标跟踪 2、代码实现 caffe 模型 https://github.com/MediosZ/MobileNet-SSD/tree/master/…

探索温度计的数字化设计:一个可视化温度数据的Web图表案例

随着科技的发展&#xff0c;数据可视化在各个领域中的应用越来越广泛。在温度监控和展示方面&#xff0c;传统的温度计已逐渐被数字化温度计所取代。本文将介绍一个使用Echarts库创建的温度计Web图表&#xff0c;该图表通过动态数据可视化展示了温度值&#xff0c;并通过渐变色…

20241128解决Ubuntu20.04安装libwxgtk3.0-dev异常的问题

20241128解决Ubuntu20.04安装libwxgtk3.0-dev异常的问题 2024/11/28 16:17 缘起&#xff1a;中科创达的高通CM6125开发板的Android10的编译环境需要。 安装异常&#xff1a;rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ sudo apt-get install libwxgtk3.0-de…

大疆T100大载重吊运植保无人机技术详解

大疆T100作为一款大载重吊运植保无人机&#xff0c;融合了全新的AI和AR功能&#xff0c;旨在进一步提升安全性并满足喷洒、播撒、吊运等多种作业场景的需求。以下是对其技术的详细解析&#xff1a; 一、总体性能 最大起飞重量&#xff1a;149.9公斤 喷洒容量&#xff1a;75升…

arkTS:使用ArkUI实现用户信息的持久化管理与自动填充(PersistentStorage)

arkUI&#xff1a;使用ArkUI实现用户信息的持久化管理与自动填充&#xff08;PersistentStorage&#xff09; 1 主要内容说明2 例子2.1 登录页2.1.1登陆页的相关说明2.1.1.1 持久化存储的初始化2.1.1.2 输入框2.1.1.3 记住密码选项2.1.1.4 登录按钮的逻辑2.1.1.5 注册跳转 2.1.…

腾讯云 AI 代码助手:单元测试应用实践

引言 在软件开发这一充满创造性的领域中&#xff0c;开发人员不仅要构建功能强大的软件&#xff0c;还要确保这些软件的稳定性和可靠性。然而&#xff0c;开发过程中并非所有任务都能激发创造力&#xff0c;有些甚至是重复且乏味的。其中&#xff0c;编写单元测试无疑是最令人…

1、Three.js开端准备环境

准备工作 从 CDN 导入 1.安装 VSCode 2.安装 Node.js 3.查看Three.js最新版本 4.如何cdn引入&#xff1a; https://cdn.jsdelivr.net/npm/threev版本号/build/three.module.js 例如&#xff1a;https://cdn.jsdelivr.net/npm/threev0.170.0/build/three.module.js 我们需要…

Python毕业设计选题:基于django+vue的校园影院售票系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 影院信息管理 电影类型管理 电影信息管理 系统…

初窥 HTTP 缓存

引言 对于前端来说, 你肯定听说过 HTTP 缓存。 当然不管你知不知道它, 对于提高网站性能和用户体验, 它都扮演着重要的角色! 它通过在客户端和服务器之间存储和重用先前获取的资源副本, 来减少网络流量和降低资源加载时间, 从而提升用户体验! 以下是 HTTP 缓存的重要性: 减少…