amazon-web-services - 使用负载均衡器在AWS EKS上发布Hazelcast集群

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

我们有一个在AWS EKS kubernetes集群中运行的Hazelcast 3.12集群。
您是否知道如何将在AWS EKS kubernetes集群内部运行的具有多个Pod的Hazelcast集群暴露给kubernetes集群之外?
Hazelcast集群具有6个Pod,并通过类型为LoadBalancer(AW​​S经典负载均衡器)的kubernetes“服务”暴露在kubernetes集群外部。
当我从kubernetes集群外部运行Hazelcast客户端时,可以使用AWS负载均衡器连接到Hazelcast集群。但是,当我尝试从Hazelcast映射中获取一些值时,客户端将失败,并显示以下错误:

java.io.IOException: No available connection to address [172.17.251.81]:5701 at com.hazelcast.client.spi.impl.SmartClientInvocationService.getOrTriggerConnect(SmartClientInvocationService.java:75


该错误提到IP地址172.17.251.81。这是Hazelcast Pod的内部kubernetes IP,我无法从kubernetes集群外部连接到该IP。我不知道为什么客户端尝试连接到此IP地址而不是Load Balancer公用IP地址。
另一方面,当我将hazelcast群集从6扩展到1个pod时,我可以连接并获取 map 值而没有任何问题。
如果您想查看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 Unisocket Client

hazelcast-client:
  smart-routing: false
如果要使用默认的Smart Client(这意味着更好的性能),则需要为每个Pod提供单独的服务,因为需要从Kubernetes集群外部访问每个Pod。

在博客文章How to Set Up Your Own On-Premises Hazelcast on Kubernetes中了解更多信息。

关于amazon-web-services - 使用负载均衡器在AWS EKS上发布Hazelcast集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63795700/

相关文章:

java - 使用 aws sns 服务发送短信

amazon-web-services - 在 aws 上安装 ipython 笔记本时,Mycert.pem 不存在

ruby-on-rails - 带有自定义 header 的 S3 临时签名 url,无需将对象元数据修改到磁盘

kubernetes - Prometheus Adapter 自定义指标 HPA

go - 如何解析多个对象的引用

java - 使用客户端-服务器拓扑时,从 Hazelcast 中的 IMap 中的 MongoDB 加载数据

java - 以分布式模式运行由 hazelcast 缓存支持的 vert.x 集群

deployment - AWS上的Elasticsearch部署:Beanstalk应用服务器与独立ec2

kubernetes - IstIO 导出网关出现 HTTP 503 错误

java - Hazelcast 预定作业(支持 Quartz?)