haproxy作为kube-apiserver的负载均衡器

时间:2016-04-20 12:27:41

标签: kubernetes haproxy

我已经建立了一个拥有三个主人的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配置中缺少哪些内容对于运行此配置至关重要?

1 个答案:

答案 0 :(得分:2)

我和你有同样的问题。我认为手表在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