Traefik Proxy 在 Kubernetes 环境中的快速入门指南
2025-07-05 01:32:19作者:袁立春Spencer
前言
Traefik Proxy 作为一款现代化的反向代理和负载均衡器,在 Kubernetes 环境中表现出色。本文将详细介绍如何在 Kubernetes 集群中快速部署 Traefik Proxy,并通过它来代理后端应用服务。
准备工作
理解基本概念
在开始之前,我们需要明确几个关键概念:
- Ingress Controller:Kubernetes 中负责管理外部访问集群内服务的组件
- Ingress:定义外部访问规则的资源对象
- 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>/
进阶配置建议
- 使用 IngressClass:可以更精确地控制哪些 Ingress 资源由 Traefik 处理
- 启用 TLS:为 Ingress 添加 TLS 证书保护通信安全
- 使用 CRD:考虑使用 Traefik 的 Custom Resource Definitions 获得更丰富的路由功能
总结
通过本指南,您已经成功在 Kubernetes 集群中部署了 Traefik Proxy,并配置它代理了一个简单的后端应用。Traefik 的强大之处在于它的自动服务发现和动态配置能力,这使得在 Kubernetes 环境中管理入口流量变得非常简单高效。