博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
traefik简介
阅读量:6293 次
发布时间:2019-06-22

本文共 1800 字,大约阅读时间需要 6 分钟。

hot3.png

traefik简介 博客分类: 架构 mesos

traefik(https://traefik.io/)是一款开源的反向代理与负载均衡工具。它最大的优点是能够与常见的微服务系统直接整合,可以实现自动化动态配置。目前支持Docker, Swarm, Mesos/Marathon, Mesos, Kubernetes, Consul, Etcd, Zookeeper, BoltDB, Rest API等等后端模型。

traefik的具体模型如下:

为什么选择traefik?

事实上在之前我对LB的选择一直更倾向于使用  。但是选择traefik主要是有以下特点让我们决定使用:

  • Golang编写,单文件部署,与系统无关,同时也提供小尺寸Docker镜像。
  • 支持Docker/Etcd后端,天然连接我们的微服务集群。
  • 内置Web UI,管理相对方便。
  • 自动配置ACME(Let's Encrypt)证书功能。
  • 性能尚可,我们也没有到压榨LB性能的阶段,易用性更重要。

除了这些以外,traefik还有以下特点:

  • Restful API支持。
  • 支持后端健康状态检查,根据状态自动配置。
  • 支持动态加载配置文件和graceful重启。
  • 支持WebSocket和HTTP/2。

除了上面提到的微服务化集群支持,一些AB测试阶段也可以通过frontend的路由特性进行动态分配,当然这些对HAProxy等软件都是标准支持的。

traefik的配置

traefik支持的配置方式支持文件方式进行配置,这个也是比较常见的配置方式,我们这里简单介绍一下。

traefik支持的toml方式进行配置,官方提供了一个  用于演示配置。除此之外,后端服务一般是采用单独文件进行存储,比如演示配置中指定的rules.toml。

具体一个例子,如果我们有两个后端,127.0.0.1:7727,127.0.0.1:7728,我们希望所有的Chrome用户都可以访问127.0.0.1:7727,其它人都访问127.0.0.1:7728,这样这个rules.toml应该如何配置呢?

# rules.toml[backends]  [backends.backend1]    [backends.backend1.servers.server1]    url = "http://127.0.0.1:7727"  [backends.backend2]    [backends.backend2.servers.server1]    url = "http://127.0.0.1:7728"[frontends]  [frontends.frontend1]  entrypoints = ["http"]  backend = "backend1"    [frontends.frontend1.routes.test_1]    rule = "HeadersRegexp: User-Agent, Chrome"  [frontends.frontend2]  entrypoints = ["http"]  backend = "backend2"

首先定义两个后端服务,每个后端服务可以支持多个服务单元,这里我们只有一个。前端frontends用于匹配请求落到哪个后端服务中。我们这里定义一个规则test_1,设置规则为根据HTTP请求头部正则进行分配:如果UserAgent中包含Chrome字样,则访问到127.0.0.1:7727。匹配的规则方式包含了以下几种方式:

  • Headers / HeaderRegexp : 头部匹配方式,分别对应按值和正则表达式两种方式。
  • Host / HostRegexp : 按照请求主机名进行匹配,与头部信息相似。
  • Method : 按照请求方式区分。
  • Path / PathStrip / PathPrefix / PathPrefixStrip : 按照路径区分后端。

traefik与微服务集群

这个有人已经写过相关的文章了,我在这里简单推荐一下:  (  )。我就不做额外的描述了。

 

http://www.tuicool.com/articles/ZnuEfay

转载于:https://my.oschina.net/xiaominmin/blog/1598680

你可能感兴趣的文章
计算机网络与Internet应用
查看>>
Django 文件下载功能
查看>>
走红日本 阿里云如何能够赢得海外荣耀
查看>>
磁盘空间满引起的mysql启动失败:ERROR! MySQL server PID file could not be found!
查看>>
点播转码相关常见问题及排查方式
查看>>
[arm驱动]linux设备地址映射到用户空间
查看>>
弗洛伊德算法
查看>>
【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
查看>>
精度 Precision
查看>>
Android——4.2 - 3G移植之路之 APN (五)
查看>>
Linux_DHCP服务搭建
查看>>
[SilverLight]DataGrid实现批量输入(like Excel)(补充)
查看>>
秋式广告杀手:广告拦截原理与杀手组织
查看>>
翻译 | 摆脱浏览器限制的JavaScript
查看>>
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
JAVA IO BIO NIO AIO
查看>>
input checkbox 复选框大小修改
查看>>
BOOT.INI文件参数
查看>>
vmstat详解
查看>>