自研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和内存都是极大的消耗,尤为在大规模状况下对性能的影响十分明显。ui
刘梦馨介绍指出,Kubernetes升级到1.8或1.9版本之后,安装时能够选择IPVS模式,它是对Iptables的替换,在IPVS模式下添加规则是增量式的,不会强制进行全量更新,也不会进行串行的匹配,会经过必定的规则进行哈希map映射,很快地映射到对应的规则,不会出现大规模状况下性能线性降低的情况。目前,IPVS在Kubernetes社区仍处于试用阶段,刘梦馨表示,灵雀云已经开始试用IPVS功能,从使用状况来看,性能十分稳定,预计很快会将方案推广给用户。lua
自研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就能够实现比较复杂的规则。