def*_*omu 11 kubernetes kube-proxy
在Kubernetes中,服务通过服务ip相互通信。使用iptables或类似的东西,每个TCP连接都透明地路由到可用于被叫服务的pod之一。如果呼叫服务未关闭TCP连接(例如使用TCP keepalive或连接池),它将连接到一个Pod,而不使用可能产生的其他Pod。
处理这种情况的正确方法是什么?
我自己不满意的想法:
我将每个呼叫的速度变慢只是为了能够将请求分配到不同的Pod吗?感觉不对。
我可以强制调用者打开多个连接(假设它将随后在这些连接中分配请求),但是应该打开几个?呼叫者不知道(可能不应该知道)有多少个豆荚。
我可以限制被调用服务的资源,因此它在多个请求上变得很慢,并且调用方将打开更多连接(希望与其他Pod连接)。同样,我不喜欢任意放慢请求的想法,这仅适用于cpu绑定的服务。
可以通过 Keep-Alive 通用标头中指定的选项来调整保持活动行为:
例如:
Connection: Keep-Alive
Keep-Alive: max=10, timeout=60
Run Code Online (Sandbox Code Playgroud)
因此,您可以在特定超时后重新打开 TCP 连接,而不是在每个 API 请求时或在最大数量的 http 事务后重新打开。
请记住,超时和最大值不受保证。
编辑:
请注意,如果您使用k8s服务,您可以选择两种LB模式:
iptables 代理模式(默认情况下,iptables 模式下的 kube-proxy 会随机选择一个后端。)
IPVS 代理模式,您有不同的负载平衡选项:
IPVS 提供了更多用于平衡后端 Pod 流量的选项;这些都是:
rr:循环 lc:最少连接(打开连接的最小数量) dh:目标哈希 sh:源哈希 sed:最短预期延迟 nq:从不排队
检查此链接
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |