首页
/ Traefik Proxy 在 Kubernetes 环境中的快速入门指南

Traefik Proxy 在 Kubernetes 环境中的快速入门指南

2025-07-05 01:32:19作者:袁立春Spencer

前言

Traefik Proxy 作为一款现代化的反向代理和负载均衡器,在 Kubernetes 环境中表现出色。本文将详细介绍如何在 Kubernetes 集群中快速部署 Traefik Proxy,并通过它来代理后端应用服务。

准备工作

理解基本概念

在开始之前,我们需要明确几个关键概念:

  1. Ingress Controller:Kubernetes 中负责管理外部访问集群内服务的组件
  2. Ingress:定义外部访问规则的资源对象
  3. RBAC:基于角色的访问控制机制

权限配置

创建 ClusterRole

首先需要为 Traefik 创建适当的权限。创建一个名为 00-role.yml 的文件,内容如下:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: traefik-role

rules:
  - apiGroups: [""]
    resources: ["services", "secrets"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["discovery.k8s.io"]
    resources: ["endpointslices"]
    verbs: ["list", "watch"]
  - apiGroups: ["extensions", "networking.k8s.io"]
    resources: ["ingresses", "ingressclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["extensions", "networking.k8s.io"]
    resources: ["ingresses/status"]
    verbs: ["update"]

这个 ClusterRole 定义了 Traefik 需要访问的资源和操作权限。

创建 ServiceAccount

接下来创建 Traefik 专用的服务账号,文件名为 00-account.yml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: traefik-account

绑定角色

将角色绑定到服务账号,创建 01-role-binding.yml 文件:

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: traefik-role-binding

roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: traefik-role
subjects:
  - kind: ServiceAccount
    name: traefik-account
    namespace: default

部署 Traefik Proxy

创建 Deployment

创建 Traefik 的部署文件 02-traefik.yml

kind: Deployment
apiVersion: apps/v1
metadata:
  name: traefik-deployment
  labels:
    app: traefik

spec:
  replicas: 1
  selector:
    matchLabels:
      app: traefik
  template:
    metadata:
      labels:
        app: traefik
    spec:
      serviceAccountName: traefik-account
      containers:
        - name: traefik
          image: traefik:v3.1
          args:
            - --api.insecure
            - --providers.kubernetesingress
          ports:
            - name: web
              containerPort: 80
            - name: dashboard
              containerPort: 8080

关键配置说明:

  • --api.insecure:启用管理界面
  • --providers.kubernetesingress:使用 Kubernetes Ingress 作为配置源

创建 Service

创建两个 Service 来暴露 Traefik 的服务,文件名为 02-traefik-services.yml

apiVersion: v1
kind: Service
metadata:
  name: traefik-dashboard-service

spec:
  type: LoadBalancer
  ports:
    - port: 8080
      targetPort: dashboard
  selector:
    app: traefik
---
apiVersion: v1
kind: Service
metadata:
  name: traefik-web-service

spec:
  type: LoadBalancer
  ports:
    - targetPort: web
      port: 80
  selector:
    app: traefik

应用配置

执行以下命令应用所有配置:

kubectl apply -f 00-role.yml \
              -f 00-account.yml \
              -f 01-role-binding.yml \
              -f 02-traefik.yml \
              -f 02-traefik-services.yml

部署示例应用

部署 whoami 应用

创建一个简单的 whoami 应用作为后端服务,文件名为 03-whoami.yml

kind: Deployment
apiVersion: apps/v1
metadata:
  name: whoami
  labels:
    app: whoami

spec:
  replicas: 1
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
        - name: whoami
          image: traefik/whoami
          ports:
            - name: web
              containerPort: 80

创建 Service

为 whoami 应用创建 Service,文件名为 03-whoami-services.yml

apiVersion: v1
kind: Service
metadata:
  name: whoami

spec:
  ports:
    - name: web
      port: 80
      targetPort: web
      
  selector:
    app: whoami

创建 Ingress 规则

定义流量路由规则,文件名为 04-whoami-ingress.yml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: whoami-ingress
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: whoami
            port:
              name: web

应用配置

执行以下命令部署应用:

kubectl apply -f 03-whoami.yml \
              -f 03-whoami-services.yml \
              -f 04-whoami-ingress.yml

验证部署

访问 Dashboard

通过浏览器访问 Traefik 的管理界面:

http://<节点IP>:8080

测试应用

使用 curl 测试 whoami 应用:

curl http://<节点IP>/

进阶配置建议

  1. 使用 IngressClass:可以更精确地控制哪些 Ingress 资源由 Traefik 处理
  2. 启用 TLS:为 Ingress 添加 TLS 证书保护通信安全
  3. 使用 CRD:考虑使用 Traefik 的 Custom Resource Definitions 获得更丰富的路由功能

总结

通过本指南,您已经成功在 Kubernetes 集群中部署了 Traefik Proxy,并配置它代理了一个简单的后端应用。Traefik 的强大之处在于它的自动服务发现和动态配置能力,这使得在 Kubernetes 环境中管理入口流量变得非常简单高效。