*内容提要:

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汇总的更多相关文章

  1. 【独家】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解读 在 ...

  2. 【独家】K8S漏洞报告 | 近期bug fix解读

    安全漏洞CVE-2019-3874分析 Kubernetes近期重要bug fix分析 Kubernetes v1.13.5 bug fix数据分析 ——本周更新内容 安全漏洞CVE-2019-387 ...

  3. K8S漏洞报告 | 近期bug fix解读&1.13主要bug fix汇总

    K8s近期漏洞详解 Kubernetes仪表盘漏洞(CVE-2018-18264) 因为这一漏洞,用户可以“跳过”登录过程获得仪表盘所使用的自定义TLS证书.如果您已将Kubernetes仪表盘配置为 ...

  4. 【独家】K8S漏洞报告 | CVE-2019-1002101解读

    kubectl cp漏洞CVE-2019-1002101分析 Kube-proxy IPVS添加flag ipvs-strict-arp 近期bug fix数据分析 ——本期更新内容 kubectl ...

  5. 【代码审计】ESPCMSP8(易思企业建站管理系统)漏洞报告

    0x00简介 项目名称:ESPCMS-P8(易思企业建站管理系统) 测试平台:Windwos 版本信息:P8.19082801稳定版 更新时间:2019-08-30 00:56:32 网站官网:htt ...

  6. 最常见的安全漏洞– Acunetix Web应用程序漏洞报告2021

    每年,Acunetix都会为您提供最常见的Web安全漏洞和网络外围漏洞的分析.我们的年度Web应用程序漏洞报告(现已成为Invicti AppSec指标的一部分)是基于从Acunetix在线获得的真实 ...

  7. BUG克星:几款优秀的BUG跟踪管理软件

    Bug管理是指对开发,测试,设计等过程中一系列活动过程中出现的bug问题给予纪录.审查.跟踪.分配.修改.验证.关闭.整理.分析.汇总以及删除等一系列活动状态的管理.,最后出相应图表统计,email通 ...

  8. 写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我

    写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我 1.HttpUtil工具类,用于模拟用户登录以及爬取网页: using System; using ...

  9. Journal of Proteome Research | Current understanding of human metaproteome association and modulation(人类宏蛋白质组研究近期综述)(解读人:李巧珍)

    文献名:Current understanding of human metaproteome association and modulation(人类宏蛋白质组研究近期综述) 期刊名:J Prot ...

随机推荐

  1. 利用MSF批量打RMI漏洞

    声明:不会Java. 参考:https://www.secpulse.com/archives/6203.html 下载mjet,https://github.com/mogwaisec/mjet 按 ...

  2. 【转】XZip and XUnzip - Add zip and/or unzip to your app with no extra .lib or .dll

    原文:http://www.codeproject.com/Articles/4135/XZip-and-XUnzip-Add-zip-and-or-unzip-to-your-app-w Downl ...

  3. [19/03/27-星期三] 容器_Iterator(迭代器)之遍历容器元素(List/Set/Map)&Collections工具类

    一.概念 迭代器为我们提供了统一的遍历容器的方式 /* *迭代器遍历 * */ package cn.sxt.collection; import java.security.KeyStore.Ent ...

  4. Css3 实现关键帧动画

    <div class="person"> </div> <script> var str1 = "@keyframes move{&q ...

  5. mongo复制集、分片集(亲测)

    1.1 架构思路: 192.168.50.131              192.168.50.131             192.168.50.132 mongos mongos mongos ...

  6. 使用cmd命令创建vue(ivieiw)项目

    条件,安装好nodejs 第一步:先使用 vue create 命令创建一个项目,等待创建完成. 1.切换目录 2.创建项目  vue create [项目名称] 第二步:切换到项目中. 第三步:使用 ...

  7. java中printf的用法

    目前printf支持以下格式:           %c        单个字符           %d        十进制整数           %f        十进制浮点数        ...

  8. css圆角和阴影兼容问题(ie7,ie8)

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  9. <a>标签跳转到Servelet页面并实现参数的传递

    <a>标签跳转到页面不能通过request.setAttribute()和getAttribute()方法获取参数. <a>标签只能通过request.getParameter ...

  10. SQL注入点的类型

    1.数字型注入点 形如“http://****?ID=55”,这类注入的参数是“数字”,因此称为“数字型注入点”. 此类注入点提交的SQL语句,其原形大致为:Select * from 表名 wher ...