DockOne技术分享(一二五):深信服容器云的负载均衡实现

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文讲的是DockOne技术分享(一二五):深信服容器云的负载均衡实现【编者的话】此次重点讲的是在深信服容器云项目中的负载均衡方案的原理与实现。同时,因为我们投入的人力有限,人员的水平也有不足,但是借助Docker与Kubernetes等开源技术的发展,我们基本上达到了容器云平台中应用服务的负载均衡。
本文讲的是DockOne技术分享(一二五):深信服容器云的负载均衡实现【编者的话】此次重点讲的是在深信服容器云项目中的负载均衡方案的原理与实现。同时,因为我们投入的人力有限,人员的水平也有不足,但是借助Docker与Kubernetes等开源技术的发展,我们基本上达到了容器云平台中应用服务的负载均衡。

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

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

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

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

负载均衡的原理,我相信在这里不需要详述了。我们直接介绍我们在容器云平台上实现的负载均衡有哪些功能,解决哪些客户问题。
  1. 支持4层/7层应用负载
  2. 支持会话保持
  3. 配置简单,无需关注k8s应用细节
  4. 高可用、高自愈能力

2 . Kubernetes负载均衡方案介绍

1)通过service实现负载

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

2)通过ingress实现负载

Service和Pod的IP地址只能在集群内部网络中路由,所有到达“边界路由器”(Edge Router)的网络流量要么被丢弃,要么被转发到别处
Ingress是对外(公网)服务到集群内的Service之间规则的集合:允许进入集群的请求被转发至集群内。
图片2.png

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

我们的负载方案是基于HAProxy实现的负载, 以容器的形式部署在集群中:
  1. 解耦DNS-server配置,静态配置DNS,动态绑定业务IP,支持故障迁移,IP高效利用率;
  2. 容器化多节点部署Haproxy,高可靠多节点进行负载均衡;
  3. 域名访问支持会话保持,路径分发等功能。

部署图:
图片3.png


流程图:
图片4.png


该方案的特点如下:
  1. 负载均衡器根据集群内API Server获得服务信息,并生成balancer的配置。
  2. 外部路由以及外部负载与vip方案实现可以同时兼容存在。
  3. 可选HAProxy与Nginx,两者都能实现4层&7层负载(HAProxy不支持4层UDP),两者都支持cookie做会话保持,都支持SSL。
  4. HAProxy与Nginx实现方案基本一致,不同的只是配置模板,可以互相切换,目前暂定了HAProxy。

4 . 端口映射的原理与实现

  1. 容器服务端口通过Docker映射到host主机上,主机端口和容器互通;
  2. Kubernetes维护和不停的刷新每台节点上的iptables规则;
  3. 访问从任意节点进来是,通过主机上的iptables规则负载均衡到各个节点的服务端口。
    图片5.png

Q&A

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。

以上内容根据2017年05月25日晚微信群分享内容整理。分享人钟德财,深信服科技研发工程师。毕业于华南理工大学。早期从事大数据,数据挖掘方面研究工作,现主要负责容器云平台产品开发与管理工作。 DockOne每周都会组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesz,进群参与,您有想听的话题或者想分享的话题都可以给我们留言。

原文发布时间为:2017-06-11

本文作者:钟德财

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:DockOne技术分享(一二五):深信服容器云的负载均衡实现

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
7月前
|
存储 负载均衡 调度
Docker 多主机部署:构建容器集群的最佳实践,助力高可用性与负载均衡
Docker 多主机部署:构建容器集群的最佳实践,助力高可用性与负载均衡
326 0
|
6天前
|
负载均衡 网络协议 算法
【Docker 专栏】Docker 容器内服务发现与负载均衡
【5月更文挑战第8天】本文探讨了Docker容器中的服务发现与负载均衡。服务发现通过环境变量、DNS或集中式系统(如Consul、Zookeeper)来定位服务实例。负载均衡则采用轮询、随机等算法,可通过软件负载均衡器、云服务或容器编排工具(如Kubernetes)实现。服务发现与负载均衡结合使用,确保请求有效分发和系统稳定性。面对动态性、网络延迟及大规模部署的挑战,需采取相应措施优化。选择合适技术并持续优化,能提升Docker容器应用的性能和可靠性。
【Docker 专栏】Docker 容器内服务发现与负载均衡
|
9月前
|
运维 负载均衡 Kubernetes
云原生时代,如何从 0 到 1 构建 K8s 容器平台的 LB(Nginx)负载均衡体系
通过本文可以对 Kubernetes 容器平台的 LB(Nginx)负载均衡了然于心,并且可以快速深入建设 Kubernetes LB(Nginx)负载均衡体系。还可以了解到,一个中大型公司,是如何从 0 到 1 来构建大规模 Kubernetes 容器平台的 LB(Nginx)负载均衡体系的一些非常宝贵的实战经验。
云原生时代,如何从 0 到 1 构建 K8s 容器平台的 LB(Nginx)负载均衡体系
|
监控 负载均衡 Kubernetes
四位一体水溶交融,Docker一拖三Tornado6.2 + Nginx + Supervisord非阻塞负载均衡容器式部署实践
容器,又见容器。Docker容器的最主要优点就在于它们是可移植的。一套服务,其所有的依赖关系可以捆绑到一个独立于Linux内核、平台分布或部署模型的主机版本的单个容器中。此容器可以传输到另一台运行Docker的主机上,并且在没有兼容性问题的情况下执行。而传统的微服务架构会将各个服务单独封装为容器,虽然微服务容器化环境能够在给定数量的基础架构内实现更高的工作负载密度,但是,在整个生产环境中创建、监视和销毁的容器需求总量呈指数级增长,从而显著增加了基于容器管理环境的复杂性。
四位一体水溶交融,Docker一拖三Tornado6.2 + Nginx + Supervisord非阻塞负载均衡容器式部署实践
|
存储 负载均衡 NoSQL
docker swam 集群实现负载均衡
docker swam 集群实现负载均衡
|
负载均衡 网络协议 应用服务中间件
nginx实现负载均衡
nginx实现负载均衡
319 0
nginx实现负载均衡
|
负载均衡 Linux 调度
使用keepalived(HA)+LVS实现高可用负载均衡群集,调度器的双机热备
使用keepalived(HA)+LVS实现高可用负载均衡群集,调度器的双机热备
160 1
使用keepalived(HA)+LVS实现高可用负载均衡群集,调度器的双机热备
|
缓存 负载均衡 算法
Nginx实现负载均衡(整合SpringBoot小demo)
Nginx实现负载均衡(整合SpringBoot小demo)
303 4
Nginx实现负载均衡(整合SpringBoot小demo)
|
弹性计算 负载均衡 Kubernetes
【视频】第四讲-负载均衡ALB+实验三-使用ALB实现灰度发布|学习笔记
快速学习【视频】第四讲-负载均衡ALB+实验三-使用ALB实现灰度发布。
692 0
【视频】第四讲-负载均衡ALB+实验三-使用ALB实现灰度发布|学习笔记
|
域名解析 tengine 负载均衡
使用nginx的负载均衡机制实现用户无感更新服务
用户请求的转发是接口服务在部署时必须要做的一步。