使用负载均衡器在 AWS EKS 上公开 Hazelcast 集群
Expose a Hazelcast cluster on AWS EKS with a load balancer
我们在 AWS EKS kubernetes 集群中有一个 Hazelcast 3.12 集群 运行。
您知道如何将 AWS EKS kubernetes 集群内 运行ning 的超过 1 个 pod 的 Hazelcast 集群公开到 kubernetes 集群外部吗?
Hazelcast 集群有 6 个 pods 并且暴露在 kubernetes 集群之外,带有一个类型为 LoadBalancer(AWS 经典负载均衡器)的 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 地址而不是负载均衡器 public IP 地址。
另一方面,当我将 hazelcast 集群从 6 个扩展到 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 服务公开所有 Pods,那么您需要使用 Hazelcast Unisocket Client。
hazelcast-client:
smart-routing: false
如果你想使用默认的 Smart Client(这意味着更好的性能),那么你需要为每个 Pod 公开一个单独的服务,因为每个 Pod 都需要可以从 Kubernetes 集群外部访问。
在博客中阅读更多内容 post:How to Set Up Your Own On-Premises Hazelcast on Kubernetes。
我们在 AWS EKS kubernetes 集群中有一个 Hazelcast 3.12 集群 运行。
您知道如何将 AWS EKS kubernetes 集群内 运行ning 的超过 1 个 pod 的 Hazelcast 集群公开到 kubernetes 集群外部吗?
Hazelcast 集群有 6 个 pods 并且暴露在 kubernetes 集群之外,带有一个类型为 LoadBalancer(AWS 经典负载均衡器)的 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 地址而不是负载均衡器 public IP 地址。
另一方面,当我将 hazelcast 集群从 6 个扩展到 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 服务公开所有 Pods,那么您需要使用 Hazelcast Unisocket Client。
hazelcast-client:
smart-routing: false
如果你想使用默认的 Smart Client(这意味着更好的性能),那么你需要为每个 Pod 公开一个单独的服务,因为每个 Pod 都需要可以从 Kubernetes 集群外部访问。
在博客中阅读更多内容 post:How to Set Up Your Own On-Premises Hazelcast on Kubernetes。