如何解决使用负载均衡器在AWS EKS上发布Hazelcast集群
我们有一个运行在AWS EKS kubernetes集群中的Hazelcast 3.12集群。
您是否知道如何将在AWS EKS kubernetes集群内部运行的具有多个Pod的Hazelcast集群暴露给kubernetes集群之外?
Hazelcast集群有6个Pod,并在kubernetes集群外部暴露,带有类型为LoadBalancer(AWS经典负载均衡器)的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地址而不是负载均衡器的公共IP地址。
另一方面,当将榛树丛集从6个缩放到1个窗格时,我可以连接并获取地图值而没有任何问题。
如果要查看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中了解更多信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。