利用Traefik+Docker构建可弹性扩展的微服务或服务集群

简介

Traefik是一个与Nginx、HAProxy有些相似的HTTP反向代理服务器,兼有负载均衡的功能。Nginx和HAProxy都有一个相同的问题就是,后端服务(通常称之为upstream或backend)变化(是否能正常工作、上线、下线、扩展)时,不容易动态更新Nginx和HAProxy的配置文件和重载服务,尽管有一些类似于Registrator, ConsulConsul-Template 这样的工具可以来做这样的事。

图1:微服务常见的一种请求分发图。

与Nginx、HAProxy不同的是,Traefik更适合需要服务发现和服务注册的应用场景。例如,Traefik与Docker相结合非常容易,只需要指定label即可(虽然可以使用docker run指定label,但更推荐使用docker-compose.yml指定)。演示的例子直接可以参考官方网站,也可以参考下面的例子,非常简单并通俗易懂。需要指出的是Traefik并不是只能与Docker相结合,Docker, Swarm, Mesos/Marathon, Consul, Etcd, Zookeeper, BoltDB, Amazon ECS, Rest API, file...都可以。具体的可以参考官方网站和Google it。

图2:Traefik是如何管理请求的

一个简单的演示:

1.创建Traefik服务,可以使用Docker也可以使用命令行的方式。

注意:不熟悉docker-compose的可以先学习一下docker-compose的语法和应用,或者直接忽略它,再根据下文的相对目录结构、文件和命令创建。

docker-compose.yml 文件内容如下:

version: ‘2‘    
services:     
  traefik:     
    image: traefik:latest     
    restart: unless-stopped     
    command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG     
    networks:     
      - webgateway     
    ports:     
      - "80:80"     
      - "8080:8080"     
      - "443:443"     
    volumes:     
      - /var/run/docker.sock:/var/run/docker.sock     
      - /dev/null:/traefik.toml
networks:    
  webgateway:     
    driver: bridge

2.使用whoami应用作为一个简易的HTTP Web服务:

docker-compose.yml 文件内容如下:

version: ‘2‘    
services:     
  whoami:     
    image: emilevauge/whoami     
    networks:     
      - web     
    labels:     
      - "traefik.backend=whoami"     
      - "traefik.frontend.rule=Host:whoami.docker.localhost"
networks:    
  web:     
    external:     
      name: traefikself_webgateway

3.通过docker-compose logs traefik命令查看Traefik日志:

4.使用docker-compose scale whoami=3 命令扩展3个whoami应用,观察访问情况,通过CURL结果可以发现默认是轮询的wrr。

5.Traefik有一个Dashboard Web UI,可以通过网页了解当前Traefik中的运行情况和节点的健康状态。

更多参考:

官方网站(英文):https://docs.traefik.io/

使用Docker和Traefik构建微服务(英文) http://blog.hypriot.com/post/microservices-bliss-with-docker-and-traefik/

tag:traefik,docker,微服务

--end--

时间: 2024-08-01 22:34:14

利用Traefik+Docker构建可弹性扩展的微服务或服务集群的相关文章

docker swarm英文文档学习-11-上锁你的集群来保护你的加密密钥

Lock your swarm to protect its encryption key上锁你的集群来保护你的加密密钥 在Docker 1.13及更高版本中,默认情况下,群管理器使用的Raft日志在磁盘上加密.这种静止加密保护你的服务的配置和数据不受获得加密Raft日志访问权的攻击者的攻击.引入该特性的原因之一是支持新的Docker secrets特性. 当Docker重新启动时,用于加密集群节点间通信的TLS密钥和用于加密和解密磁盘Raft日志的密钥都被加载到每个管理器节点的内存中.Dock

kubernetes实战-交付dubbo服务到k8s集群(六)使用blue ocean流水线构建dubbo-consumer服务

我们这里的dubbo-consumer是dubbo-demo-service的消费者: 我们之前已经在jenkins配置好了流水线,只需要填写参数就行了. 由于dubbo-consumer用的gitee的私有仓库,需要添加公钥,这里大家可以自己找个client服务来做实验. 下面是我们通过jenkins构建的镜像,已经上传到我们的harbor私有仓库当中了: 这里我们构建了两次,构建了两个镜像,11bb9cd这个用来做模拟生产发版更新实验. 准备资源配置清单: 1.dp.yaml  红色部分根据

实战:基于spring cloud + docker构建微服务

本系列记录学习 spring-cloud-microservice-example的实战过程,并对利用spring cloud + docker 构建端到端的微服务架构技术进行解析. 0.安装前的准备,下列软件需要安装. Maven 3 Java 8 Docker Docker Compose 我的环境 Ubuntu 16.04 Java openjdk 1.8.0 Docker 18.03.1-ce docker-compose 1.8.0 1.克隆或复制工程 $ docker clone h

ubuntu14.04环境下利用docker搭建solrCloud集群

主要内容: 技术关键点:docker17.06.3安装,docker自制镜像及相关容器操作,docker分配固定IP及添加端口映射,solrCloud集群部署等 主要思路:在Ubuntu14.04操作系统的宿主机中,安装docker17.06.3,将宿主机的操作系统制作成docker基础镜像,之后使用自制的基础镜像在docker中启动3个容器,分配固定IP,再在3个容器中配置solrCloud集群. 注:solrCloud采用的solr内置jetty,需要单独配置zookeeper 容器IP及名

Docker Swarm集群部署应用

在Docker Swarm集群部署应用 我们过去使用docker run的命令创建容器, 把前面替换成docker service create就行了. 建议搭建一个registry,为所的docker主机提供镜像下载,否则你需要在每个docker主机本地存在容器镜像. 所以搭建一个私有仓库,由私有仓库提供所需要的镜像, 本实验环境中用node1同时作为registry. 拉取本地私有仓库registry,查看registry镜像 基础环境 全部为CentOS7系统,Docker 版本为1.12

如何在阿里云上构建一个合适的Kubernetes集群

摘要: 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整. 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其实即没有达到省钱的目的,也没有很好的发挥K8S集群的优势. 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整. 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其实即没有达到省钱的目的,也没有很好的发挥K8S集

Docker系列(十四):Docker Swarm集群

一.Swarm简介 Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源.Swarm和Kubernetes比较类似,但是更加轻便,具有的功能也较kubernetes更少一些. Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm 是 Do

使用Docker在本地搭建Hadoop分布式集群

学习Hadoop集群环境搭建是Hadoop入门必经之路.搭建分布式集群通常有两个办法: 要么找多台机器来部署(常常找不到机器) 或者在本地开多个虚拟机(开销很大,对宿主机器性能要求高,光是安装多个虚拟机系统就得搞半天……). 那么,问题来了! 有没有更有可行性的办法? 提到虚拟化,Docker最近很是火热!不妨拿来在本地做虚拟化,搭建Hadoop的伪分布式集群环境.虽然有点大材小用,但是学习学习,练练手也是极好的. 文章比较长,建议先倒杯水,听我慢慢到来…… 先说一下我的思路吧: 先使用Dock

docker Swarm集群配置

前言: Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合. 从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们