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 网络改进的三项实践分享

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
kubernetes-核心资源之Ingress
1、Ingress 在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,在Kubernetes中可以通过NodePort和LoadBalancer这两种类型的服务,或者使用Ingress。Ingress本质是通过http代理服务器将外部的http请求转发到集群内部的后端服务。Kubernetes目前支持GCE和nginx控制器;另外,F5网络为Kubernetes提供了F5 Big-IP控制器。通过Ingress,外部应用访问群集内容服务的过程如下所示。 Ingress控制器通常会使用负载均衡器来负责实现Ingress,尽管它也可以通过配置边缘路由器或其它前端以HA方式处理流量。 2、Ingress配置文件 下面是Ingress YAML配置文件的示例: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test-ingress annotations: nginx.ingress.kubernetes.io/rewrite-t...
- 下一篇
关于Kubernetes Master高可用的一些策略
Kubernetes高可用也许是完成了初步的技术评估,打算将生产环境迁移进Kubernetes集群之前普遍面临的问题。 为了减少因为服务器当机引起的业务中断,生产环境中的业务系统往往已经做好了高可用,而当引入Kubernetes这一套新的集群管理系统之后, 服务器不再是单一的个体,位于中央位置的Kubernetes Master一旦中断服务,将导致所有Node节点均不可控,有可能造成严重的事故。 总体来讲这是一个被多次讨论,但暂时没有形成统一解决方案的话题。今天主要介绍一些Kubernetes Master高可用的策略,供大家参考。 一个小目标 高可用是复杂的系统工程。出于篇幅的考虑以及能力的限制,今天我们先关注一个小目标:所有的Kubernetes Master服务器没有单点故障,任何一台服务器当机均不影响Kubernetes的正常工作。 实现这一目标带来的直接收益是我们可以在不影响业务正常运行的前提下实现所有服务器的滚动升级,有助于完成系统组件升级以及安全补丁的下发。 为了实现没有单点故障的目标,需要为以下几个组件建立高可用方案: etcd kube-apiserver kube-...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7,8上快速安装Gitea,搭建Git服务器