Kubernetes¶
Kubernetes 的 Ingress Controller。
Traefik 的 Kubernetes Ingress provider 是一个 Kubernetes Ingress Controller;也就是说,它通过支持 Ingress 规范来管理对集群服务的访问。
开启 Ingress provider¶
通常,我们可以通过静态配置来启用 Kubernetes Ingress Provider:
[providers.kubernetesIngress]
providers:
kubernetesIngress: {}
--providers.kubernetesingress=true
然后这个 provider 回去 watch 传入 ingress 的事件,比如下面的示例,并且从中获取相应的动态配置信息,依次创建对应的路由、服务、处理程序等等。
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: "foo"
namespace: production
spec:
rules:
- host: foo.com
http:
paths:
- path: /bar
backend:
serviceName: service1
servicePort: 80
- path: /foo
backend:
serviceName: service1
servicePort: 80
Provider 配置¶
endpoint
¶
可选, 默认为空
[providers.kubernetesIngress]
endpoint = "http://localhost:8080"
# ...
providers:
kubernetesIngress:
endpoint = "http://localhost:8080"
# ...
--providers.kubernetesingress.endpoint="http://localhost:8080"
Kubernetes 服务端点作为 URL,则仅在以下基于环境变量的方式无效的时候才使用。
当部署到 Kubernetes 集群中时,Traefik 会读取环境变量 KUBERNETES_SERVICE_HOST
和 KUBERNETES_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.kubernetesIngress]
token = "mytoken"
# ...
providers:
kubernetesIngress:
token = "mytoken"
# ...
--providers.kubernetesingress.token="mytoken"
用于 Kubernetes 客户端配置的 Bearer Token。
certAuthFilePath
¶
可选的,默认为空
[providers.kubernetesIngress]
certAuthFilePath = "/my/ca.crt"
# ...
providers:
kubernetesIngress:
certAuthFilePath: "/my/ca.crt"
# ...
--providers.kubernetesingress.certauthfilepath="/my/ca.crt"
CA 证书文件路径,用于 Kubernetes 客户端配置。
disablePassHostHeaders
¶
可选,默认为 false
[providers.kubernetesIngress]
disablePassHostHeaders = true
# ...
providers:
kubernetesIngress:
disablePassHostHeaders: true
# ...
--providers.kubernetesingress.disablepasshostheaders=true
是否禁用 PassHost 头信息。
namespaces
¶
可选, 默认: 所有 namespaces (空数组)
[providers.kubernetesIngress]
namespaces = ["default", "production"]
# ...
providers:
kubernetesIngress:
namespaces:
- "default"
- "production"
# ...
--providers.kubernetesingress.namespaces="default,production"
要 watch 的命名空间数组。
labelSelector
¶
可选,默认为空 (处理所有的 Ingresses)
[providers.kubernetesIngress]
labelSelector = "A and not B"
# ...
providers:
kubernetesIngress:
labelselector: "A and not B"
# ...
--providers.kubernetesingress.labelselector="A and not B"
默认情况下,Traefik 处理配置的命名空间下面的所有 Ingress 对象,也可以通过指定一个 label seletor 来过滤特定的 Ingress 对象。
点击查看更多 label-selectors 详细信息。
ingressClass
¶
可选,默认为空
[providers.kubernetesIngress]
ingressClass = "traefik-internal"
# ...
providers:
kubernetesIngress:
ingressClass: "traefik-internal"
# ...
--providers.kubernetesingress.ingressclass="traefik-internal"
标记被处理的 Ingress 对象的 annotation kubernetes.io/ingress.class
的值。如果该参数只非空,则只处理包含具有相同值的 annotation 的 Ingress 对象。否则,将处理没有 annotation 注解,或者值为空或者为 traefik
的 Ingress 对象。
ingressEndpoint
¶
hostname
¶
可选,默认为空
[providers.kubernetesIngress.ingressEndpoint]
hostname = "foo.com"
# ...
providers:
kubernetesIngress:
ingressEndpoint:
hostname: "foo.com"
# ...
--providers.kubernetesingress.ingressendpoint.hostname="foo.com"
用于 Kubernetes Ingress 端点的主机名。
ip
¶
可选,默认为空
[providers.kubernetesIngress.ingressEndpoint]
ip = "1.2.3.4"
# ...
providers:
kubernetesIngress:
ingressEndpoint:
ip: "1.2.3.4"
# ...
--providers.kubernetesingress.ingressendpoint.ip="1.2.3.4"
用于 Kubernetes Ingress 端点的 IP。
publishedService
¶
可选,默认为空
[providers.kubernetesIngress.ingressEndpoint]
publishedService = "foo-service"
# ...
providers:
kubernetesIngress:
ingressEndpoint:
publishedService: "foo-service"
# ...
--providers.kubernetesingress.ingressendpoint.publishedservice="foo-service"
用来复制状态的已发布的 Kubernetes Service。
throttleDuration
¶
可选,默认为0 (没有限流)
[providers.kubernetesIngress]
throttleDuration = "10s"
# ...
providers:
kubernetesIngress:
throttleDuration: "10s"
# ...
--providers.kubernetesingress.throttleDuration="10s"
未来¶
如果你想进一步了解 Traefik 支持的 Ingress 的规范,可以在 Traefik 代码仓的测试 数据 中了解更多信息。