Kubernetes网络的iptables模式和ipvs模式支持ping分析
1.iptables模式无法ping通原因分析
iptables模式下,无法ping通任何svc,包括clusterip.所有ns下,下面来分析原因:
查看kubernetes的网络模式
curl 127.0.0.1:10249/proxyMode
[root@k8s-master01 ~]# curl 127.0.0.1:10249/proxyMode
iptables
可以看到当前我的网络模式是 iptables
那么当应用程序通过服务连接到另一个应用程序时,将发生以下事件:
1.应用程序使用集群DNS将服务名称解析为ClusterIP(虚拟IP)和端口 例如将:redis.elk:6379 解析为 10.0.0.144:6379
2.应用程序将连接请求发送给特定端口(10.0.0.144:6379)ClusterIP
3.由于ClusterIP位于没有路由的特殊网络上,因此请求将转到默认网关
4.请求发送到集群节点的默认网关时,由节点内核处理
5.将所有集群节点配置为,捕获服务正在使用的端口6379上进入ClusterIP地址的请求
6.trap导致数据包头被重写,以便将请求重定向到特定的Pod
7.Pod接收流量并服务请求
问题在于,当请求前往svc服务中定义的端口上的ClusterIP时,才会发生trap。无法将ping流量发送到特定端口,因此永远不会发生trap。
Why?
因为ping基于ICMP ,ICMP不能在TCP/UDP上运行,因此没有TCP/UDP端口的概念。因此,无法在配置为侦听和trap的服务的端口上使用ping。
为什么nc 探测是成功的?
nc 默认是基于tcp, nc -u 是基于udp 所以他探测的协议是tcp/udp 所以是可以探测成功的。
为什么开发语言同样可以连接成功?
因为开发语言是通过(研发可以控制)TCP协议形式的Socket连接。
2.为什么iptables模式下无法ping通svc? 而ipvs模式可以?
来查看下iptables模式下kube-proxy的iptables转发规则
查看filter:

