标签(Labels)和容器(Containers)的故事~
给你的容器(Containers)加上标签(Labels),剩下的事情就交给 Traefik
路由配置(动态)
Traefik 动态更新自己的配置依不同的 provider 类型 而定,
当 Docker 作为 Traefik 的 provider 时,
那么 Traefik 将使用容器(Container)的标签(Labels)来检索(retrieve)它(Traefik)的路由配置~
本章内容同样适应(Docker Swarm Mode),
但只讲解 Docker 部分,关于 Docker Swarm Mode,请自己阅读官方文档 - Docker Swarm Mode
以标签的方式配置路由
默认情况下,Traefik 监视一个孤立 Docker Engine 上的 container level labels
例如:1
docker run --label traefik.http.routers.my-container.rule=Host(`example.com`) ...
当然使用 Docker Compose 时,标签(labels)是使用 “services” objects 的 labels 来声明的。
例如:1
2
3
4
5
6
7version: "3"
services:
my-container:
# ...
labels:
- traefik.http.routers.my-container.rule=Host(`example.com`)
和 K8s 一样,推荐使用第二种有 yaml 的,这样有记录可寻~
请注意,任何能够用标签(labels)定义 Docker 容器的工具,如 Nomad、Terraform、Ansible 等都可以与 [Traefik & Docker provider] 这种模式一起使用。
检测(Detection)端口
Traefik 通过 Docker API 来检索(retrieves)容器(containers)的私有 IP 和端口。
端口检测的工作原理如下:
1 | - "traefik.http.services.myservice.loadbalancer.server.port=8080" |
Provider 配置(静态)
Traefik 需要访问 Docker 套接字才能获取其动态配置。
你可以使用指示符(directive) endpoint
,来具体指定 Docker API 的 Endpoint
1 | providers: |
使用 Docker 18.09+ 以后的版本还可以使用 SHH1
2
3providers:
docker:
endpoint: "ssh://traefik@192.168.2.5:2022"
应该是给 Docker 和 Traefik 不是安装在同一台机器上用的,
所以需要 SHH 的 Keys 和 说明那个用户~
还有各种各样的配置,请查询 官方文档 - Provider Configuration
其它 Provider
当 File 作为 Traefik 的 provider 时,Traefik 就和 nginx 很类似了~
实践
文档还是官方的全,我不想搬运~
主要是提供与官方文档不同的阅读顺序,更好地从简单到全面地入门。
接下来按下面的官方图来实践一下吧~
规划一下:
http://xxx.com/who 路由到 containous/whoami
镜像所运行的容器
http://xxx.com/hi 路由到 crccheck/hello-world
镜像所运行的容器
whoami 这个镜像运行的提供的 Paths 有,请看 GitHub 的 Paths 部分