K8S kube-proxy- iptable模式实现原理分析
每台机器上都运行一个kube-proxy服务,它监听api-server 和endpoint变化情况,维护service和pod之间的一对多的关系,通过iptable或者ipvs为服务提供负载均衡的能力。通常kube-proxy作为deemonset运行在各种节点中。
kube-proxy 常支持以下二种:
1)iptables:iptable模式是目前的默认模式,可以看成是userspace模式的升级版,它将请求的代理转发规则全部写入iptable中,砍掉了kube-proxy转发的部分。整个过程全部发生在内核空间,提高了转发性能。但是,iptable的规则是基于链表实现的,规则数量随着Service数量的增加线性增加,查找时间复杂度为O(n)。当Service数量到达一定量级时,CPU消耗和延迟增加显著
2)ipvs:ipvs模式是基于章文嵩博士开发的LVS实现的,ipvs和iptables都是基于内核的netfilter框架实现的,不同的是iptable主攻防火墙,ipvs主攻内核态4层负载均衡。可以说先天上,ipvs就比iptable更适合做Service的实现。
下面重点说下iptables,下图是网上看到的一张图作为理解。
iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter。
netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。
iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。
netfilter 包括 5个hook(prerouting,input,foeward,output,poostrouting) 函数 和 4张表(filter, net,mangle, row).
filter表:负责过滤功能,防火墙;内核模块:iptables_filter
nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
raw表:关闭nat表上启用的连接追踪机制;iptable_raw
下图是hook函数和各个表的对应关系,黄色代表的链式关系。
上图简单说明下,一个请求首先会进入prorouting,prorouting没有过滤的功能,会判断这个请求是流向,是外部还是内部的,如果是外部请求就会直接forward出去,如果是内部的请求就会走到input,然后到达应用层处理后会经过outoput 然后再发出去。中间会经过一系列的过滤规则,有一条不符合就会,reject或者drop掉。
通常使用来查看本机table名为TABLE_NAME的iptable规则
iptables -t TABLE_NAME -vnL
比如查看filter 表的规则信息,下图展示了input和forward规则信息。
- pkts:处理过的匹配的报文数量
- bytes:累计处理的报文大小(字节数)
- target:如果报文与规则匹配,指定目标就会被执行。
- prot:协议,例如
tdp
、udp
、icmp
和all
。 - opt:很少使用,这一列用于显示 IP 选项。
- in:入站网卡。
- out:出站网卡。
- source:流量的源 IP 地址或子网,后者是
anywhere
。 - destination:流量的目的地 IP 地址或子网,或者是
anywhere
。
还有一列没有表头,显示在最后,表示规则的选项,作为规则的扩展匹配条件,用来补充前面的几列中的配置。prot
、opt
、in
、out
、source
和 destination
和显示在 destination
后面的没有表头的一列扩展条件共同组成匹配规则。当流量匹配这些规则后就会执行 target
。
分析iptables:
上图展示k8s集群中nginx服务,cluster -ip 是 10.1.125.152.对主机暴露了30978端口,对应了二个后端pod分别是10.244.0.10,10.244.0.9。
1.iptables -t nat -L KUBE-SERVICES |egrep 'nginx'
可以看到来自cluster -ip为 10.1.125.152的流量都会转发到KUBE-SVC-27XJ54RMCFYE2CYL 链上处理,接下来看下KUBE-SVC-27XJ54RMCFYE2CYL上的规则。
2. iptables -t nat -L KUBE-SVC-27XJ54RMCFYE2CYL
可以看到 KUBE-SVC-27XJ54RMCFYE2CYL 有二条规则,第一条是50%的概率到KUBE-SEP-VSD6RSQTLEBJCSMF上,匹配不到就会落到下面的那条规则。
3.查看那边50%的概率到KUBE-SEP-VSD6RSQTLEBJCSMF。iptables -t nat -L KUBE-SEP-VSD6RSQTLEBJCSMF
可以清晰看到上面的规则就会路由到一个pod上了。另一个也是一样的规则只不过路由到另外一个pod上了,如下图:
完!
K8S kube-proxy- iptable模式实现原理分析相关推荐
- Android深色模式适配原理分析,android应用开发
return when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { Configuration.UI ...
- MT4跟单系统的运行环境、模式与原理分析
1.跟单系统属于线上系统,脱离网络就无法跟单. 2.跟单系统属于资源消耗性系统,每个帐号都需要与服务器保持长连接(24小时保持连接状态),需要实时接收与传递交易信号或信息数据. 因此每个跟单帐号和喊单 ...
- Android10.0 Binder通信原理(十)-AIDL原理分析-Proxy-Stub设计模式
1.概述 上一节我们写了一个AIDL的示例,实现了两个应用之间的通信,这一节我们就来一起探讨下AIDL是如何生效的. 2.什么是AIDL AIDL:Android Interface Definiti ...
- K8S kube-proxy iptables 原理分析
Precondition 什么是 Kube Proxy Kube Proxy 原理 部署环境 搭建一个GuestBook 例子 分析iptables 1. 创建iptables实现外网通过nodePo ...
- K8S kube-proxy ipvs 原理分析
1 在k8s 设置ipvs模式 1.1 Perquisites 1.2 修改kube-proxy 启动参数 2 ipvs kube-proxy原理分析 2.1 集群内部发送出去的packet通过clu ...
- k8s组件说明:kubelet 和 kube proxy
k8s的node节点需要安装三个组件:docker/kubelet/kube proxy pod是存储容器的容器,但容器不止docker一种. CRI:container runtime interf ...
- 【设计模式系列19】状态模式原理分析及其和策略模式,责任链模式的区别
状态模式原理分析 设计模式系列总览 前言 什么是状态模式 状态模式示例 状态模式角色 状态模式与责任链模式 状态模式与策略模式 状态模式应用场景 状态模式优缺点 总结 设计模式系列总览 设计模式 飞机 ...
- Java基础之02 动态代理模式172 173 类加载器原理分析
动态代理 所谓动态代理,即通过代理类:Proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联. java动态代理主要是使用java.lang.reflect ...
- web压测工具http_load原理分析
一.前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load: http://www.acme.com/software/http_load/ ...
最新文章
- iphone 一些小游戏.
- oracle存储过程调用游标例子
- 【转载】WINCE物理和虚拟地址的问题
- 在网页中直接显示office文档,
- java web微服务是什么_java微服务是什么
- python创建线程
- 设计模式学习笔记——单例(Singleton)模式
- mono linux 运行机制,linux – Mono如何神奇?
- qt web混合编程_VS2017+QT 混合编程-在VS控制台程序配置QT
- MapXtreme2004 连接oracle spatial的问题
- 【bzoj 3531】 [Sdoi2014]旅行(树链剖分+树套树)
- JavaScript练习
- html前端论文参考文献,web前端论文参考文献
- 大地测量学基础 (复习)
- stm32f412新工程配置的记录
- list保存到scv
- 《微观经济学》摘要笔记
- unity 模拟水下场景 水下冒泡
- 机器学习基石2-Learning to Answer Yes-No
- 问题 D: 上帝视角