NodePort是否在部署之间请求平衡?

时间:2018-09-27 17:29:08

标签: kubernetes google-cloud-platform

因此,我要在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

1 个答案:

答案 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