1、应用简介
Traefik是一种现代 HTTP 反向代理和负载均衡器,可以轻松部署微服务。Traefik 与您现有的基础设施组件(Docker、Swarm mode、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS等)集成,并自动动态配置自身。将 Traefik 指向您的编排器应该是您需要的唯一配置步骤。
特征:
动态更新配置
支持多种负载均衡算法
通过利用Let’s Encrypt (通配符证书支持)为您的微服务提供 HTTPS
支持断路器,重试
一个 Web UI
支持Websocket、HTTP/2、GRPC 就绪
提供指标(Rest、Prometheus、Datadog、Statsd、InfluxDB)
保留访问日志(JSON、CLF)
快速
公开一个 Rest API
打包为单个二进制文件并作为官方docker 镜像提供
2、架构
3、Traefik的核心概念及能力
traefik处理请求的架构图
这其中涉及到几个重要的核心组件。
- Providers
- Entrypoints
- Routers
- Services
- Middlewares
- Providers
Providers是基础组件,Traefik的配置发现是通过它来实现的,它可以是协调器,容器引擎,云提供商或者键值存储。Traefik通过查询Providers的API来查询路由的相关信息,一旦检测到变化,就会动态的更新路由。
Entrypoints是Traefik的网络入口,它定义接收请求的接口,以及是否监听TCP或者UDP。
Routers主要用于分析请求,并负责将这些请求连接到对应的服务上去,在这个过程中,Routers还可以使用Middlewares来更新请求,比如在把请求发到服务之前添加一些Headers。
Services负责配置如何到达最终将处理传入请求的实际服务。
Middlewares用来修改请求或者根据请求来做出一些判断(authentication, rate limiting, headers, …),中间件被附件到路由上,是一种在请求发送到你的服务之前(或者在服务的响应发送到客户端之前)调整请求的一种方法。
4、部署
本文通过helm方式来部署
helm repo add traefik https://helm.traefik.io/traefik
helm pull traefik/traefik
tar xf traefik-10.24.0.tgz
cd traefik
修改value.yml
service:
type: ClusterIP
ports:
traefik:
port: 9000
expose: true
web:
port: 8000
hostPort: 80
expose: true
websecure:
port: 8443
hostPort: 443
expose: true
persistence:
enabled: true
name: data
accessMode: ReadWriteOnce
size: 10Gi
storageClass: ""
path: /data
部署traefik
kubectl create ns ingress
helm install traefik . -n ingress
5、访问dashboard
部署traefik的dashboard
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard
namespace: kube-system
spec:
entryPoints:
- web
routes:
- kind: Rule
match: Host(`traefik.bgxwz.com`)
services:
- kind: TraefikService
name: api@internal
dashboard的界面如下图:
评论区