此次重点讲的是在深信服容器云项目中的负载均衡方案的原理与实现。同时,因为我们投入的人力有限,人员的水平也有不足,但是借助Docker与Kubernetes等开源技术的发展,我们基本上达到了容器云平台中应用服务的负载均衡。
首先介绍下背景,我们此次的重点讲的是在我们容器云项目中的负载均衡方案的原理与实现。
先说一下我们的云平台的基本情况,我们云平台基于Kubernetes,在Kubernetes集群上做了深度优化,形成超融合容器云一体化方案。能做到一键部署、与超融合无缝融合。今天我们主要讲我们容器云平台中,应用的负载均衡原理与实现。
负载均衡的原理,我相信在这里不需要详述了。我们直接介绍我们在容器云平台上实现的负载均衡有哪些功能,解决哪些客户问题。
支持4层/7层应用负载
支持会话保持
配置简单,无需关注k8s应用细节
高可用、高自愈能力
Services是Kubernetes的基本操作单元,是真实应用服务的抽象,每一个服务后面都有很多对应的容器来支持,通过Proxy的port和服务selector决定服务请求传递给后端提供服务的容器,对外表现为一个单一访问接口,外部不需要了解后端如何运行,这给扩展或维护后端带来很大的好处。
2)通过ingress实现负载
Service和Pod的IP地址只能在集群内部网络中路由,所有到达“边界路由器”(Edge Router)的网络流量要么被丢弃,要么被转发到别处。
Ingress是对外(公网)服务到集群内的Service之间规则的集合:允许进入集群的请求被转发至集群内。
我们的负载方案是基于HAProxy实现的负载, 以容器的形式部署在集群中:
解耦DNS-server配置,静态配置DNS,动态绑定业务IP,支持故障迁移,IP高效利用率;
容器化多节点部署Haproxy,高可靠多节点进行负载均衡;
域名访问支持会话保持,路径分发等功能。
部署图:
流程图:
负载均衡器根据集群内API Server获得服务信息,并生成balancer的配置。
外部路由以及外部负载与vip方案实现可以同时兼容存在。
可选HAProxy与Nginx,两者都能实现4层&7层负载(HAProxy不支持4层UDP),两者都支持cookie做会话保持,都支持SSL。
HAProxy与Nginx实现方案基本一致,不同的只是配置模板,可以互相切换,目前暂定了HAProxy。
容器服务端口通过Docker映射到host主机上,主机端口和容器互通;
Kubernetes维护和不停的刷新每台节点上的iptables规则;
访问从任意节点进来是,通过主机上的iptables规则负载均衡到各个节点的服务端口。
Q:HAProxy是在Kubernetes内部对pod互通,是如何实现pod的发现的?A:Kubernetes有一个开源机制,叫做ingress模块,提供了pod基于service的发现。
Q:Haproxy是通过配置模版生成的吗?更新然后重载吗?
A:是通过配置模板来生成负载均衡的分发规则,我们时刻动态刷新配置,我们重载配置,链接达到0丢失。
Q:如果你们的HAProxy的lb和ingress一样仅支持四,七层的lb,那么对于Nginx或者traefik的优势在于哪里呢?
A:各有优缺点,HAProxy更加适用于我们的平台。对于Nginx等,我们更加轻量,更加简单 ,迭代快。
Q:HAProxy经常reload有性能消耗,怎么做对单个发布的应用进行动态更新?之前新浪有Consul + Nginx?
A:不存在性能消耗,我们针对于单个应用的动态更新与多个的性能差异很小,因为都是配置 重载。
Q:如何做到HAProxy重载配置链接0丢失的?
A:首先重载之前的iptable规则,丢弃握手包,重启之后,去掉规则,达到重载时间内新请求不丢失,原有链接,haproxy提供机制支持,接管原来的链接。
Q:HAProxy是怎么调用service的? 直接调用service的群集IP?
A:基于Kubernetes的listwatch资源监听,通过service对应的endpoint获取到pod的IP。
随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛。本次培训我们理论结合实践,从Docker应该场景、持续部署与交付、如何提升测试效率、存储、网络、监控、安全等角度进行。点击识别下方二维码加微信好友了解具体培训内容。