首页 > 解决方案 > 在具有不同端口的多个服务中使用单个静态 IP 地址作为 LoadBalancerIP

问题描述

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

我有三个副本,并且我LoadBalancer为每个副本创建了一个相同的服务,同时从到LoadBalancerIP顺序递增端口。1025510257

    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。

标签: kubernetesazure-aks

解决方案


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

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

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


推荐阅读