跳转至

Kubernetes

Kubernetes 的 Ingress Controller,自定义资源的方式。

之前 Traefik 只能够通过 [Kubernetes Ingress provider] 来支持 Kubernetes,这是严格意义上的 Kubernetes Ingress 控制器。

但是,由于社区表达了需要从 Traefik 优秀特性中获益而不需要使用大量的 annotations 注解,我们最终编写了一个名为 IngressRoute 的 自定义资源类型,可以提供更好的方式来配置对 Kubernetes 集群的访问。

资源配置

可以查看 路由 部分的配置文档。

Provider 配置

endpoint

可许,默认为空

[providers.kubernetesCRD]
  endpoint = "http://localhost:8080"
  # ...
providers:
  kubernetesCRD:
    endpoint = "http://localhost:8080"
    # ...
--providers.kubernetescrd.endpoint="http://localhost:8080"

Kubernetes 服务端点作为 URL,则仅在以下基于环境变量的方式无效的时候才使用。

当部署到 Kubernetes 集群中时,Traefik 会读取环境变量 KUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORT 或者 KUBECONFIG 来构造 Kubernetes 的服务端点。

访问的 token 位于容器中/var/run/secrets/kubernetes.io/serviceaccount/token 以及 SSL 的 CA 证书 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt。这两个文件都是 Traefik 部署后自动 mount 到 Pod 里面去的,所以默认就可以获得。

当找不到环境变量时,Traefik 会尝试使用外部集群客户端连接到 Kubernetes APIServer。这种情况下面,endpoint 选项就是必须设置的了。

具体来说,可以将其设置为 kubectl proxy 的 URL 来使用关联的 kubeconfig 授予的身份验证和授权连接到 Kubernetes 集群。

token

可选,默认为空

[providers.kubernetesCRD]
  token = "mytoken"
  # ...
providers:
  kubernetesCRD:
    token = "mytoken"
    # ...
--providers.kubernetescrd.token="mytoken"

用于 Kubernetes 客户端配置的 Bearer Token。

certAuthFilePath

可选,默认为空

[providers.kubernetesCRD]
  certAuthFilePath = "/my/ca.crt"
  # ...
providers:
  kubernetesCRD:
    certAuthFilePath: "/my/ca.crt"
    # ...
--providers.kubernetescrd.certauthfilepath="/my/ca.crt"

CA 证书文件路径,用于 Kubernetes 客户端配置。

namespaces

可选, 默认: 所有 namespaces (空数组)

[providers.kubernetesCRD]
  namespaces = ["default", "production"]
  # ...
providers:
  kubernetesCRD:
    namespaces:
    - "default"
    - "production"
    # ...
--providers.kubernetescrd.namespaces="default,production"

要 watch 的命名空间数组。

labelselector

可选,默认为空 (处理所有的 Ingresses)

[providers.kubernetesCRD]
  labelselector = "A and not B"
  # ...
providers:
  kubernetesCRD:
    labelselector: "A and not B"
    # ...
--providers.kubernetescrd.labelselector="A and not B"

默认情况下,Traefik 处理配置的命名空间下面的所有 Ingress 对象,也可以通过指定一个 label seletor 来过滤特定的 Ingress 对象。

点击查看更多 label-selectors 详细信息。

ingressClass

默认为空

[providers.kubernetesCRD]
  ingressClass = "traefik-internal"
  # ...
providers:
  kubernetesCRD:
    ingressClass: "traefik-internal"
    # ...
--providers.kubernetescrd.ingressclass="traefik-internal"

标记被处理的 Ingress 对象的 annotation kubernetes.io/ingress.class 的值。如果该参数只非空,则只处理包含具有相同值的 annotation 的 Ingress 对象。否则,将处理没有 annotation 注解,或者值为空或者为 traefik 的 Ingress 对象。

throttleDuration

可选,默认为0 (没有限流)

[providers.kubernetesCRD]
  throttleDuration = "10s"
  # ...
providers:
  kubernetesCRD:
    throttleDuration: "10s"
    # ...
--providers.kubernetescrd.throttleDuration="10s"

未来

可以查看使用 Let's Encrypt 的 完整示例