gpt4 book ai didi

kubernetes - 如何在 kubernetes 中管理持久连接

转载 作者:行者123 更新时间:2023-12-02 01:44:52 25 4
gpt4 key购买 nike

在 Kubernetes 中,服务通过服务 IP 相互通信。使用 iptables 或类似的东西,每个 TCP 连接都会透明地路由到可用于被调用服务的 Pod 之一。如果调用服务没有关闭 TCP 连接(例如使用 TCP keepalive 或连接池),它将连接到一个 pod,并且不会使用可能生成的其他 pod。

处理这种情况的正确方法是什么?

<小时/>

我自己不满意的想法:

每次 api 调用后关闭连接

我是否会减慢每次调用的速度,以便能够将请求分发到不同的 pod?感觉不太对劲。

最小连接数

我可以强制调用者打开多个连接(假设它将在这些连接之间分发请求),但是应该打开多少个连接?调用者(可能不应该)不知道有多少个 pod。

禁用突发

我可以限制被调用服务的资源,这样在多个请求上它会变慢,并且调用者将打开更多连接(希望到其他 Pod)。同样,我不喜欢任意减慢请求的想法,这仅适用于 cpu 绑定(bind)服务。

最佳答案

可以通过 Keep-Alive 常规 header 中指定的选项来调整保持事件行为:

例如:

Connection: Keep-Alive
Keep-Alive: max=10, timeout=60

因此,您可以在特定超时后重新打开 tcp 连接,而不是在每次 API 请求时或在最大数量的 http 事务后重新打开。

请记住,超时和最大值不受保证。

编辑:

注意,如果您使用k8s服务,您可以选择两种LB模式:

  • iptables 代理模式(默认情况下,iptables 模式下的 kube-proxy 会随机选择一个后端。)

  • IPVS 代理模式,您有不同的负载平衡选项:

IPVS 提供了更多选项来平衡后端 Pod 的流量;这些是:

rr:循环赛lc:最少连接(打开连接的最小数量)dh:目的地散列sh:源哈希sed:最短预期延迟nq:从不排队

检查this link

关于kubernetes - 如何在 kubernetes 中管理持久连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57158086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com