EKS部署的OpenFaas函数副本流量不均,不使用服务网格如何实现负载均衡
OpenFaaS EKS 环境无服务网格下流量均匀分配解决方案
1. 确认direct_functions配置实际生效
配置未正确落地是常见的无效原因,先做如下校验:
- 执行
kubectl get deploy/gateway -n openfaas -o yaml,检查gateway容器的环境变量direct_functions值是否为false - 若通过Helm部署OpenFaaS,执行
helm get values openfaas -n openfaas确认该配置未被后续升级操作覆盖
2. 关闭函数Service的会话亲和性
这是流量无法分散的核心原因:OpenFaaS默认会为所有函数的Service自动配置sessionAffinity: ClientIP,用来复用TCP连接降低开销,该配置会把同一个客户端IP的所有请求都转发到同一个后端Pod。
全局生效方案(适用于所有新部署函数)
修改OpenFaaS controller的配置,添加环境变量service_session_affinity: "None",重启controller后新部署的函数都会默认关闭会话亲和性。
存量函数修复方案
手动调整对应函数的Service配置,执行命令:kubectl patch svc <你的函数名称> -n openfaas-fn -p '{"spec":{"sessionAffinity":"None"}}'
3. 适配长连接场景的额外配置
如果你的调用端使用长连接访问函数,就算关闭了会话亲和性,已经建立的长连接会一直绑定到同一个后端Pod,需要额外调整:
- 在调用客户端配置连接池最大生命周期,比如设置单连接最多复用30秒或10次请求后主动销毁重建,强制新连接分配到其他副本
- 可将EKS集群的kube-proxy代理模式从默认的iptables切换为IPVS模式,IPVS的轮询调度策略能实现更均匀的流量拆分,适配长连接场景下的负载均衡需求
4. 效果验证
将目标函数副本数调整为≥2,使用压测工具发送100次以上无会话绑定的独立请求,分别统计每个函数Pod的日志接收请求数,差值在10%以内即为配置生效。
内容的提问来源于stack exchange,提问作者Damith Udayanga
相关产品推荐
相关产品推荐

