Amazon web services 使用负载平衡器在AWS EKS上公开Hazelcast群集

Amazon web services 使用负载平衡器在AWS EKS上公开Hazelcast群集,amazon-web-services,kubernetes,hazelcast,amazon-elb,amazon-eks,Amazon Web Services,Kubernetes,Hazelcast,Amazon Elb,Amazon Eks,我们有一个Hazelcast 3.12集群运行在AWS EKS kubernetes集群中 您知道如何将运行在AWS EKS kubernetes群集内部的具有多个pod的Hazelcast群集暴露到kubernetes群集外部吗? Hazelcast集群有6个吊舱,暴露在kubernetes集群之外,具有LoadBalancer(AWS经典负载平衡器)类型的kubernetes“服务” 当我从kubernetes集群外部运行Hazelcast客户端时,我能够使用AWS负载平衡器连接到Hazel

我们有一个Hazelcast 3.12集群运行在AWS EKS kubernetes集群中

您知道如何将运行在AWS EKS kubernetes群集内部的具有多个pod的Hazelcast群集暴露到kubernetes群集外部吗?

Hazelcast集群有6个吊舱,暴露在kubernetes集群之外,具有LoadBalancer(AWS经典负载平衡器)类型的kubernetes“服务”

当我从kubernetes集群外部运行Hazelcast客户端时,我能够使用AWS负载平衡器连接到Hazelcast集群。但是,当我尝试从Hazelcast映射中获取一些值时,客户端失败,出现以下错误:

java.io.IOException:没有到地址[172.17.251.81]:5701的可用连接,地址为com.hazelcast.client.spi.impl.SmartClientInvocationService.getOrTriggerConnect(SmartClientInvocationService.java:75

该错误提到IP地址172.17.251.81。这是Hazelcast吊舱的内部kubernetes IP,我无法从kubernetes群集外部连接到该吊舱。我不知道客户端为什么尝试连接到此IP地址而不是负载平衡器公共IP地址

另一方面,当我将hazelcast集群从6个pod缩放到1个pod时,我能够连接并获得地图值,没有任何问题

如果要查看kubernetes LoadBalancer服务配置:

kind: Service
apiVersion: v1
metadata:
  name: hazelcast-elb
  labels:
    app: hazelcast
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
spec:
  ports:
  - name: tcp-hazelcast-elb
    port: 443
    targetPort: 5701
  selector:
    app: hazelcast
  type: LoadBalancer

如果使用一个LoadBalancer服务公开所有POD,则需要使用Hazelcast

如果您想使用默认设置(这意味着更好的性能),那么您需要使用单独的服务公开每个Pod,因为每个Pod都需要从Kubernetes集群外部访问



请阅读博文:。

非常感谢您的解决方案。我在客户端禁用了“智能路由”,现在它可以工作了!
hazelcast-client:
  smart-routing: false