Traefik配置实战:从零搭建高可用Kubernetes入口网关

6次阅读
没有评论

共计 2845 个字符,预计需要花费 8 分钟才能阅读完成。

image.webp

背景痛点

在 Kubernetes 集群中,入口网关的选择至关重要。传统方式如裸奔 Nginx 虽然直观,但在 K8s 环境下会面临诸多挑战:

Traefik 配置实战:从零搭建高可用 Kubernetes 入口网关

  • 配置维护成本高:每次服务变更都需要手动修改 Nginx 配置并 reload
  • 动态服务发现缺失:无法自动感知 K8s Service/Pod 的扩缩容
  • 功能扩展困难:需要自行实现证书管理、流量分割等高级功能

相比之下,Traefik 作为云原生边缘路由器具有显著优势:

  • 自动服务发现:实时监控 K8s API 获取服务变化
  • 声明式配置:通过 CRD 定义路由规则,与 GitOps 工作流完美契合
  • 内置中间件:开箱即用的重试、限流、熔断等能力

核心概念

Traefik 的核心架构遵循三层模型(可通过 mermaid 图解说明):

graph LR
    A[Router] --> B[Middleware]
    B --> C[Service]
  1. Router:定义流量匹配规则(host/path/headers 等)
  2. Middleware:处理请求 / 响应的中间件链(如认证、限流)
  3. Service:实际处理请求的后端服务(K8s Service)

实战演示

Helm 安装 Traefik

以下 values.yaml 包含关键配置说明:

# values.yaml
deployment:
  replicas: 2  # 高可用部署

ports:
  web:
    redirectTo: websecure  # HTTP 自动跳转 HTTPS
  websecure:
    tls:
      enabled: true

providers:
  kubernetesCRD:
    enabled: true  # 必须开启 CRD 支持

additionalArguments:
  - --entryPoints.web.http.redirections.entryPoint.to=:443
  - --certificatesresolvers.le.acme.email=your@email.com
  - --certificatesresolvers.le.acme.storage=/data/acme.json
  - --certificatesresolvers.le.acme.httpChallenge.entryPoint=web

安装命令:

helm upgrade --install traefik traefik/traefik -n kube-system -f values.yaml

IngressRoute 配置示例

实现基于路径的路由分发:

# ingressroute.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: app-routes
spec:
  entryPoints:
    - websecure
  routes:
  - match: PathPrefix(`/api`)
    kind: Rule
    services:
    - name: api-service
      port: 8000
    middlewares:
    - name: rate-limit
  - match: PathPrefix(`/static`)
    kind: Rule
    services:
    - name: frontend-service
      port: 80

tls:
  certResolver: le  # 使用 Let's Encrypt 自动证书

自动证书配置

创建 ClusterIssuer 资源:

# clusterissuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: your@email.com
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod-account-key
    solvers:
    - http01:
        ingress:
          class: traefik

高阶技巧

API 限流实现

创建 RateLimit 中间件:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: rate-limit
spec:
  rateLimit:
    average: 100  # 每秒请求数
    burst: 50     # 突发流量阈值

Dashboard 基础认证

  1. 生成密码文件:
htpasswd -c ./auth admin
  1. 创建 Secret 和 Middleware:
apiVersion: v1
kind: Secret
metadata:
  name: traefik-dashboard-auth
type: kubernetes.io/basic-auth
data:
  password: <base64 编码密码 >

---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: auth-dashboard
spec:
  basicAuth:
    secret: traefik-dashboard-auth

避坑指南

ACME 证书申请问题

常见 HTTP01 挑战失败原因:

  1. 防火墙阻止了 .well-known/acme-challenge/ 路径访问
  2. Traefik 版本与 cert-manager 不兼容
  3. 证书解析器 (le) 配置未全局生效

解决方案:

  • 使用 kubectl describe challenge 查看详细错误
  • 确保 ingressClass 与 traefik 的 –providers.kubernetesingress.ingressclass 参数一致

路由规则丢失

当 Traefik Pod 重启时,内存中的动态配置可能丢失。解决方法:

  • 启用持久化存储(通过 –providers.file.directory 参数)
  • 将关键配置通过 ConfigMap 挂载

性能调优

生产环境推荐参数:

additionalArguments:
  - --serversTransport.maxIdleConnsPerHost=10
  - --entryPoints.websecure.http.transport.respondingTimeouts.idleTimeout=90s
  - --api.insecure=false  # 务必关闭不安全 API

传统 Ingress vs IngressRoute

特性 Ingress IngressRoute
配置灵活性 高(支持复杂路由)
TLS 管理 需手动配置 支持自动证书
中间件支持 内置支持
可观测性 基础 集成 Dashboard

下一步学习

  1. 通过 Header/Cookie 实现 Canary 发布
  2. 集成 OpenTelemetry 实现分布式追踪
  3. 配置 TCP 路由支持数据库暴露
  4. 研究 Traefik Pilot 的云监控功能

建议实操路线:从单服务路由开始,逐步添加中间件,最后实现全站 HTTPS 与监控集成。遇到问题时多查阅 Traefik 官方文档的 Middlewares 章节,其中包含每个参数的详细说明。

正文完
 0
评论(没有评论)