剖析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;找不到文件路…

ChatGPT科研应用、论文写作、课题申报、数据分析与AI绘图

随着人工智能技术的飞速发展&#xff0c;ChatGPT等先进语言模型正深刻改变着科研工作的面貌。从科研灵感的激发、论文的高效撰写&#xff0c;到课题的成功申报&#xff0c;乃至复杂数据的深度分析与可视化呈现&#xff0c;AI技术均展现出前所未有的潜力。其实众多科研前沿工作者…

现代应用程序中基于 Cell 架构的安全防护之道

在飞速发展的软件开发领域&#xff0c;基于 Cell 的架构日益流行起来。其概念源自船舶舱壁的设计准则&#xff0c;即单独的水密舱室能允许故障孤立存在。通过将这个概念应用于软件&#xff0c;我们创建了一个架构&#xff0c;将应用程序划分为离散的、可管理的组件&#xff0c;…

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

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

vscode远程连接ssh

一. 使用vscode里的ssh查件连不上远程的解决方法 删除Windows上的known_host文件&#xff0c;该文件会在连接之后自动生成&#xff0c;用于验证远程服务器的身份。 konwn_host和id_rsa&#xff0c;id_rsa.pub的关系 &#xff08;1&#xff09;konwn_host用于客户端验证远程服务…

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.需要快…

计算机软件著作权常用的开发运行环境撰写教程

在申请计算机软件著作权登记时,开发运行环境的描述是必不可少的部分。明确、准确地阐述开发和运行环境,有助于著作权的审查以及软件后续使用。本文将提供10种常见参考写法,供开发者在填写软件开发环境和运行环境信息时参考。 一、通用示例 1 开发的硬件环境: 处理器:Int…

IS-IS的原理

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

洛谷二分题

P1024 [NOIP2001 提高组] 一元三次方程求解 题目描述 有形如&#xff1a;&#x1d44e;&#x1d465;3&#x1d44f;&#x1d465;2&#x1d450;&#x1d465;&#x1d451;0ax3bx2cxd0 这样的一个一元三次方程。给出该方程中各项的系数&#xff08;&#x1d44e;,&#x1d44…

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

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

PHP While 循环

PHP While 循环 引言 在PHP编程语言中,while循环是一种基本且强大的控制结构,用于重复执行一段代码,直到给定的条件不再满足。这种循环结构在处理迭代任务、读取数据集以及执行重复性操作时非常有用。本文将详细介绍PHP中的while循环,包括其语法、工作原理、使用场景以及…

MyBatis框架-日志配置

MyBatis框架的日志配置 MyBatis作为一个封装好的ORM框架&#xff0c;其运行过程我们没有办法跟踪&#xff0c;为了让开发者MyBatis执行流程及执行步骤所完成的工作&#xff0c;MyBatis框架本身支持log4j日志框架&#xff0c;对运行的过程进行跟踪记录。我们只需对MyBatis进行相…

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繁杂的过程代码 。…

codeforces1814A

文章目录 一、题目链接二、题目代码三、题目总结 一、题目链接 A. Coins 二、题目代码 参看了这个博客的代码 下面这个代码是我自己写的&#xff0c;有问题。 #include<iostream> using namespace std;int main(){int testCase;cin >> testCase;while(testCase--){…

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/…