我已经建立了一个由三位大师组成的kubernetes集群。 kube-apiserver应该是无状态的。为了从工作节点正确访问它们,我配置了一个haproxy,该代理配置为提供apiserver的端口(8080)。

frontend http_front_8080
    bind *:8080
    stats uri /haproxy?stats
    default_backend http_back_8080

backend http_back_8080
    balance roundrobin
    server m01 192.168.33.21:8080 check
    server m02 192.168.33.22:8080 check
    server m03 192.168.33.23:8080 check

但是,当我使用loadbalancers ip作为apiserver的地址运行节点时,将收到以下错误消息:
Apr 20 12:35:07 n01 kubelet[3383]: E0420 12:35:07.308337    3383 reflector.go:271] pkg/kubelet/kubelet.go:240: Failed to watch *api.Service: too old resource version: 4001 (4041)
Apr 20 12:36:48 n01 kubelet[3383]: E0420 12:36:48.321021    3383 reflector.go:271] pkg/kubelet/kubelet.go:240: Failed to watch *api.Service: too old resource version: 4011 (4041)
Apr 20 12:37:31 n01 kube-proxy[3408]: E0420 12:37:31.381042    3408 reflector.go:271] pkg/proxy/config/api.go:47: Failed to watch *api.Service: too old resource version: 4011 (4041)
Apr 20 12:41:42 n01 kube-proxy[3408]: E0420 12:41:42.409604    3408 reflector.go:271] pkg/proxy/config/api.go:47: Failed to watch *api.Service: too old resource version: 4011 (4041)

如果将负载均衡器IP更改为主节点之一,则它将按预期工作(没有上面的这些错误消息)。

我的haproxy配置中是否缺少某些对运行此配置至关重要的东西?

最佳答案

我和你有同样的问题。我假设手表在api服务器端需要某种状态。
解决方案是更改配置,以使来自客户端的所有请求都使用余额源转到同一服务器。我假设您只有多个api服务器,因此kubernetes的可用性很高(而不是负载平衡)。

frontend http_front_8080
  bind *:8080
  stats uri /haproxy?stats
  default_backend http_back_8080

backend http_back_8080
  balance source
  server m01 192.168.33.21:8080 check
  server m02 192.168.33.22:8080 check
  server m03 192.168.33.23:8080 check

关于kubernetes - haproxy作为kube-apiserver的负载平衡器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36743805/

10-11 03:58