使用 Helm 在 Kubernetes 集群安装最新版 Traefik
简单介绍
Traefik 是一个开源的边缘路由器,他负责接收系统的请求,然后使用合适的组件对这些请求进行处理。
下图为 traefik 的架构图,traefik 的官方文档地址是:https://doc.traefik.io/traefik/
核心概念
providers
Traefik 中的配置发现是通过 Providers 实现的,Provider 可以是编排工具、容器引擎、或者 KV 存储等。
支持的 Providers 文档:https://doc.traefik.io/traefik/providers/overview/#supported-providers
entrypoints
entrypoints 是 Traefik 的网络入口点,他们定义了将接收数据包的端口,以及侦听 TCP 还是 UDP。
配置文档参考:https://doc.traefik.io/traefik/routing/entrypoints/
routers
路由器负责将传入请求连接到可以处理他们的服务,在这个过程中可能会使用中间件来更新请求,或者在将请求转发给服务之前做一些处理。
配置文档参考:https://doc.traefik.io/traefik/routing/routers/#rule
middleware
附加到路由器的中间件是一种在请求发送到服务之前(或咋服务的响应发送到客户端之前)调整请求的方法。
Traefik 中有几个可用的中间件,可以修改 request、header、redirect或者进行身份认证(authentication)。
配置文档参考:https://doc.traefik.io/traefik/middlewares/overview/
services
负责配置如何到达实际服务,最终将处理传入的请求。
配置文档参考:https://doc.traefik.io/traefik/routing/services/
安装
使用 Helm 快速安装 Traefik。
确保满足以下要求:
- Kubernetes 1.14+
- Helm version 3.x is installed
因为官方在 Helm 镜像仓库的 Traefik 版本并不是最新的,所以我们要拉下官方仓库本地执行helm install
。
1 | git clone https://github.com/traefik/traefik-helm-chart |
在traefik-helm-chart
目录创建一个定制的 values 配置文件(备注:如果不熟悉配置可以使用官方默认的配置文件)。
1 | vim values-custom.yaml |
写入以下内容
1 | # values-custom.yaml |
为 Traefik 创建独立的 Namespace
1 | kubectl create ns traefik |
安装 traefik
1 | helm install -n traefik traefik ./traefik/ -f ./values-custom.yaml |
查看 traefik 的运行状态
1 | # pod |
查看 POD 的资源清单来了解 Traefik 的运行方式
1 | ➜ kubectl get pods traefik-86f478fb6f-xghzs -n traefik -o yaml |
从容器参数上可以看到entryPoints
定义了web
和websecure
两个入口,并且provider
开启了kubernetescrd
和kubernetesingress
,也就是我们既可以使用 Kubernetes 自身的Ingress
资源对象也可以使用 Traefik 自己扩展的IngressRoute
类型的 CRD 资源对象来定义入口。
使用 IngressRoute 资源清单部署一个 Traefik-Dashboard 入口
创建 dashboard.yaml 文件
1 | apiVersion: traefik.containo.us/v1alpha1 |
部署
1 | ➜ kubectl apply -f dashboard.yaml |
部署完成后如果你是在云厂商的机器上就可以使用 NODE 节点的公网 IP + Traefik 的 Service 暴露出的端口号进行访问,如果是本地环境使用内网 IP 也是如此。
至此,我们使用 Helm 在 Kubernetes 集群部署最新版 Traefik 便高一段落。
TODO List:
- 研究 Traefik CRD
- 研究 IngressRoute + Let’s Encrypt 自动生成 Https
- 研究 Traefik 中间件
- 研究 Traefik 灰度发布