热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

K8Skubeproxyiptable模式实现原理分析

每台机器上都运行一个kube-proxy服务,它监听api-server和endpoint变化情况,维护service和pod之间的一对多的关系

   每台机器上都运行一个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:协议,例如 tdpudpicmp 和 all
  • opt:很少使用,这一列用于显示 IP 选项。
  • in:入站网卡。
  • out:出站网卡。
  • source:流量的源 IP 地址或子网,后者是 anywhere
  • destination:流量的目的地 IP 地址或子网,或者是 anywhere

还有一列没有表头,显示在最后,表示规则的选项,作为规则的扩展匹配条件,用来补充前面的几列中的配置。protoptinoutsource 和 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上了,如下图:

完! 


推荐阅读
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • 负载均衡基础概念与技术解析
    随着互联网应用的不断扩展,用户流量激增,业务复杂度显著提升,单一服务器已难以应对日益增长的负载需求。负载均衡技术应运而生,通过将请求合理分配到多个服务器,有效提高系统的可用性和响应速度。本文将深入探讨负载均衡的基本概念和技术原理,分析其在现代互联网架构中的重要性及应用场景。 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • 在探讨设计模式六大原则之二——里氏替换原则时,许多初学者可能会对其名称感到困惑。实际上,这一原则强调的是子类应当能够完全替代其基类,而不会影响程序的正确性。通过深入解析这一原则,我们可以更好地理解其在面向对象设计中的重要性和应用方法。本文将详细探讨里氏替换原则的理论基础及其在实际开发中的具体实践,帮助读者掌握这一关键设计模式原则。 ... [详细]
  • Panabit应用层流量管理解决方案
    Panabit是一款国内领先的应用层流量管理解决方案,提供高度开放且免费的专业服务,尤其擅长P2P应用的精准识别与高效控制。截至2009年3月25日,该系统已实现对多种网络应用的全面支持,有效提升了网络资源的利用效率和安全性。 ... [详细]
  • 深入了解 Azure Standard Load Balancer 的核心功能与应用场景
        Azure的负载均衡器就不需要多说了,属于很基础的组件了,各个云的LB功能其实也不太一样,Azure的4层LB属于相对来说功能比较基础的,不过好处是这东西也不要钱,不过Az ... [详细]
  • 最近在看GitHub上的一个很火的项目是:ImageSharp。这是一个纯.netcore的图像处理库,没有使用其他的任何依赖。在看这个项目过程中激发了我对图像文件编码解码的兴趣。 ... [详细]
  • 开发笔记:Webpack5 搭建 Vue3 + TS 项目
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Webpack5搭建Vue3+TS项目相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Nginxgaodaima.comnginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司 ... [详细]
author-avatar
无限的天空-空间
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有