在 K8s 集群内,我运行一个具有 2 个 Pod(副本为 2)的 Web 应用程序,并使用Servicewith 类型公开它们LoadBalancer。然后我做了一个实验,连续发送2个请求,发现这两个请求都是由同一个Pod处理的。
任何人都可以帮我解释这种行为吗?我应该怎么做才能将这种行为更改为循环法或其他方式?
默认情况下,kubernetes 使用iptables模式在 Pod 之间路由流量。正在服务请求的 Pod 是随机选择的。
对于 2 个 pod,它以 0.5 (50%) 的概率均匀分布。因为它没有使用循环,所以后端 Pod 是随机选择的。甚至在更长的时间内也会如此。
可以使用 进行检查sudo iptables-save。
2 个 pod 的示例输出(对于 nginx 服务):
sudo iptables-save | grep nginx
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/nginx:" -m tcp --dport 31554 -j KUBE-SVC-4N57TFCL4MD7ZTDA //KUBE-SVC-4N57TFCL4MD7ZTDA is a tag for nginx service
sudo iptables-save | grep KUBE-SVC-4N57TFCL4MD7ZTDA
-A KUBE-SVC-4N57TFCL4MD7ZTDA -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-SOWYYRHSSTWLCRDY
Run Code Online (Sandbox Code Playgroud)
正如 @Zambozo 所提到的,IPVS 代理模式允许您使用循环算法(默认使用)在 Pod 之间平均分配流量。
| 归档时间: |
|
| 查看次数: |
3427 次 |
| 最近记录: |