跳到正文
Træfɪk

Traefik 与采用 Gateway API 的 Kubernetes

Kubernetes Gateway 提供者是 Traefik 对 Kubernetes 特别兴趣小组(SIG)制定的 Gateway API 规范的实现。

该提供者支持 Gateway API 规范的 Standard 版本 v1.6.3。

它完整支持 HTTPRoute 的所有核心功能及部分扩展功能,例如来自 Standard 通道的 BackendTLSPolicy、GRPCRoute 和 TLSRoute 资源,以及来自 Experimental 通道的 TCPRoute。

更多详情请参阅符合性报告。

使用 Helm Chart

使用 Traefik Helm Chart 时,RBAC(基于角色的访问控制)会自动为您管理。

要求

Traefik 遵循 Kubernetes 支持策略, 至少支持 Kubernetes 最新的三个次要版本。 对于更旧的版本,无法保证基本功能正常运行。

  1. 安装或更新 Kubernetes Gateway API CRD。

    # Install Gateway API CRDs from the Standard channel.
    kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.3/standard-install.yaml

    experimentalChannel 需要 Experimental 通道 CRD

    experimentalChannel 选项会让 Traefik 监听 TCPRoute 和 TLSRoute 资源,而 Standard 通道 CRD 不提供这些资源。如果未安装 Experimental 通道 CRD(experimental-install.yaml)就启用该选项,Kubernetes Gateway 提供者将无法启动:所有 Gateway API 资源都无法提供服务,而不只是 TCPRoute 和 TLSRoute。Traefik 会继续运行,其他提供者也不受影响。

  2. 如果未使用 Helm Chart,请安装或更新 Gateway API 所需的 Traefik RBAC。

    # Install Traefik RBACs for Gateway API.
    kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.7/docs/content/reference/dynamic-configuration/kubernetes-gateway-rbac.yml

配置示例

可以按以下方式启用 kubernetesGateway 提供者:

providers:
  kubernetesGateway: {}
  # ...
[providers.kubernetesGateway]
# ...
--providers.kubernetesgateway=true
## Values file
providers:
  kubernetesGateway:
    enabled: true

配置选项

字段 说明 默认值 必填
providers.providersThrottleDuration 配置重新加载后,等待至少这么长时间,才会处理任何新的配置刷新事件。
如果在此期间发生多个事件,只会处理最新事件,其余事件全部丢弃。
此选项不能针对单个提供者设置,但节流算法会独立应用于每个提供者。
2s 否
providers.kubernetesGateway.endpoint 服务器端点 URL。
更多信息请参阅此处。
"" 否
providers.kubernetesGateway.experimentalChannel 切换是否支持 Experimental 通道资源(Gateway API 发布通道文档)。
(例如:TCPRoute)
需要在集群中安装 Experimental 通道 CRD,请参阅要求。
false 否
providers.kubernetesGateway.token 用于 Kubernetes 客户端配置的 Bearer 令牌。接受直接提供的令牌值,或包含令牌的文件路径。 "" 否
providers.kubernetesGateway.certAuthFilePath 证书颁发机构文件的路径。
用于 Kubernetes 客户端配置。
"" 否
providers.kubernetesGateway.namespaces 要监听的命名空间数组。
留空则监听所有命名空间。
[] 否
providers.kubernetesGateway.labelSelector 仅允许过滤 GatewayClass。留空时,Traefik 处理所有 GatewayClass 对象。
详情请参阅标签选择器。
"" 否
providers.kubernetesGateway.gateways 将提供者的范围限定为特定 Gateway。 [] 否
providers.kubernetesGateway.gateways[0].name Gateway 名称。 "" 否
providers.kubernetesGateway.gateways[0].namespace Gateway 命名空间。 "" 否
providers.kubernetesGateway.throttleDuration 生成新配置前,两个 Kubernetes 事件之间至少需要等待的时间。
这可以防止每秒更新多次的 Kubernetes 集群持续修改 Traefik 配置。
留空则捕获每个事件。
0s 否
providers.kubernetesGateway.nativeLBByDefault 定义是否默认使用 Kubernetes 原生负载均衡模式。更多信息请参阅 traefik.io/service.nativelb 服务注解文档。 false 否
providers.kubernetesGateway.
statusAddress.hostname
复制到 Gateway status.addresses 的主机名。 "" 否
providers.kubernetesGateway.
statusAddress.ip
复制到 Gateway status.addresses 的 IP 地址,目前仅支持一个 IP 值(IPv4 或 IPv6)。 "" 否
providers.kubernetesGateway.
statusAddress.service.namespace
要从中复制状态地址的 Kubernetes 服务所在的命名空间。
使用 External-DNS 等第三方工具时,可以通过此选项将服务的 loadbalancer.status(包含服务端点的 IP)复制到 Gateway status.addresses。
"" 否
providers.kubernetesGateway.
statusAddress.service.name
要从中复制状态地址的 Kubernetes 服务的名称。
使用 External-DNS 等第三方工具时,可以通过此选项将服务的 loadbalancer.status(包含服务端点的 IP)复制到 Gateway status.addresses。
"" 否
providers.kubernetesGateway.crossProviderNamespaces 允许 Gateway API 路由(HTTPRoute、TCPRoute、TLSRoute)从中声明 kind 为 TraefikService 的 backendRef 的命名空间列表。
未设置时允许所有命名空间。设置为 [] 时,拒绝每个此类 backendRef,并丢弃相应路由。
[] 否
providers.kubernetesGateway.qps 定义发往 Kubernetes API 服务器的最大 QPS。设置为负值将禁用客户端限流。 50 否
providers.kubernetesGateway.burst 定义发往 Kubernetes API 服务器的最大突发请求数。 100 否

endpoint

Kubernetes 服务器的端点 URL。

部署到 Kubernetes 中时,Traefik 会读取环境变量 KUBERNETES_SERVICE_HOST 和 KUBERNETES_SERVICE_PORT,或 KUBECONFIG,以构造端点。

访问令牌从 /var/run/secrets/kubernetes.io/serviceaccount/token 读取,SSL CA 证书从 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt 读取。部署在 Kubernetes 内部时,两者都会自动挂载。

可以指定端点,以覆盖集群内环境变量的值。

找不到环境变量时,Traefik 会尝试使用集群外客户端连接 Kubernetes API 服务器。这种情况下必须指定端点。具体而言,可以将其设置为 kubectl proxy 使用的 URL,以使用关联 kubeconfig 授予的身份认证和授权连接 Kubernetes 集群。

providers:
  kubernetesGateway:
    endpoint: "http://localhost:8080"
    # ...
[providers.kubernetesGateway]
  endpoint = "http://localhost:8080"
  # ...
--providers.kubernetesgateway.endpoint=http://localhost:8080

路由配置

请参阅路由中的专门章节。

路由配置

使用 Kubernetes Gateway API 提供者时,Traefik 通过 Gateway API CRD 获取路由配置。请参阅 Gateway API 概念文档,以及 Traefik 文档中专门的路由章节。


在生产环境使用 Traefik OSS?

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

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


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

文档由 HeadFile Studio 翻译。

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