【问题标题】:Expose a Hazelcast cluster on AWS EKS with a load balancer使用负载均衡器在 AWS EKS 上公开 Hazelcast 集群
【发布时间】:2020-09-09 18:38:01
【问题描述】:

我们有一个在 AWS EKS kubernetes 集群内运行的 Hazelcast 3.12 集群。

您知道如何将在 AWS EKS kubernetes 集群内运行的具有 1 个以上 pod 的 Hazelcast 集群公开到 kubernetes 集群外吗?

Hazelcast 集群有 6 个 pod,并通过 LoadBalancer(AW​​S 经典负载均衡器)类型的 kubernetes“服务”暴露在 kubernetes 集群之外。

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

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

错误中提到了 IP 地址 172.17.251.81。这是一个 Hazelcast pod 的内部 kubernetes IP,我无法从 kubernetes 集群外部连接到它。我不知道为什么客户端尝试连接到这个 IP 地址而不是负载均衡器公共 IP 地址。

另一方面,当我将 hazelcast 集群从 6 个 pod 扩展到 1 个 pod 时,我能够毫无问题地连接并获取地图值。

如果您想查看 kubernetes LoadBalancer Service 配置:

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

【问题讨论】:

    标签: amazon-web-services kubernetes hazelcast amazon-elb amazon-eks


    【解决方案1】:

    如果您使用一个 LoadBalancer 服务公开所有 Pod,则需要使用 Hazelcast Unisocket Client

    hazelcast-client:
      smart-routing: false
    

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


    阅读博文了解更多信息:How to Set Up Your Own On-Premises Hazelcast on Kubernetes

    【讨论】:

    • 非常感谢您的解决方案。我在客户端禁用了“智能路由”,现在它可以工作了!
    猜你喜欢
    • 2021-12-04
    • 2021-07-14
    • 2021-03-28
    • 1970-01-01
    • 2021-01-28
    • 2021-11-11
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多