Kubernetes 网络改进的三项实践分享
自研CNI IPAM插件 解决K8s功能问题
首先,在功能方面,Kubernetes 网络模型由于IP不固定,无法对IP资源进行精细管控,无法使用基于IP的监控和基于IP的安全策略,此外,一些IP发现的服务部署十分困难,给运维人员增加了很大的工作难度。例如由于IP不固定,令很多采用IP固定来做的传统监控和审计机制全部失效。此外,很多软件是对MAC地址进行授权,IP地址不固定无法购买授权,IP固定的需求在一定场景下客观存在。
为了解决这一问题,灵雀云把IP当做重要资源,进行单独管理。灵雀云自研的CNI IPAM 插件,实现了IP导入和IP权限管理功能,可以进行网段的添加和删除,可在Kubernetes进行网段的精细化配置。例如,给某个业务或者某几个用户分配一个网关,先对IP进行网关设置,路由设置以及DNS设置;有了网段之后,进行IP添加或删除,哪些IP可用都可以由管理员指定,经过权限和配额之后顺利创建服务。
IPVS解决K8S大流量下性能线性下降问题
其次,在性能方面,由于Kubernetes最早是基于Iptables来做的,Iptables 没有增量更新功能,更新一条规则需要整体flush,更新时间长,这段时间之内流量会有不同程度的影响;Iptables规则串行,没有预料到Kubernetes这种在一个机器上会有很多规则的情况,流量需要经过所有规则的匹配,匹配之后再进行转发,否则对时间、CPN和内存都是极大的消耗,尤其在大规模情况下对性能的影响十分明显。
刘梦馨介绍指出,Kubernetes升级到1.8或1.9版本以后,安装时可以选择IPVS模式,它是对Iptables的替换,在IPVS模式下添加规则是增量式的,不会强制进行全量更新,也不会进行串行的匹配,会通过一定的规则进行哈希map映射,很快地映射到对应的规则,不会出现大规模情况下性能线性下降的状况。目前,IPVS在Kubernetes社区仍处于试用阶段,刘梦馨表示,灵雀云已经开始试用IPVS功能,从使用情况来看,性能十分稳定,预计很快会将方案推广给用户。
自研OpenResty Ingress 解决K8S稳定性问题
最后,在稳定性方面,Kubernetes网络缺少健康检查功能,NodePort 屏蔽了Pod的直接访问,上层健康检查失效,网络分区、网络问题导致的转发异常时有发生。
灵雀云采用自研的OpenResty Ingress,方便新增功能,可以进行多端口监听。官方的Nginx Ingress只能监听80和43端口,但很多客户要对更多的端口进行监听,如根据端口区分的服务,灵雀云对此进行了一些改动,其自研的Ingress支持多端口功能。另外,原始Ingress的转化功能较少且配置复杂,需要不断更改Nginx config。对于reload,灵雀云用OpenResty实现lua的代码库,在lua的代码里进行流量调度,并设定了特定的DSL流量调度语言,可以通过简单的程序代码实现特定的流量规则,在Ingress流量规则方面进行了丰富扩展。
在演讲的最后,刘梦馨列举了一个用简单程序代码实现特定流量规则的实例:
规则:域名是 www.baidu.com 或者 baidu.com,路径是 /search, 源 IP 为 114.114.114.114,header 中 uid 在 100 到 999 或者 10000 到 11000 之间的请求
(AND (IN HOST www.baidu.com baidu.com) (EQ URL /search) (EQ SRC_IP 114.114.114.114) (OR (RANGE HEADER uid 100 999) (RANGE HEADER uid 10000 11000)))
可以看出,只需简单的配置域名、路径、特定范围内的IP等信息,Dsl就可以实现比较复杂的规则。
灵雀云是一家专注容器服务和企业级PaaS的服务商,始终保持着对技术的敏锐和前瞻性理解,在容器领域,灵雀云是国内最早将Kubernetes产品化的专业服务商,推出了基于Kubernetes的产品Alauda EE,打造客户容器环境核心系统以及在DevOps和微服务方面的最佳实践。未来,灵雀云将依托强大的产品和服务能力,为传统企业数字化转型保驾护航。
Kubernetes 网络改进的三项实践分享的更多相关文章
- 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...
- 百度APP移动端网络深度优化实践分享(二):网络连接优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...
- 百度APP移动端网络深度优化实践分享(一):DNS优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享. 一.前言 网络优化是客户端几大技术方 ...
- 灵雀云Kube-OVN:基于OVN的开源Kubernetes网络实践
近日,灵雀云发布了基于OVN的Kubernetes网络组件Kube-OVN,并正式将其在Github上开源.Kube-OVN提供了大量目前Kubernetes不具备的网络功能,并在原有基础上进行增强. ...
- 三十一、kubernetes网络介绍
Kubernetes 网络介绍 Service是Kubernetes的核心概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上 ...
- DEVOPS落地实践分享
DEVOPS落地实践分享 转载本文需注明出处:微信公众号EAWorld,违者必究. 引言: DevOps的理念已经说了很多年,其带来的价值逐渐被接受,很多企业也逐渐引入了DevOps.目前普元DevO ...
- Dropbox可伸缩性设计最佳实践分享
http://www.infoq.com/cn/news/2012/11/dropbox-scale-bestpractice Dropbox的运维工程师Rajiv,跟大家分享了可伸缩性设计的最佳实践 ...
- 让互联网更快:新一代QUIC协议在腾讯的技术实践分享
本文来自腾讯资深研发工程师罗成在InfoQ的技术分享. 1.前言 如果:你的 App,在不需要任何修改的情况下就能提升 15% 以上的访问速度,特别是弱网络的时候能够提升 20% 以上的访问速度. 如 ...
- VNF网络性能提升解决方案及实践
VNF网络性能提升解决方案及实践 2016年7月 作者: 王智民 贡献者: 创建时间: 2016-7-20 稳定程度: 初稿 修改历史 版本 日期 修订人 说明 1.0 20 ...
随机推荐
- Houdini技术体系 基础管线(三) :UE4 Landscape Component的多选支持 下篇
背景 上篇中,我们介绍了如何修改Houdini Enigne来设置单个Landscape Compnent的Height和Layer的数据,但原生Houdini Engine并不支持多选Compone ...
- 终于把eShopOnContainer部署成功了。
先上图说明一下,然后把步骤一部一部写上来吧.
- NB-Iot的应用领域、覆盖范围,是什么
该部分分享的是物联网各垂直应用领域里,NB-IoT技术的部署,看看适合NB-IoT技术的垂直应用场景有哪些?垂直应用服务商又该如何部署? 1 NB-IoT适合的垂直应用场景有哪些? 2 NB-IoT垂 ...
- Gym 100712
我的作用:增加罚时. noip380分大佬全程带飞出了10T,可惜被我搞的罚时太高了... 那啥,你会发现java代码有两种风格,嗯两个人,c++自然就是自招大佬了... A:大水题略 B:(不是我写 ...
- js中 函数参数的 传值/传引用 问题
如果 传入function的参数是 (数值.字符串.布尔值) 此时是以 传值 的方式 进行. 如果 传入function的参数是 (数组.对象.其他函数) 此时是以 传引用 的方式 进行. 1
- js中的 substr方法与substring方法 不同
一个参数时: 二者同为 从 第参数个 开始截取,一直到str 末尾,并返回. 二个参数时: substr(a,b): 从第a个字符开始, 截取b个. substring(a,b): 从第a个字符 ...
- Druid连接池(一)
介绍 Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. 支持的数据库 Druid支持所有JDB ...
- springMVC01,使用xml
unit03_01 unit03_02 springmvc流程图 案例:hello示例 /hello.do --> springmvc --> /WEB-INF/hello.jsp /he ...
- Timer和时间调度
Timer作为JDK提供的util工具,不太适合作为周期调度任务,只适合简单的定时操作(按照一定时间频率出发任务),在java的领域解决方案中,Quartz无疑是翘楚. Timer的调度方法有: pu ...
- eclipse连接mysql数据库实现怎删改查操作实例(附带源码)
package model; public class User { private int id; private String name; private String password; pub ...