我们目前正在试用 traefik,并考虑将其用作内部 Kubernetes 集群的入口控制器。
现在我想知道是否可以使用 traefik 来对 kube-apiserver 进行负载平衡?我们有一个带有 3 个主节点的 HA 设置。
我将如何进行?
基本上,我只想在 3 个主节点之间对来自集群中所有节点的 API 请求进行负载均衡。
我应该在集群之外运行 traefik 吗?
我正试图解决这个问题...我很难理解它如何与 traefik 作为入口控制器一起工作。
感谢您的任何输入,非常感谢!
实现此目的的一种方法是使用文件提供程序并创建指向 API 服务器节点的静态设置;像这样(未经测试(
[file]
[backends]
[backends.backend1]
[backends.backend1.servers]
[backends.backend1.servers.server1]
url = "http://apiserver1:80"
weight = 1
[backends.backend1.servers.server2]
url = "http://apiserver2:80"
weight = 1
[backends.backend1.servers.server3]
url = "http://apiserver3:80"
weight = 1
[frontends]
[frontends.frontend1]
entryPoints = ["http"]
backend = "backend1"
passHostHeader = true
[frontends.frontend1.routes]
[frontends.frontend1.routes.route1]
rule = "Host:apiserver"
(这假设是一个简单的仅HTTP设置;HTTPS需要一些额外的设置。
当 Traefik 获得此配置(以及您需要通过 TOML 文件或 CLI 参数执行的任何其他操作(时,它将在三个节点上使用 apiserver Host 标头轮询请求。
另一个至少可能的选项是创建一个捕获 API 服务器节点的服务对象和另一个引用该服务并将所需 URL 路径和主机映射到 API 服务器的入口对象。这将为您提供更大的灵活性,因为服务应自动适应对 API 服务器的更改,当滚动升级等功能发挥作用时,这可能会很有趣。然而,一个加重的点可能是 Traefik 需要与 API 服务器通信来处理入口和服务(以及端点(,如果 API 服务器不可用,它就无法处理。您可能需要某种 HA 设置或愿意维持某种不可用。(FWIW,Traefik应该自己从暂时的停机时间中恢复过来。
是要在集群内还是集群外运行 Traefik 取决于您。如果要处理 API 对象,前者肯定更容易设置,因为您不必传入 API 服务器配置参数,但如果您想沿着入口/服务路由前进,则需要对 API 服务器连接进行相同的限制。使用文件提供程序方法,您无需担心这一点 - 完全可以在不使用 Kubernetes 提供程序的情况下在 Kubernetes 中运行 Traefik。