簡體   English   中英

使用負載均衡器在 AWS EKS 上公開 Hazelcast 集群

[英]Expose a Hazelcast cluster on AWS EKS with a load balancer

我們在 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 個擴展到 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 服務公開所有 Pod,那么您需要使用 Hazelcast Unisocket Client

hazelcast-client:
  smart-routing: false

如果您想使用默認的Smart Client (這意味着更好的性能),那么您需要使用單獨的服務公開每個 Pod,因為每個 Pod 都需要從 Kubernetes 集群外部訪問。


在博客文章中閱讀更多內容: 如何在 Kubernetes 上設置您自己的本地 Hazelcast

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM