一文搞懂 Traefik2.1 的使用

Traefik<https://containo.us/traefik/> 是一个开源的可以使服务发布变得轻松有趣的边缘路由器 。它负责接收你系统的请求,然后使用合适的组件来对这些请求进行处理 。
除了众多的功能之外,Traefik 的与众不同之处还在于它会自动发现适合你服务的配置 。当 Traefik 在检查你的服务时,会找到服务的相关信息并找到合适的服务来满足对应的请求 。
Traefik 兼容所有主流的集群技术,比如 Kubernetes,Docker,Docker Swarm,AWS,Mesos,Marathon,等等;并且可以同时处理多种方式 。(甚至可以用于在裸机上运行的比较旧的软件 。)

一文搞懂 Traefik2.1 的使用

文章插图
traefik architecture
使用 Traefik,不需要维护或者同步一个独立的配置文件:因为一切都会自动配置,实时操作的(无需重新启动,不会中断连接) 。使用 Traefik,你可以花更多的时间在系统的开发和新功能上面,而不是在配置和维护工作状态上面花费大量时间 。
核心概念Traefik 是一个边缘路由器,是你整个平台的大门,拦截并路由每个传入的请求:它知道所有的逻辑和规则,这些规则确定哪些服务处理哪些请求;传统的反向代理需要一个配置文件,其中包含路由到你服务的所有可能路由,而 Traefik 会实时检测服务并自动更新路由规则,可以自动服务发现 。
一文搞懂 Traefik2.1 的使用

文章插图
traefik architecture overview
首先,当启动 Traefik 时,需要定义 entrypoints(入口点),然后,根据连接到这些 entrypoints 的路由来分析传入的请求,来查看它们是否与一组规则相匹配,如果匹配,则路由可能会将请求通过一系列中间件转换过后再转发到你的服务商去 。在了解 Traefik 之前有几个核心概念我们必须要了解:
  • Providers 用来自动发现平台上的服务,可以是编排工具、容器引擎或者 key-value 存储等,比如 Docker、Kubernetes、File
  • Entrypoints 监听传入的流量(端口等…),是网络入口点,它们定义了接收请求的端口(HTTP 或者 TCP) 。
  • Routers 分析请求(host, path, headers, SSL, …),负责将传入请求连接到可以处理这些请求的服务上去 。
  • Services 将请求转发给你的应用(load balancing, …),负责配置如何获取最终将处理传入请求的实际服务 。
  • Middlewares 中间件,用来修改请求或者根据请求来做出一些判断(authentication, rate limiting, headers, …),中间件被附件到路由上,是一种在请求发送到你的服务之前(或者在服务的响应发送到客户端之前)调整请求的一种方法 。
安装由于 Traefik 2.X 版本和之前的 1.X 版本不兼容,我们这里选择功能更加强大的 2.X 版本来和大家进行讲解,我们这里使用的镜像是 traefik:2.1.1 。
在 Traefik 中的配置可以使用两种不同的方式:
  • 动态配置:完全动态的路由配置
  • 静态配置:启动配置
静态配置中的元素(这些元素不会经常更改)连接到 providers 并定义 Treafik 将要监听的 entrypoints 。
在 Traefik 中有三种方式定义静态配置:在配置文件中、在命令行参数中、通过环境变量传递
动态配置包含定义系统如何处理请求的所有配置内容,这些配置是可以改变的,而且是无缝热更新的,没有任何请求中断或连接损耗 。
安装 Traefik 到 Kubernetes 集群中的资源清单文件我这里提前准备好了,直接执行下面的安装命令即可:
$ kubectl Apply -f https://www.qikqiak.com/k8strain/network/manifests/traefik/crd.yaml$ kubectl apply -f https://www.qikqiak.com/k8strain/network/manifests/traefik/rbac.yaml$ kubectl apply -f https://www.qikqiak.com/k8strain/network/manifests/traefik/deployment.yaml$ kubectl apply -f https://www.qikqiak.com/k8strain/network/manifests/traefik/dashboard.yaml其中 deployment.yaml 我这里是固定到 master 节点上的,如果你需要修改可以下载下来做相应的修改即可 。我们这里是通过命令行参数来做的静态配置:
args:- --entryPoints.web.address=:80- --entryPoints.websecure.address=:443- --api=true- --api.dashboard=true- --ping=true- --providers.kubernetesingress- --providers.kubernetescrd- --log.level=INFO- --accesslog其中前两项配置是来定义 web 和 websecure 这两个入口点的,--api=true 开启,=,就会创建一个名为 api@internal 的特殊 service,在 dashboard 中可以直接使用这个 service 来访问,然后其他比较重要的就是开启 kubernetesingress 和 kubernetescrd 这两个 provider 。
dashboard.yaml 中定义的是访问 dashboard 的资源清单文件,可以根据自己的需求修改 。


推荐阅读