通过启用keep-alive修复kubernetes服务重新部署错误

时间:2017-03-20 21:03:07

标签: http kubernetes keep-alive kubernetes-health-check

我们在三台机器上运行kubernetes服务。群集内部和外部的客户端都通过http与启用了keep-alive选项的服务进行通信。在部署服务期间,退出的pod具有在关闭开始时开始失败的准备检查,并且从服务端点列表中被适当地移除,但是它们仍然接收流量并且一些请求因容器将突然退出而失败。我们认为这是因为keep-alive允许客户端重新使用主机就绪时建立的这些连接。是否应遵循一系列步骤以确保我们不会遇到这些问题?我们希望尽可能允许保持连接。

2 个答案:

答案 0 :(得分:3)

如果代理/负载平衡发生在第4层而不是第7层,则会出现问题。对于内部服务(类型为ClusterIP的Kubernetes服务),由于Kube代理使用第4层代理执行代理,因此客户端将保留即使在pod已经准备好再服务之后,连接仍然存在。同样,对于LoadBalancer类型的服务,如果后端类型设置为TCP(默认情况下使用AWS ELB),则会出现相同的问题。有关详细信息,请参阅this问题。

截至目前,此问题的解决方案是:

  • 如果您使用的是云负载均衡器,请继续将后端设置为HTTP。例如,您可以将service.beta.kubernetes.io/aws-load-balancer-backend-protocol注释添加到kubernetes服务并将其设置为HTTP,以便ELB使用HTTP代理而不是TCP。
  • 使用群集中的第7层代理/入口控制器路由流量,而不是通过kube-proxy
  • 发送流量

答案 1 :(得分:0)

我们遇到了同样的问题,所以只是想知道你是否想出了解决这个问题的方法。根据{{​​3}},应该可以通过在服务前面安装一个负载均衡器来实现这一点,该负载均衡器将直接向pod发出请求,并自行处理Keep-Alive连接。

我们将继续调查此问题,看看我们是否可以找到一种使用保持活动连接进行零停机部署的方法。