跳到正文
Træfɪk

Traefik 与 Knative

Traefik Knative 提供者与 Knative Serving 集成,为无服务器应用提供高级流量管理和路由能力。

Knative 是一个基于 Kubernetes 的平台,通过缩容至零、自动扩缩容和修订管理等功能支持无服务器工作负载。

该提供者监听 Knative Ingress 资源,并自动配置 Traefik 路由规则,让 Traefik 的网络能力与 Knative 的无服务器平台无缝集成。

要求

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

  1. 安装或更新 Knative CRD。

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.20.0/serving-crds.yaml
  2. 安装 Knative Serving 核心组件。

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.20.0/serving-core.yaml
  3. 更新 config-network 配置,以使用 Traefik ingress 类。

       kubectl patch configmap/config-network \
       -n knative-serving \
       --type merge \
       -p '{"data":{"ingress.class":"traefik.ingress.networking.knative.dev"}}'
  4. 在 Knative 配置中添加自定义域名(可选)。

    kubectl patch configmap config-domain \
      -n knative-serving \
      --type='merge' \
      -p='{"data":{"example.com":""}}'
  5. 安装或更新 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=true

Knative 提供者使用 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 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。


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

文档由 HeadFile Studio 翻译。

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