(编辑中)深信服容器云的负载均衡实现

【编者的话】容器云项目中的负载均衡方案的原理与实现。云平台基于k8s,在k8s集群上做了深度优化,形成超融合容器云一体化方案。能做到一键部署、与超融合无缝融合。本文主要讲应用的负载均衡原理与实现。

【3 天烧脑式 Docker 训练营 | 上海站】随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛。本次培训我们理论结合实践,从Docker应该场景、持续部署与交付、如何提升测试效率、存储、网络、监控、安全等角度进行。

分享主要内容简介:

容器云负载均衡的功能

两种不同的负载均衡方案原理对比与借鉴

域名访问的原理与实现

端口映射的原理与实现

容器云负载均衡的特点

首先介绍下背景,我们此次的重点讲的是在我们容器云项目中的负载均衡方案的原理与实现。

先说一下我们的云平台的基本情况,我们云平台基于k8s,在k8s集群上做了深度优化,形成超融合容器云一体化方案。能做到一键部署、与超融合无缝融合。今天我们主要讲我们容器云平台中,应用的负载均衡原理与实现。

1.容器云负载均衡的功能介绍

负载均衡的原理,我相信在这里不需要详述了。我们直接介绍我们在容器云平台上实现的负载均衡有哪些功能,解决哪些客户问题。

1. 支持4层/7层应用负载

2. 支持会话保持

3. 配置简单,无需关注k8s应用细节

4. 高可用、高自愈能力

2.k8s负载均衡方案介绍

1)通过service实现负载

Services是Kubernetes的基本操作单元,是真实应用服务的抽象,每一个服务后面都有很多对应的容器来支持,通过Proxy的port和服务selector决定服务请求传递给后端提供服务的容器,对外表现为一个单一访问接口,外部不需要了解后端如何运行,这给扩展或维护后端带来很大的好处。

2)通过ingress实现负载

Service和Pod的IP地址只能在集群内部网络中路由,所有到达“边界路由器”(Edge Router)的网络流量要么被丢弃,要么被转发到别处

Ingress是对外(公网)服务到集群内的Service之间规则的集合:允许进入集群的请求被转发至集群内

3.深信服容器云的负载均衡方案

我们的负载方案是基于haproxy实现的负载, 以容器的形式部署在集群中

1, 解耦DNS-server配置,静态配置DNS,动态绑定业务IP,支持故障迁移,IP高效利用率;

2, 容器化多节点部署Haproxy,高可靠多节点进行负载均衡;

3, 域名访问支持会话保持,路径分发等功能;

1)部署图

2)流程图

该方案的特点如下:

1. 负载均衡器根据集群内apiserver获得服务信息,并生成balancer的配置

2. 外部路由以及外部负载与vip方案实现可以同时兼容存在

3. 可选haproxy与nginx,两者都能实现4层&7层负载(haproxy不支持4层udp),两者都支持cookie做会话保持,都支持SSL

4. haproxy与nginx实现方案基本一致,不同的只是配置模板,可以互相切换,目前暂定了haproxy。

端口映射的原理与实现

1. 容器服务端口通过docker映射到host主机上,主机端口和容器互通;

2. k8s维护和不停的刷新每台节点上的iptables规则

3. 访问从任意节点进来是,通过主机上的iptables规则负载均衡到各个节点的服务端口

4.问题集锦

Q:haproxy 是在k8s内部对pod 互通,是如何实现pod的发现的?

A:k8s有一个开源机制,叫做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?

答:基于k8s的listwatch资源监听,通过service对应的endpoint获取到pod的ip。

Q:能否介绍一下你们的超融合容器云?谢谢

A:我们的超融合容器云一体化方案。实现了虚拟机和容器“双引擎”的集成。适合微服务架构的应用及高并发事务处理型的业务,是支撑企业互联网业务转型的最佳技术实践平台。

Q:service外部访问通过nodeport,再结合iptables端口映射转发到pods,iptables规则后边有个权重,这个参数对于haproxy的会话保持有影响么?

A:权重对会话保持没影响,会话保持选路的优先级高于权重。

Q:应用的ip如何动态绑定?容器在另一台主机上重启(迁移)之后,ip保持是如何实现的

A:我们有专门的模块实现ip的动态绑定与迁移。实现细节一下子讲不清楚,有兴趣,私聊。

Q:这里的负载涉及故障自动限流下线否?

A:容器故障会迁移,我们没有做故障限流,只是短暂增加容器访问压力。

Q:如何实现持久化存储的呢?

A:我们底层有超融合提供存储支持,容器云只调接口接入使用

以上内容根据2017年05月25日晚微信群分享内容整理。分享人**** DockOne每周都会组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesz,进群参与,您有想听的话题或者想分享的话题都可以给我们留言。

DockOne稿源:DockOne (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 综合技术 » (编辑中)深信服容器云的负载均衡实现

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录