【独家】K8S漏洞报告 | 近期bug fix解读&1.9.11主要bug fix汇总
*内容提要:
1. Kube-proxy长连接优雅断开机制及IPVS模式实现
2. 10/29--11/19 bug fix汇总分析
3. 1.9.11重要bug fix汇总
在本周的跟踪分析中,以1.11版本为例,共有9条bug fix,其中大部分是集群部署、第三方云提供商、测试相关的内容,与Kubernetes核心内容无关。而有一条Kube-proxy相关的bug fix比较重要,本文会作具体分析。
另外1.9版本已经停止维护,本周开始,将从1.9.11开始,持续更新1.9小版本的重要bug fix及简单分析,敬请关注。
1 bug fix解读
IPVS模式支持优雅删除
背景
IPVS模式是Kube-proxy的代理模式之一,Kube-proxy在1.9开始引入IPVS模式,1.11宣布该特性GA。关于IPVS模式的优势和具体介绍可以查看这篇文章:
基于IPVS的集群内负载均衡深入解读
IPVS模式得益于底层的底层的lvs,拥有高吞吐、低延时等诸多优势,同样也由于底层实现的差异,导致IPVS原生不能支持优雅删除。
Pod的优雅删除在kube-proxy层面是指,当pod删除时,外部与该pod不能创建新的网络链接,但是外部与该pod已经存在的长连接也不会被马上断掉。这样就允许pod内部的容器收到终止信号后主动发送断链请求,实现长连接正常断开。
问题分析
Kube-proxy的iptables和IPVS模式分别通过创建不同的规则实现流量service到后端实例的路由分发,其中iptables模式通过创建iptables规则实现,IPVS模式则是通过创建iptables规则和IPVS规则实现,具体规则创建逻辑可分别参见:
Iptables:https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/iptables/proxier.go#L780-L1318
IPVS: https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/ipvs/proxier.go#L760-L1048
Iptables原生支持链接延时断开,即当iptables规则删除时,新的链接不能建立,已经有的长链接链路也不会被主动删除,因此iptables模式实现优雅删除功能不需要任何的代码,以来底层机制即可。
IPVS却并没有这个机制,删除IPVS规则后长链接也会马上断开。这导致很多原来的应用切换到IPVS模式时不能正常工作。
解决方案
为了解决这个问题,IPVS模式的代码需要有专门的机制处理pod删除到长连接断开,链接被彻底删除这段时间的逻辑,其依赖的逻辑是:
IPVS后端的real server有权重机制,用于高级流量调度。当权重为0时,real server上已有的链接不会被断开,也不会有新的链接被分发过来。
因此解决方案的基本思路是,当pod被删除时,配置其对应的后端real server权重为0,等待到该real server的长连接全部断开之后再将其删除。
具体执行过程又会涉及到,比如real server还没完全删除期间重新添加该real server的问题,已删除service的清理逻辑,系统自带的权重为0的IPVS规则处理。
看具体代码实现,本bug fix添加了一个专门针对IPVS模式的GracefulTerminationManager,对外提供的主要方法如下:
// GracefulDeleteRS用于优雅删除后端,替代原来的DeleteRS
// 该方法检查对应RS的长连接,长连接存在的话则直接删除RS,不存在的话将权重置为0并加入优雅删除队列
func GracefulDeleteRS(vs, rs) error
// InTerminationList用于查看某个rs是否在删除队列中
func InTerminationList(uniqueRS string) bool
// MoveRSOutofGracefulDeleteList将某个RS从优雅删除队列移提前移除
func MoveRSOutofGracefulDeleteList(uniqueRS string) error
// Run创建一个协程,以1min为间隔,周期性检查队列中RS的长连接情况,一旦没有长连接就将其删除并移出队列
func Run()
PR信息
下面是该bug fix的PR号,大家感兴趣的话可以去社区自行查看原始PR,issue信息,了解该bug fix的更多信息。
2 一周bug fix数据分析
本周更新过去两周(10月29号--11月19号)1.11版本的bug fix数据。
在关注的时间段,1.11版本有9条bug fix,其分布情况如图所示:
其中cloud、volume、cluster均为云平台提供商相关,包括gce、azure、vsphere等,test则是社区使用的e2e测试更新,也无需太多关注。Kube-proxy有一条bug fix,即我们上面详细介绍的,该bug fix在1.11和1.12版本均有涉及,大家可以根据自己的需要,在1.11或者1.12的下个小版本及时升级修复。
Bug fix严重程度统计,2及以下的bug fix有8个,但主要是对特定的云平台会产生影响,如果没有使用上述云平台,也不用在意。
3 1.9.11重要bug fix解读
【独家】K8S漏洞报告 | 近期bug fix解读&1.9.11主要bug fix汇总的更多相关文章
- 【独家】K8S漏洞报告|近期bug fix解读&1.11主要bug fix汇总
内容提要: 1. 高危漏洞CVE-2018-1002105深度解读 2. 11/19--12/11 bug fix汇总分析 3. 1.11重要bug fix解读 4. 1.9重要bug fix解读 在 ...
- 【独家】K8S漏洞报告 | 近期bug fix解读
安全漏洞CVE-2019-3874分析 Kubernetes近期重要bug fix分析 Kubernetes v1.13.5 bug fix数据分析 ——本周更新内容 安全漏洞CVE-2019-387 ...
- K8S漏洞报告 | 近期bug fix解读&1.13主要bug fix汇总
K8s近期漏洞详解 Kubernetes仪表盘漏洞(CVE-2018-18264) 因为这一漏洞,用户可以“跳过”登录过程获得仪表盘所使用的自定义TLS证书.如果您已将Kubernetes仪表盘配置为 ...
- 【独家】K8S漏洞报告 | CVE-2019-1002101解读
kubectl cp漏洞CVE-2019-1002101分析 Kube-proxy IPVS添加flag ipvs-strict-arp 近期bug fix数据分析 ——本期更新内容 kubectl ...
- 【代码审计】ESPCMSP8(易思企业建站管理系统)漏洞报告
0x00简介 项目名称:ESPCMS-P8(易思企业建站管理系统) 测试平台:Windwos 版本信息:P8.19082801稳定版 更新时间:2019-08-30 00:56:32 网站官网:htt ...
- 最常见的安全漏洞– Acunetix Web应用程序漏洞报告2021
每年,Acunetix都会为您提供最常见的Web安全漏洞和网络外围漏洞的分析.我们的年度Web应用程序漏洞报告(现已成为Invicti AppSec指标的一部分)是基于从Acunetix在线获得的真实 ...
- BUG克星:几款优秀的BUG跟踪管理软件
Bug管理是指对开发,测试,设计等过程中一系列活动过程中出现的bug问题给予纪录.审查.跟踪.分配.修改.验证.关闭.整理.分析.汇总以及删除等一系列活动状态的管理.,最后出相应图表统计,email通 ...
- 写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我
写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我 1.HttpUtil工具类,用于模拟用户登录以及爬取网页: using System; using ...
- Journal of Proteome Research | Current understanding of human metaproteome association and modulation(人类宏蛋白质组研究近期综述)(解读人:李巧珍)
文献名:Current understanding of human metaproteome association and modulation(人类宏蛋白质组研究近期综述) 期刊名:J Prot ...
随机推荐
- 「LG4178 Tree」
题目 我终于来抄点分治的板子了 随便说一点理解吧,点分治就是一种能求某种特定树上路径数量的算法 就是选择一个分治重心,统计一下以这个重心为\(LCA\)的路径的信息 之后对这个重心的子树再次分别选择分 ...
- WEB测试—用户界面测试
如果有设计稿,当然按照设计稿进行测试:没有设计稿,就参考原型:如果都没有,就按照web大众排版设计要求测试了,当然,还是要产品看过为准. 一下简单总结一下测试的点. 1. 导航测试 很少有用户愿意花时 ...
- 手绘web原型设计的感受
当下有许多流行的Web原型设计工具,比如mockplus等,mockplus在我们团队初次开发rms系统用到过,确实还不错,但是,原型工具有其优势也有其劣势. 礼拜一开会时,经理跟我说,觉得现在的LM ...
- 通过Field (反射)给私有字段赋值
public class Person { public String name; public char sex; private int age; public String getName() ...
- CodeForces - 616C(很有意思的bfs,set,map的使用)
传送门: http://codeforces.com/problemset/problem/616/C C. The Labyrinth time limit per test 1 second me ...
- 第25章 串行FLASH文件系统FatFs
25.1 文件系统 即使读者可能不了解文件系统,读者也一定对“文件”这个概念十分熟悉.数据在PC上是以文件的形式储存在磁盘中的,这些数据的形式一般为ASCII码或二进制形式.在上一章我们已经写好了Q ...
- STC12LE5620AD RAM问题
1.此款单片机内部有 sram:768B=512B(aux)+256B(Internal) 2.内部RAM解析 2. 3.内部扩展RAM 4.keil中可以选择内存类型 5. 网上摘抄的一段话: 在S ...
- Oracle 体系结构一 概述
Oracle服务器由两个实体组成:实例和数据库. 实例由内存结构和进程组成. 它暂时存在于RAM和CPU中.当关闭运行的实例时,实例将消失的无影无踪. 数据库由磁盘上的文件组成.不管在运行状态还是停止 ...
- Swift_函数
Swift_函数 点击查看源码 定义和调用函数 //定义和调用函数 func testDefiningAndCallingFunctions() { func sayHello(_ personNam ...
- SHELL脚本简单的赋值与递增
Count=`expr $Count + 1`;#可以在各种shell执行,其他类C的写法只能在指定的bash版本执行; 赋值不能带$, 带$相当于字符串常量了;执行脚本参考如下 #!/bin/sh ...