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 最新的三个次要版本。 对于更旧的版本,无法保证基本功能正常运行。
-
安装或更新 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.yamlexperimentalChannel需要 Experimental 通道 CRDexperimentalChannel选项会让 Traefik 监听TCPRoute和TLSRoute资源,而 Standard 通道 CRD 不提供这些资源。如果未安装 Experimental 通道 CRD(experimental-install.yaml)就启用该选项,Kubernetes Gateway 提供者将无法启动:所有 Gateway API 资源都无法提供服务,而不只是TCPRoute和TLSRoute。Traefik 会继续运行,其他提供者也不受影响。 -
如果未使用 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 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。