跳到正文
Træfɪk

开始使用 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 文件。此配置:

# 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/

Traefik 仪表盘截图

部署示例应用

创建 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,验证应用是否已正确暴露:

whoami 应用截图

使用 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,验证应用是否已正确暴露:

whoami 应用截图

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

Traefik 仪表盘 HTTP 路由部分截图

完成了!您已在 Kubernetes 集群中成功部署 Traefik 并配置路由。

后续步骤


在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为 Traefik OSS 增加企业级 API 网关能力或商业支持。

为 Traefik OSS 增加 API 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。


版权所有 © 头文件软件工作室

文档由 HeadFile Studio 翻译。

Traefik v3.7 中文快照 · 原文版权归 Traefik Labs 及贡献者所有 · MIT 许可证