0

我们目前正在尝试使用 traefik,并考虑将其用作我们内部 kubernetes 集群的入口控制器。

现在我想知道是否可以使用 traefik 对 kube-apiserver 进行负载均衡?我们有一个包含 3 个主节点的 HA 设置。

我将如何在这里进行?

基本上我只想在 3 个主节点之间对来自集群中所有节点的 API 请求进行负载平衡。

我应该只在集群外运行 traefik 吗?

我正试图解决这个问题......我很难理解这如何与 traefik 作为入口控制器一起工作。

感谢您的任何意见,非常感谢!

4

1 回答 1

0

实现此目的的一种方法是使用文件提供程序并创建指向 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 服务器节点和另一个引用该服务的 Ingress 对象并将所需的 URL 路径和主机映射到您的 API 服务器。这将为您提供更大的灵活性,因为服务应自动调整您的 API 服务器的更改,当滚动升级之类的事情开始发挥作用时,这可能会很有趣。一个令人恼火的地方可能是 Traefik 需要与 API 服务器对话以处理入口和服务(以及端点,就此而言),如果 API 服务器不可用,它就不能这样做。您可能需要某种 HA 设置或愿意维持某种不可用状态。(FWIW,Traefik 应该自己从临时停机中恢复。)

是否要在集群内或集群外运行 Traefik 取决于您。如果您想处理 API 对象,则前者肯定更容易设置,因为您不必传递 API 服务器配置参数,但如果您想沿着 Ingress/Service 路线走,则需要应用关于 API 服务器连接性的相同限制。使用文件提供程序方法,您无需担心这一点——完全可以在 Kubernetes 内部运行 Traefik,而无需使用 Kubernetes 提供程序。

于 2018-04-30T15:04:25.110 回答