同一IP端口的请求会被AWS NLB转发至同一目标吗?如何实现Pod负载均衡?
问题解答
关于同一IP请求的转发行为
是的,AWS NLB默认采用源IP地址哈希的负载均衡策略,同一个客户端IP发起的所有请求都会被转发到同一个后端目标(即你的Pod)。你用ab工具测试时,所有请求都来自同一台测试机器的同一个IP,因此全部命中了同一个Pod。
调整实现多Pod负载均衡的方法
要让请求在多个Pod间均衡分发,需修改NLB关联的目标组负载均衡算法,具体通过给K8s Service添加对应注解实现:
修改Service配置,在
metadata.annotations中添加目标组属性配置,指定轮询或最少未完成请求算法:apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing service.beta.kubernetes.io/aws-load-balancer-type: external # 添加以下注解修改负载均衡算法 service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: "load_balancing.algorithm.type=round_robin" name: my-nlb namespace: my-ns spec: ports: - name: webport port: 80 protocol: TCP targetPort: 80 selector: app: my-app type: LoadBalancer- 如果你的服务存在请求处理时间差异较大的场景,建议改用
least_outstanding_requests(最少未完成请求)算法,能更合理地分配负载:service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: "load_balancing.algorithm.type=least_outstanding_requests"
- 如果你的服务存在请求处理时间差异较大的场景,建议改用
重新应用配置,让EKS更新NLB的目标组设置:
kubectl apply -f your-service-file.yaml # 或者直接重启Service kubectl rollout restart service/my-nlb -n my-ns验证效果:再次用ab工具测试,此时同一IP的请求会被轮询(或按最少请求数)分发到不同Pod,实现多Pod间的负载均衡。
内容的提问来源于stack exchange,提问作者CY W
相关产品推荐
相关产品推荐

