文档章节

在Rancher上使用Traefik构建主动负载均衡

wise2c
 wise2c
发布于 2017/01/04 10:12
字数 1707
阅读 322
收藏 2

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

      简述      

本文原文作者:Raul Sanchez Liebanaon,是DevOps微服务架构师,专门从事敏捷,看板,微服务,CI/CD,开源以及其他新技术的应用。

 

这篇文章的重点是Traefik“主动模式”负载均衡技术结合Docker标签和Rancher元数据,以实现自动配置和提供服务接入。

 

 

负载均衡/代理是使您够访问服务后台成为可能的软件程序。

在微服务架构里,它们有一个额外的挑战那就是管理高活力。它们必须以动态和自动化的方式察觉前端和后端的变化,从而更新和重新装载它们的配置。它们还需要与服务发现系统通讯。

 

元数据服务

在Rancher中,我们有一个杰出的内置服务发现系统被称为Rancher的元数据服务。在Rancher的元数据服务中,我们可以从本机服务或者从其他堆栈或服务获取信息。Rancher的元数据里有最新的有关什么服务在系统上运行并且位于何处信息。

想为你的服务生成动态配置文件,你需要与Rancher的元数据服务通讯。要做到这一点,可以使用confd与具体的模板。

想了解更多细节,我建议你读Bill Maxwell的这篇文章:http://rancher.com/introducing-rancher-metadata-service-for-docker/。

 

负载均衡

Rancher提供了一个内建的负载均衡服务。它是一个容器化的HAProxy,而且它在对外发布你的服务端口非常有用。

这个负载均衡可以在两种不同的模式下工作。这意味着,它可以在两种不同的OSI层工作,特别是4层和7层。可是,这意味着什么呢?

第4层

-------------------------------------------------------------------------------------------------------------

您可以发布和提供TCP端口的访问。你使用这种有点原始的模式给你的服务后端发包,但无法修改端口。在这种模式下,你不能共享端口。这意味着你需要为每个服务发布不同的端口。

 

 

第7层

-------------------------------------------------------------------------------------------------------------

在这一层,你是在应用层面工作,而且只能发布HTTP(S)端口。在这种模式下,负载均衡可以查看和修改HTTP数据包。你可以检查,添加或修改HTTP头文件。在这种模式下,你可以共享相同的发布端口给不同的服务。显然,负载均衡必须知道如何区分传入数据包,以便将它们转发给正确的服务。要做到这一点,你需要定义一个用于检查传入HTTP数据包的HTTP头文件过滤器。一旦匹配成功,请求将会发送给正确的服务。

 

 

在这两种模式下,负载均衡都是以“被动模式”工作。这意味着,一旦你部署一个新的服务,你必须修改负载均衡配置并重新添加服务。显然,如果你从负载均衡中删除一个服务,它的配置也会在负载均衡配置中被删除。

 

 

主动负载均衡

为了给用户提供一个更好的选择,我们已经创建了一个基于Docker标签和Rancher元数据服务的“主动模式”负载均衡。负载均衡扫描Rancher元数据,并能自行配置,并为已配置特定标签的服务提供接入。

要获得这个功能,我们使用Traefik。Traefik是一个可编程的开源负载均衡,用golang编写。它可与Zookeeper,etcd,Consul等不同的服务发现系统集成。我们做了与Rancher元数据的初步集成。Traefik有一个真正意义上的零宕机时间重载,并实现定义断路器规则的可能性。要获取更多信息,请访问https://traefik.io/。

要使用Traefik,从社区Catalog中选择它并启动。使用默认参数,Traefik将在标签traefik_lb=true的所有主机上运行。暴露用于HTTP服务的主机端口8080以及作为Traefik管理的端口8000。它每60秒刷新配置一次。让你部署服务时覆盖所有参数成为可能。

 

一旦服务被部署,您可以访问管理界面http://host-address:9000

您需要在服务端定义以下标签来使您的的服务自动暴露给Traefik:

traefik.enable=<true|false>

traefik.domain=<domain name to route rule>

traefik.port=<port to expose throught traefik>

 

在你的服务中定义一个健康检查是强制性的要求,因为只有健康的后端才能添加到Traefik。如果你在你的服务中定义traefik.enable=true的标签,但是服务不具有健康检查,前端虽然可以被添加到Traefik,而后端只会为空列表。

 

测试

我们已经写了一个基本的Web测试服务,使其能够检查Traefik服务,并以快速的方式进行测试。这项服务在8080端口公开Web服务。

你可以导入以下docker-compose.yml和rancher-compose.yml来创建一个新的Stack。

 

docker-compose.yml

web-test:

log_driver:''

labels:

traefik.domain:local

traefik.port:'8080'

traefik.enable:'true'

io.rancher.container.hostname_override:container_name

tty:true

log_opt:{}

image:rawmind/web-test

rancher-compose.yml

web-test:

scale:3

health_check:

port:8080

interval:2000

initializing_timeout:60000

