我有一个简单的入口资源和两个服务:ess-index和ess-query。使用NodePort
类型--session-afinity=None
公开了服务。 Ingress资源具有以下结构:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ess-ingress
spec:
backend:
serviceName: ess-query
servicePort: 2280
rules:
- http:
paths:
- path: /api/index
backend:
serviceName: ess-index
servicePort: 2280
创建的服务将具有代理模式iptables。当我将这些服务公开为NodePort
时,kubernetes master将从标记配置的范围中分配端口,并且每个Node将分别将该端口代理到ess-index或ess-query服务中。
所以,当我进入POST时
kubectl create -f ingress.yaml
它将导致以下行为:将自动创建GLBC控制器,管理以下GCE资源图(全局转发规则 - > TargetHttpProxy - > Url地图 - >后端服务 - >实例组) 。根据文档,它应该显示为pod,但我无法在以下命令输出中看到它:kubectl get pods --namespace=kube-system
。这是sample output我的问题是:这个负载均衡器的默认负载均衡算法是什么?当流量路由到适当的后端时会发生什么?我的理解是正确的,默认算法不是循环法,并且根据Service
文档,是随机分布的(可能基于源/目标IP的某些散列等)?这很重要,因为在我的情况下,所有流量来自少量具有固定IP的机器,因此我可以看到后端实例上的非均匀流量分布。如果是这样,获得循环行为的正确方法是什么?据我所知,我可以从两个变种中选择:
答案 0 :(得分:2)
结合kubeproxy和cloud lb算法,使他们朝着共同目标合作仍然是一项正在进行中的工作。现在,它将最终喷涂,随着时间的推移你得到大致相等的分配,但它不会严格rr。
如果你真的希望对算法进行细粒度控制,你可以部署nginx ingress controller并将其作为Type = lb的服务公开(或者甚至在它前面贴上GCE l7)。这将为您提供Ingress语义,但允许云提供者尚未与Kube完全集成的区域的逃生舱口,如算法控制。逃生舱口为annotations或模板的完整config map。