在 Kubernetes 中使用 traefik 快速指南
- 2025-08-09 11:15:00
- 丁国栋
- 原创 16
traefik 是一个云原生应用代理服务,类似于 Nginx Ingress,用于简化和自动化Web应用的服务发现、路由以及负载均衡。它比 Nginx Ingress 的优势在于能像 Caddy 那样自动签发 SSL 证书,这样就可以很容易的实现 HTTPS 访问以及证书轮换。
traefik 在 Kubernetes 中主要依赖 Custom Resource Definitions (CRD) 。因此我们需要查看目前有哪些 traefik 的 CRD。
可能会有以下 CRD:
kubectl get crd|grep -o '.*traefik.io' ingressroutes.traefik.io ingressroutetcps.traefik.io ingressrouteudps.traefik.io middlewares.traefik.io middlewaretcps.traefik.io serverstransports.traefik.io serverstransporttcps.traefik.io tlsoptions.traefik.io tlsstores.traefik.io traefikservices.traefik.io
要在 traefik 中创建一个服务,需要创建一个 ingressroutes.traefik.io 。
apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: example-service-name-http spec: entryPoints: - web routes: - kind: Rule match: Host(`www.example.com`) services: - name: example-service-name port: 80 - kind: Rule match: Host(`example.com`) services: - name: example-service-name port: 80 --- apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: example-service-name-https spec: entryPoints: - websecure routes: - kind: Rule match: Host(`www.example.com`) services: - name: example-service-name port: 80 - kind: Rule match: Host(`example.com`) services: - name: example-service-name port: 80 tls: certResolver: myresolver上面的 yaml 文件中有两个不同的 entryPoints,分别是 HTTP 和 HTTPS 服务。HTTPS 要实现正常访问,需要将 DNS 解析到 traefik 服务自身的 Service 的 EXTERNAL-IP 上,并且解析需要生效,如果之前已经解析过,则需要等待 DNS 缓存过期。
使用 kubectl get middlewares.traefik.io 可以查看目前已经存在的 traefik 中间件。中间件这个词有很多种解释,我认为在这里比较通俗的解释就是中间件是一个过滤器,它把输入接收进来进行处理后再输出出去。过滤器可以有多个,因此中间件有多个。
最为常用的几个中间件功能:
- 重定向
- IP过滤器,实现白名单、黑名单,例如 IPAllowList
- 速率过滤器,控制速率,例如 RateLimit、InFlightReq
--
发表评论