【发布时间】:2020-09-09 18:38:01
【问题描述】:
我们有一个在 AWS EKS kubernetes 集群内运行的 Hazelcast 3.12 集群。
您知道如何将在 AWS EKS kubernetes 集群内运行的具有 1 个以上 pod 的 Hazelcast 集群公开到 kubernetes 集群外吗?
Hazelcast 集群有 6 个 pod,并通过 LoadBalancer(AWS 经典负载均衡器)类型的 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