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