Traefik 与 Knative¶
Traefik Knative 提供者与 Knative Serving 集成,为无服务器应用提供高级流量管理和路由能力。
Knative 是一个基于 Kubernetes 的平台,通过缩容至零、自动扩缩容和修订管理等功能支持无服务器工作负载。
该提供者监听 Knative Ingress 资源,并自动配置 Traefik 路由规则,让 Traefik 的网络能力与 Knative 的无服务器平台无缝集成。
要求¶
Traefik 遵循 Kubernetes 支持策略, 至少支持 Kubernetes 最新的三个次要版本。 对于更旧的版本,无法保证基本功能正常运行。
-
安装或更新 Knative CRD。
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.20.0/serving-crds.yaml -
安装 Knative Serving 核心组件。
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.20.0/serving-core.yaml -
更新 config-network 配置,以使用 Traefik ingress 类。
kubectl patch configmap/config-network \ -n knative-serving \ --type merge \ -p '{"data":{"ingress.class":"traefik.ingress.networking.knative.dev"}}' -
在 Knative 配置中添加自定义域名(可选)。
kubectl patch configmap config-domain \ -n knative-serving \ --type='merge' \ -p='{"data":{"example.com":""}}' -
安装或更新 Traefik RBAC。
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.7/docs/content/reference/dynamic-configuration/kubernetes-knative-rbac.yml
配置示例¶
由于该提供者是一项实验性功能,必须同时在配置的 experimental 部分和 provider 部分启用它。可以按以下方式启用 Knative 提供者:
experimental:
knative: true
providers:
knative: {}[experimental.knative]
[providers.knative]--experimental.knative=true
--providers.knative=trueKnative 提供者使用 Knative API 获取路由配置。随后,该提供者监听传入的 Knative 事件,并据此生成相应的动态配置。
配置选项¶
| 字段 | 说明 | 默认值 | 必填 |
|---|---|---|---|
providers.providersThrottleDuration |
配置重新加载后,等待至少这么长时间,才会处理任何新的配置刷新事件。 如果在此期间发生多个事件,只会处理最新事件,其余事件全部丢弃。 此选项不能针对单个提供者设置,但节流算法会独立应用于每个提供者。 |
2s | 否 |
| providers.knative.endpoint | 服务器端点 URL。 更多信息请参阅此处。 |
||
| providers.knative.token | 用于 Kubernetes 客户端配置的 Bearer 令牌。 | ||
| providers.knative.certAuthFilePath | 证书颁发机构文件的路径。 用于 Kubernetes 客户端配置。 |
||
| providers.knative.namespaces | 要监听的命名空间数组。 留空则监听所有命名空间。 |
||
| providers.knative.labelSelector | 允许使用标签选择器过滤 Knative Ingress 对象。 | ||
| providers.knative.throttleDuration | 生成新配置前,两个 Kubernetes 事件之间至少需要等待的时间。 这可以防止每秒更新多次的 Kubernetes 集群持续修改 Traefik 配置。 留空则捕获每个事件。 |
0 | |
| providers.knative.privateEntrypoints | 用于私有暴露 Ingress 的入口点名称。留空则跳过本地 Ingress。 | ||
| providers.knative.privateService | 用于私有暴露网络控制器的 Kubernetes 服务。 | ||
| providers.knative.privateService.desc | 私有 Kubernetes 服务的名称。 | ||
| providers.knative.privateService.namespace | 私有 Kubernetes 服务的命名空间。 | ||
| providers.knative.publicEntrypoints | 用于公开暴露 Ingress 的入口点名称。留空则在所有入口点上暴露 Ingress。 | ||
| providers.knative.publicService | 用于公开暴露网络控制器的 Kubernetes 服务。 | ||
| providers.knative.publicService.desc | 公开 Kubernetes 服务的名称。 | ||
| providers.knative.publicService.namespace | 公开 Kubernetes 服务的命名空间。 |
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 会尝试使用集群外客户端连接 Knative API 服务器。这种情况下必须指定端点。具体而言,可以将其设置为 kubectl proxy 使用的 URL,以使用关联 kubeconfig 授予的身份认证和授权连接 Knative 集群。
providers:
knative:
endpoint: "http://localhost:8080"
# ...[providers.knative]
endpoint = "http://localhost:8080"
# ...--providers.knative.endpoint=http://localhost:8080路由配置¶
请参阅路由中的专门章节。
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为 Traefik OSS 增加企业级 API 网关能力或商业支持。
为 Traefik OSS 增加 API 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。