42. Kubernetes深入Service-Service代理模式

释放双眼,带上耳机,听听看~!

每创建一个Service都会在匹配到Pod对象的所在节点创建一个iptables或者ipvs规则,也可以说Service就是工作节点上的一些iptables或ipvs规则,主要作用是将到达Service对象Cluster IP地址的流量转发到相应的Endpoints对象的IP地址和端口之上。工作在每个工作节点上的kube-proxy组件通过API Server持续监控着各Service及与Service关联的Pod对象,如果kube-proxy监控到Service与关联的Pod发生来变化,则在当前工作节点生成相应的iptables和ipvs规则。整个流程如下图所示:

kube-proxy监听API Server上的Service及与Service所关联Pod对象的变动,如果有变动则在当前节点生成相应的iptables或ipvs规则,那么kube-proxy将请求代理至后端端点的方式有三种:userspace(用户空间)iptablesipvs

userspace 代理模型

这里的userspace是指Linux操作系统的用户空间,这种模型中,kube-proxy负责跟踪API Server上Service和Endpoints对象的变动(创建或移除),并根据次调整Service资源的定义,对于每个Service对象,它会随机打开一个本地端口(运行与用户空间的kube-proxy进程负责监听),任何到达此代理端口的连接请求都将被代理转发到当前Service所关联的后端Pod对象之上,至于会转发至后端的哪个Pod,这将取决于当前Service资源的调度方式,默认的调度算法是轮询(round-robin),其工作原理如下图,另外此类的Service对象还会创建iptables规则来抓取任何到达CLuster IP和端口的流量,在Kubernetes 1.1版本之前,userspace是默认的代理模型。

这种代理模型中,请求流量到达内核空间由套接字送到用户空间的kube-proxy,然后子由套接字送会内核空间,并调度到后端Pod,这种方式中,请求在内核空间和用户空间来回转发效率必然不是很高。

iptables 代理模型

iptables与userspace代理模型类似,iptables代理模型中,kube-proxy负责跟踪API Server上的Service和Endpoints对象的变动,并根据变动做出iptables的变动,同时对于每个Service,它都会创建iptables规则直接抓取到达Cluster IP和端口的流量,然后将抓取的流量转发到由当前Service所关联的后端Pod,如下图所示:

对于每个Service对象,默认算法是随机调度(random),iptables代理模式由 Kubernetes 1.1 版本引入,1.2版本开始成为默认的类型。
在创建Service资源时,集群中每个节点上的kube-proxy组件都会收到同志并将其定义为当前节点上的iptables规则,用于转发接收到与此Service资源的相关流量,客户端发来的请求被相关的iptables规则进行调度和目标地址转换(DNAT)后再转发到集群内的Pod对象之上。

相对于用户空间模型来说,iptables模型无须将流量在用户空间和内核空间来回切换,因而更加高效和可靠,不过其缺点是iptables代理模型不会在被挑中的后端Pod资源无响应时进行重定向,而userspace模型可以。

ipvs 代理模型

ipvs模型中,kube-proxy跟踪API Server上Service和Endpoints对象的变动,根据变动来调用 netlink 接口创建ipvs规则,并确保API Server中的变动保持同步,它与iptables不同之处在于请求流量的调度功能由ipvs实现,余下的功能全部由iptables完成。

类似于iptables模型,ipvs构建于 netfilter 的钩子函数之上,但它使用hash表作为底层数据结构并工作于内核空间,因此具有流量转发速度快、规则同步性能好的特性,另外,ipvs支持众多调度算法,例如rrlcdhshsednq等。

Netfilter是Linux内核中用于管理网络报文的框架,它具有网络地址转换(NAT)、报文改动和报文过滤等防火墙功能,用户借助于用户空间的iptables等工具可按需自由定制规则使用其各项功能,ipvs是借助于 Netfilter 实现的网络请求报文调度框架,支持 rrlcdhshsednq等十多种调度算法,用户空间的命令行工具是ipvsadm,用于管理工作于ipvs之上的调度规则。

Ops工具

41. Kubernetes深入Service-Service资源介绍

2020-6-22 10:25:15

Ops工具

43. Kubernetes深入Service-Service资源创建

2020-6-22 10:27:39

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索