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

栏目: 后端 · 发布时间: 7年前

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

【编者的话】容器云项目中的负载均衡方案的原理与实现。云平台基于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,进群参与,您有想听的话题或者想分享的话题都可以给我们留言。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

父与子的编程之旅

父与子的编程之旅

桑德 (Warren Sande)、桑德 (Carter Sande) / 苏金国、易郑超 / 人民邮电出版社 / 2014-10-1 / CNY 69.00

本书是一本家长与孩子共同学习编程的入门书。作者是一对父子,他们以Python语言为例,详尽细致地介绍了Python如何安装、字符串和操作符等程序设计的基本概念,介绍了条件语句、函数、模块等进阶内容,最后讲解了用Python实现游戏编程。书中的语言生动活泼,叙述简单明了。 为了让学习者觉得编程有趣,本书编排了很多卡通人物及场景对话,让学习者在轻松愉快之中跨入计算机编程的大门。 第 2 版新增内......一起来看看 《父与子的编程之旅》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试