在 Kubernetes 中使用 traefik 快速指南

2025-08-09 11:15:00
丁国栋
原创 16
摘要:本文记录和汇总在 Kubernetes 中使用 traefik。

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 中间件。中间件这个词有很多种解释,我认为在这里比较通俗的解释就是中间件是一个过滤器,它把输入接收进来进行处理后再输出出去。过滤器可以有多个,因此中间件有多个。

最为常用的几个中间件功能:

--

发表评论
博客分类