unhealthy_threshold:3

strategy:recreate

response_timeout:2000

request_line:GET"/""HTTP/1.0"

healthy_threshold:2

 

它将Traefik标签添加到它的定义中。在部署后,其后端将会是“健康”的状态。他们将被自动添加到Traefik服务中以下方式暴露:

 

http://${service_name}.${stack_name}.${traefik.domain}:${http_port}.

你可以在Traefik管理界面查看http://host-address:8000

 

如果你切换web-test服务开启或关闭,你可以在Traefik管理界面中看到后端服务器将自动添加或删除。但是,你必须等待刷新间隔时间之前的配置被刷新。

要访问web-test服务,添加一个别名到DNS,web-test.proxy-test.local指向你的主机地址,然后转到http://web-test.proxy-test.local:8080.

当你请求的web-test服务,它会显示所有的头文件信息,如下图所示:

http://web-test.proxy-test.local:8080

一旦你刷新页面,你应该可以看到Real_server正在发生变化并且负载均衡开始工作。

小提示:为了避免设置DNS纪录,你可以使用curl测试服务,添加主机头文件。

curl –H Host:web-test.proxy-test.local http://host-address:8080

 

暴露你的服务

给Traefik暴露你的服务,给它们的添加以下标签:

traefik.enable=true

traefik.domain=<yourdomain>

traefik.port=<service_port>

这个服务${traefik.port}将会暴露为:

http://${service_name}.${stack_name}.${traefik.domain}:${http_port}

小提示:如果你删除Traefik Stack,当你再次部署它,你不需要重新配置它,它会自动通过扫描服务标签进行配置。

 

参考

https://github.com/rawmind0/alpine-traefik

https://github.com/rawmind0/rancher-traefik

https://github.com/rawmind0/web-test

 

Docker企业落地交流群

一起分享容器落地经验

长按二维码关注

 

© 著作权归作者所有

wise2c

wise2c

粉丝 2
博文 13
码字总数 26332
作品 1
深圳
私信 提问
kubernetes使用Træfik代理服务

一、简介 Træfik是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm mode, Kubernetes, Marathon, Consul, Etcd, Rancher, ...) 来自...

心远何方
2018/06/27
0
0
Kubernetes上的负载均衡详解

如果您的应用程序是面向大量用户、会吸引大量流量,那么一个不变的目标一定是在高效满足用户需求的同时、不让用户感知到任何类似于“服务器繁忙!”的情况。这一诉求的典型解决方案是横向扩展...

RancherLabs
2018/09/20
701
1
利用Traefik+Docker构建可弹性扩展的微服务或服务集群

简介 Traefik是一个与Nginx、HAProxy有些相似的HTTP反向代理服务器,兼有负载均衡的功能。Nginx和HAProxy都有一个相同的问题就是,后端服务(通常称之为upstream或backend)变化(是否能正常...

urey_pp
2017/02/09
0
0
深入玩转K8S之如何访问业务应用(Traefik-ingress篇)

上篇懒得写了索性转载了一篇nginx-ingress的,本篇我们来看神器Traefik,我个人是比较看好和偏向与Traefik的,它轻便易用而且还有节目。 先介绍下什么是Traefik,Traefik是一个为了让部署微服...

Devin
2018/08/02
0
0
container-as-a-service-0x01 -- 基于Docker的私有云&混合云构建方案

container-as-a-service-0x01 -- 基于Docker的私有云&混合云构建方案 By 苏依蜀黍 . 2016.06.07 what Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的...

Thonatos
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

oracle查杀连接会话

由于频繁强制启停tomcat不清理连接等情况时可能导致oracle连接爆满,此时可以使用这个方式清理 --查询select sess.sid,sess.serial#,sess.machine,lo.oracle_username,lo.os_user_name,...

孑竹三秋
19分钟前
5
0
为什么互联网公司天天都在招人?

互联网公司招聘是很重要的环节,互联网公司离职率普遍较高,传统企业离职率较低,所以对于公司招聘是很重要的环节,同样一句“很重要”我看到许多人理解其程度实际上大相径庭。在很多互联网公...

码农突围
20分钟前
5
0
001-open-falcon的单机版安装

open-falcon 每台服务器,都有安装falcon-agent,falcon-agent是一个golang开发的daemon程序,用于自发现的采集单机的各种数据和指标 单机安装 redis mkdir /home/redis && cd /home/redis...

伟大源于勇敢的开始
21分钟前
3
0
人工智能领跑的未来,智能CRM未来可期

现在,几乎每个技术预测故事都以同样的方式开始:人工智能AI正在开辟新的可能性。这种趋势同样发生在CRM领域中。 人工智能正在通过访问和分析来改变CRM。它正在通过添加语音助手、同时改善工...

怡海软件-CRM
23分钟前
3
0
mysql-5.7.28-linux-glibc2.12-x86_64配置(参考)

[client]socket                                            = /data/mysql/var/mysql.sockport                                         ...

Wybaron
27分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部