我们有一个运行在三台机器上的 Kubernetes 服务。我们集群内部和外部的客户端都通过启用了 keep-alive 选项的 http 与该服务通信。在服务部署期间,退出的 pod 有一个就绪检查,当关闭开始时开始失败,并从服务端点列表中适当地删除,但是它们仍然接收流量并且一些请求失败,因为容器将突然退出。我们认为这是因为保持连接允许客户端重新使用在主机就绪时建立的这些连接。是否应该遵循一系列步骤来确保我们不会遇到这些问题?如果可能的话,我们希望允许保持连接。
问问题
2014 次
2 回答
5
如果代理/负载平衡发生在第 4 层而不是第 7 层,则会出现此问题。对于内部服务(ClusterIP 类型的 Kubernetes 服务),由于 Kube-proxy 使用第 4 层代理进行代理,客户端将保持连接均匀在豆荚不再准备服务之后。同样,对于 LoadBalancer 类型的服务,如果后端类型设置为 TCP(默认情况下使用 AWS ELB),也会发生同样的问题。请参阅此问题以获取更多详细信息。
目前解决这个问题的方法是:
- 如果您使用的是云 LoadBalancer,请继续将后端设置为 HTTP。例如,您可以
service.beta.kubernetes.io/aws-load-balancer-backend-protocol
为 kubernetes 服务添加注解并将其设置为 HTTP,以便 ELB 使用 HTTP 代理而不是 TCP。 - 在集群中使用第 7 层代理/入口控制器来路由流量,而不是通过
kube-proxy
于 2017-03-26T06:28:24.747 回答
0
我们遇到了同样的问题,所以想知道您是否找到了解决此问题的方法。根据这个链接,应该可以通过在服务前面安装一个负载均衡器来做到这一点,该负载均衡器将直接向 Pod 发出请求并自行处理 Keep-Alive 连接。
我们将继续调查这个问题,看看我们是否可以找到一种方法来使用保持连接的零停机时间部署。
于 2017-03-23T15:53:56.823 回答