在具有不同端口的多个服务中使用单个静态IP地址作为LoadBalancerIP

时间:2018-12-20 23:41:38

标签: kubernetes azure-kubernetes

我正试图公开运行在群集上的有状态mongo副本集以供外部访问。

我有三个副本,并且为每个具有相同LoadBalancer的副本创建了LoadBalancerIP服务,同时将端口从10255依次增加到10257

    apiVersion: v1
    kind: Service
    metadata:
      name: mongo-service-0
      namespace: datastore
      labels:
        app: mongodb-replicaset
   spec:
      loadBalancerIP: staticip
      type: LoadBalancer
      externalTrafficPolicy: Local
      selector:
        statefulset.kubernetes.io/pod-name: mongo-mongodb-replicaset-0
      ports:
        - protocol: TCP
          port: 10255
          targetPort: 27017

问题在于,只有一个服务mongo-service-0已通过静态IP成功部署,而另一项在一段时间后超时。

我要弄清楚的是,是否可以在具有不同端口的多个服务中使用单个静态IP地址作为LoadBalancerIP。

1 个答案:

答案 0 :(得分:0)

由于每个Mongo副本使用不同的端口,因此必须为每个副本创建不同的Kubernetes Services。您只能将Kubernetes服务与单个负载平衡器绑定,并且每个负载平衡器将具有其自己的唯一IP地址,因此您将无法在LoadBalancer类型的服务中共享该IP地址。

解决方法是使用NodePort服务并基本上独立地管理负载均衡器,并将其指向每个副本的NodePort。

另一个解决方法是在Mongo副本上使用相同的端口,并使用相同的Kubernetes LoadBalancer服务。有什么理由不使用它?