iptable默认策略为拒绝任何icmp端口,除非你手动打开让其支持icmp协议才可以ping通。
而IPVS的ICMP报文处理-由外到内,默认是支持的,所以可以ping通,具体见以下链接: IPVS的ICMP报文处理-由内到外
3.小结
iptables:clusterIP只是iptables中的规则,只会处理ip:port四层数据包,reject了icmp。不能 ping通。
IPVS:ipvs依赖iptables进行包过滤、SNAT、masquared(伪装)。 使用 ipset 来存储需要 DROP 或 masquared 的流量的源或目标地址,以确保 iptables 规则的数量是恒定的,这样我们就不需要关心我们有多少服务了
二者有着本质的差别:iptables是为防火墙而设计的;IPVS则专门用于高性能负载均衡,并使用更高效的数据结构(Hash表),允许几乎无限的规模扩张。
转载:http://www.yoyoask.com/?p=4742
Kubernetes网络的iptables模式和ipvs模式支持ping分析的更多相关文章
- kube-proxy IPVS 模式的工作原理
原文链接:https://fuckcloudnative.io/posts/ipvs-how-kubernetes-services-direct-traffic-to-pods/ Kubernete ...
- [k8s]k8s 1.9(on the fly搭建) 1.9_cni-flannel部署排错 ipvs模式
角色 节点名 节点ip master n1 192.168.14.11 节点1 n2 192.168.14.12 节点2 n3 192.168.14.13 https://raw.githubuser ...
- [Linux网络、命名空间、veth设备对、docker的host模式、container模式、none模式、brideg模式、网桥的增删查,容器与网桥的连接断开]
[Linux网络.命名空间.veth设备对.docker的host模式.container模式.none模式.brideg模式.网桥的增删查,容器与网桥的连接断开] 网络名称空间 为了支持网络协议栈的 ...
- Linux网络编程1——小端模式与大端模式
数据存储优先顺序的转换 计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式).内存的低地址存储数据的低字节,高地址存储数据的高字节的方式叫小端模式.内存的高地址 ...
- 大端模式&小端模式、主机序&网络序、入栈地址高低问题
一.大端模式&小端模式 所谓的“大端模式”,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处 ...
- Linux下NAT模式和桥接模式的网络配置
Linux下NAT模式和桥接模式的网络配置 最近在配置linux虚拟机的时候发现有很多坑,现在记录下来以防日后又跳到坑里. 我的运行环境是:主机 windows 7 虚拟机 Virtualb ...
- VMware网络连接模式——桥接模式、NAT模式以及仅主机模式的介绍和区别
在使用VMware Workstation(以下简称:VMware)创建虚拟机的过程中,配置虚拟机的网络连接是非常重要的一环,当我们为虚拟机配置网络连接时,我们可以看到如下图所示的几种网络连接模式:桥 ...
- 虚拟机网络连接模式中桥接模式和NAT模式的区别
1.桥接模式:当虚拟机系统的网络连接模式为桥接模式时,相当于在主机系统和虚拟机系统之间连接了一个网桥,而网桥两端的网络都属于同一网络,主机和虚拟机是处于同一网络中的对等主机. 实例,在使用Xshell ...
- VMware虚拟机上网络连接模式bridged(桥接模式)
VMware虚拟机上网络连接模式bridged(桥接模式)的实质就是虚拟机本身利用主机的网卡对外直接作为一个真实的物理主机存在. 也就是理论上此时的虚拟机和主机没什么关系,只是和主机公用了一块网卡,其 ...
随机推荐
- Linux 面试总结
1. 统计指定目录的文件个数: find / -type f | wc –l 2.Linux 下常用目录 /boot:这个目录是用来存放与系统启动相关的文件/root:root用户的家目录/bin:存 ...
- ES6学习-4 解构赋值(1)数组的解构赋值
解构赋值是ES6很大的一个提升,为我们带来了很多方便,但用不好,会使程序的可读性变差,所以用时要注意,尽量保持程序的易读性. 数组解构赋值 在JS没有支持解构赋值之前,我们声明几个变量并赋值通常都是像 ...
- 从零搭建springboot服务03-redis消息订阅
愿历尽千帆,归来仍是少年 1.所需依赖 <!-- Redis依赖 --> <dependency> <groupId>org.springframework.boo ...
- CentOS7启动SSH服务报:Job for ssh.service failed because the control process exited with error code
CentOS7启动SSH服务报:Job for ssh.service failed because the control process exited with error code....... ...
- 在/etc/profile下配置java的环境变量
在/etc/profile下配置java的环境变量 原创 Java 作者:xiaoyan5686670 时间:2016-01-18 14:30:28 6152 0 以root用户编辑:#vi /e ...
- 转载 https://www.cnblogs.com/bobo-pcb/p/11708459.html
https://www.cnblogs.com/bobo-pcb/p/11708459.html #### 1 用VMware 15.0+win10企业版 1次安装成功 20200124 2 不要用v ...
- 10.10 traceroute:追踪数据传输路由状况
traceroute命令 用于显示网络数据包传输到指定主机的路径信息,追踪数据传输路由状况.默认数据包大小是60字节(IPv4)或80字节(IPv6),用户可另行设置.它与Windows下的trace ...
- 10.20 host:域名查询工具
host命令 是用于查询DNS的工具,它可以将指定主机名称转换为IP地址. host命令的参数选项及说明 -a 显示详细的DNS信息-t 指定查询的域名信息类型,可以是"A".&q ...
- ResNet-50模型图像分类示例
ResNet-50模型图像分类示例 概述 计算机视觉是当前深度学习研究最广泛.落地最成熟的技术领域,在手机拍照.智能安防.自动驾驶等场景有广泛应用.从2012年AlexNet在ImageNet比赛夺冠 ...
- TensorFlow简单线性回归
TensorFlow简单线性回归 将针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价. 波士顿房价数据集可从http://lib.stat.cmu.e ...