开始使用 Kubernetes 与 Traefik¶
Traefik 原生支持 Kubernetes 资源和最新 Kubernetes 标准,为 Kubernetes 提供一等支持。 无论您使用 Traefik 的 IngressRoute CRD、Ingress 还是 Kubernetes Gateway API, Traefik 都能为 Kubernetes 流量管理提供顺畅的体验。
本指南介绍如何:
- 使用 k3d 创建 Kubernetes 集群
- 使用 Helm 安装 Traefik
- 暴露 Traefik 仪表盘
- 部署示例应用
- 使用 IngressRoute 和 Gateway API 配置基本路由
前提条件¶
- Kubernetes
- Helm 3
- kubectl
- k3d(用于创建本地集群)
创建 Kubernetes 集群¶
使用 k3d¶
通过以下命令创建集群。此命令:
- 创建名为“traefik”的 k3d 集群
- 将 80、443 和 8000 端口映射到负载均衡器,用于访问服务
- 禁用内置 Traefik 入口控制器以避免冲突
k3d cluster create traefik \
--port 80:80@loadbalancer \
--port 443:443@loadbalancer \
--port 8000:8000@loadbalancer \
--k3s-arg "--disable=traefik@server:0"
配置 kubectl:
kubectl cluster-info --context k3d-traefik
安装 Traefik¶
使用 Helm Values 文件¶
添加 Traefik Helm 仓库:
helm repo add traefik https://traefik.github.io/charts
helm repo update
创建 values 文件。此配置:
- 将 80 和 443 端口映射到 web 和 websecure 入口点
- 启用仪表盘,并设置特定的主机名规则
- 启用 Kubernetes Gateway API 提供者
- 允许 Gateway 暴露所有命名空间中的 HTTPRoute
# values.yaml
ingressRoute:
dashboard:
enabled: true
matchRule: Host(`dashboard.localhost`)
entryPoints:
- web
providers:
kubernetesGateway:
enabled: true
gateway:
listeners:
web:
namespacePolicy:
from: All
提示
使用 Helm chart 时,KubernetesCRD 提供者默认启用,因此无需在 values 文件中设置它。
安装 Traefik:
helm install traefik traefik/traefik -f values.yaml --wait
使用 Helm CLI 参数¶
您也可以使用 CLI 参数安装 Traefik。此命令:
- 将
30000和30001端口映射到 web 和 websecure 入口点 - 启用仪表盘,并设置特定的主机名规则
- 启用 Kubernetes Gateway API 提供者
- 允许 Gateway 暴露所有命名空间中的 HTTPRoute
helm install traefik traefik/traefik --wait \
--set ingressRoute.dashboard.enabled=true \
--set ingressRoute.dashboard.matchRule='Host(`dashboard.localhost`)' \
--set ingressRoute.dashboard.entryPoints={web} \
--set providers.kubernetesGateway.enabled=true \
--set gateway.listeners.web.namespacePolicy.from=All
提示
使用 Helm chart 时,KubernetesCRD 提供者默认启用,因此无需在 CLI 参数中设置它。
安装 Traefik 时如果启用了 Gateway API 提供者,它会自动创建名为 traefik 的默认 GatewayClass:
kubectl describe GatewayClass traefik
暴露仪表盘¶
仪表盘通过 Chart 提供的 IngressRoute 暴露,与安装时在 Helm values 中定义的一致。
通过以下地址访问:
http://dashboard.localhost/dashboard/

部署示例应用¶
创建 Deployment:
# whoami.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: whoami
spec:
replicas: 2
selector:
matchLabels:
app: whoami
template:
metadata:
labels:
app: whoami
spec:
containers:
- name: whoami
image: traefik/whoami
ports:
- containerPort: 80
创建 Service:
# whoami-service.yaml
apiVersion: v1
kind: Service
metadata:
name: whoami
spec:
ports:
- port: 80
selector:
app: whoami
应用清单:
kubectl apply -f whoami.yaml
kubectl apply -f whoami-service.yaml
使用 IngressRoute(CRD)暴露应用¶
创建 IngressRoute:
# whoami-ingressroute.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: whoami
spec:
entryPoints:
- web
routes:
- match: Host(`whoami.localhost`)
kind: Rule
services:
- name: whoami
port: 80
应用清单:
kubectl apply -f whoami-ingressroute.yaml
测试部署¶
您可以使用以下 curl 命令,验证应用是否已正确暴露:
curl http://whoami.localhost
Hostname: whoami-76c9859cfc-6v8hh
IP: 127.0.0.1
IP: ::1
IP: 10.42.0.11
IP: fe80::20ad:eeff:fe44:a63
RemoteAddr: 10.42.0.9:38280
GET / HTTP/1.1
Host: whoami.localhost
User-Agent: curl/8.7.1
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 127.0.0.1
X-Forwarded-Host: whoami.localhost
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: traefik-598946cd7-zds59
X-Real-Ip: 127.0.0.1
您也可以在浏览器中访问 http://whoami.localhost,验证应用是否已正确暴露:

使用 Gateway API 暴露应用¶
Traefik 支持 Kubernetes Gateway API 规范,它提供了一种更标准化的 Kubernetes 入口配置方式。 前面安装 Traefik 时,我们已启用 Gateway API 提供者。 您可以在 Traefik 仪表盘的提供者部分确认这一点。

要使用 Gateway API:
在集群中安装 Gateway API CRD:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.3/standard-install.yaml
创建 HTTPRoute。此配置:
- 创建名为“whoami”的 HTTPRoute
- 将其附加到 Traefik 安装期间创建的默认 Gateway
- 配置主机名“whoami-gatewayapi.localhost”的路由
- 将所有流量路由到 whoami 服务的 80 端口
# httproute.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: whoami
spec:
parentRefs:
- name: traefik-gateway
hostnames:
- "whoami-gatewayapi.localhost"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: whoami
port: 80
应用清单:
kubectl apply -f httproute.yaml
测试部署¶
您可以使用以下 curl 命令,验证应用是否已正确暴露:
curl http://whoami-gatewayapi.localhost
Hostname: whoami-76c9859cfc-6v8hh
IP: 127.0.0.1
IP: ::1
IP: 10.42.0.11
IP: fe80::20ad:eeff:fe44:a63
RemoteAddr: 10.42.0.9:38280
GET / HTTP/1.1
Host: whoami.localhost
User-Agent: curl/8.7.1
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 127.0.0.1
X-Forwarded-Host: whoami.localhost
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: traefik-598946cd7-zds59
X-Real-Ip: 127.0.0.1
现在,您可以在浏览器中访问 http://whoami.localhost,验证应用是否已正确暴露:

进入 Traefik 仪表盘的 HTTP Routes(HTTP 路由) 部分,可以看到 whoami.localhost 路由由 Traefik Kubernetes Gateway API 提供者管理:

完成了!您已在 Kubernetes 集群中成功部署 Traefik 并配置路由。
后续步骤¶
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为 Traefik OSS 增加企业级 API 网关能力或商业支持。
为 Traefik OSS 增加 API 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。