因此,我要在Google Cloud上设置整个堆栈,并且我需要相互交流几个组件,因此我想出了以下流程:
入口-> Apache服务-> Apache部署(2个实例)->应用服务->应用部署(2个实例)
因此Ingress在我的2个Apache实例之间很好地划分了请求,但是Apache部署在2个App部署之间没有很好地划分请求。
这两种服务(Apache和App)都是NodePort服务。
我想要实现的是服务(Apache和App)对它们在链接的部署中收到的请求进行负载平衡,但是我不知道NodePort服务是否可以做到这一点,所以我想知道如何实现这个。
应用服务Yaml看起来像这样:
apiVersion: v1
kind: Service
metadata:
name: preprocessor-service
labels:
app: preprocessor
spec:
type: NodePort
selector:
app: preprocessor
ports:
- port: 80
targetPort: 8081
答案 0 :(得分:1)
如果您正在通过 clusterIP ,并且使用默认代理模式为iptables,则NodePort
服务将采用随机方法(Kubernetes 1.1或更高版本),称为iptables proxy mode。对于较早的Kubernetes 1.0,默认值为userspace proxy mode,它会进行轮询。如果要控制此行为,可以使用ipvs proxy mode。
当我说 clusterIP 时,我的意思是只能由群集理解的IP地址,例如以下地址:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-svc NodePort 10.109.87.179 <none> 80:30723/TCP 5d
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 69d
当您指定NodePort
时,它也应该是所有群集节点上的网格。换句话说,群集中的所有节点都将在该特定端口上侦听其外部IP,但是,如果碰巧在该特定节点上运行,您将从应用程序或pod中获得响应。因此,您可以设置一个外部负载均衡器,使其后端指向特定的NodePort
,然后根据端口上的运行状况检查转发流量。
我不确定您的情况,您是否可能没有使用clusterIP
?