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

Using a single static IP address as LoadBalancerIP across multiple services with different ports

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

我有三个副本,我为每个具有相同 LoadBalancerIP 的副本创建了一个 LoadBalancer 服务,同时将端口从 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。

由于您为每个 Mongo 副本使用不同的端口,因此您必须创建不同的 Kubernetes Services for each one of the replicas. You can only tie a Kubernetes service with a single load balancer and each load balancer will have its own unique IP (or IPs) address, so you won't be able to share that IP address across a LoadBalancer 类型的服务。

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

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