我们目前正在尝试使用traefik,并考虑将其用作内部kubernetes集群的入口控制器。
现在我想知道是否有可能使用traefik来平衡kube-apiserver?我们有一个HA设置,有3个主人。
我将如何前往这里?
基本上我只想在3个主服务器之间对集群中所有节点的API请求进行负载均衡。
我应该在集群外部运行traefik吗?
我试图绕过这个......我很难理解这可以和traefik一起作为入口控制器。
感谢您的任何意见,非常感谢!
答案 0 :(得分:0)
实现此目的的一种方法是使用file provider并创建指向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 主机标头对三个请求进行循环处理节点
另一个至少可能的选择是创建捕获API服务器节点的Service对象和引用该Service的另一个Ingress对象,并将所需的URL路径和主机映射到API服务器。这将为您提供更大的灵活性,因为服务应该自动适应您对API服务器的更改,这在滚动升级之类的事情发挥作用时可能会很有趣。然而,一个加重点可能是Traefik需要与API服务器通信以处理Ingress和服务(以及端点,就此而言),如果API服务器不可用则不能。您可能需要某种HA设置或愿意维持某种不可用性。 (FWIW,Traefik应该从自己的临时停机时间中恢复过来。)
您是否希望在集群中运行Traefik或在集群外运行取决于您。如果您想要处理API对象,那么前者肯定更容易设置,因为您不必传递API服务器配置参数,但如果您想要关闭Ingress / Service,则需要应用与API服务器连接相同的限制路线。使用文件提供程序方法,您不必担心 - 完全可以在不使用Kubernetes提供程序的情况下在Kubernetes中运行Traefik。