簡體   English   中英

Redis集群K8S連接

[英]redis cluster K8S connection

我在K8S中運行redis集群:

kubectl get services -o wide
redis-cluster                              ClusterIP      10.97.31.167     <none>        6379/TCP,16379/TCP   22h   app=redis-cluster

從節點本身連接到群集IP時,連接工作正常:

redis-cli -h 10.97.31.167 -c
10.97.31.167:6379> set some_val 1
-> Redirected to slot [11662] located at 10.244.1.9:6379
OK
  1. 是否可以通過某種方式從本地開發VM訪問redis服務器,而無需將每個pod都公開為服務?
  2. 在將應用程序部署為在集群本身內部運行(后來在生產環境中運行)時,我也應該使用集群IP,還是應該將pod的內部IP用作redis-master服務器的主IP?

簡單轉發到遠程計算機將不起作用:

devvm:ssh -L 6380:10.97.31.167:6379 -i user.pem admin@k8snode.com

在開發VM上:

root@devvm:~# redis-cli -h 127.0.0.1 -p 6380 -c
127.0.0.1:6380> set jaheller 1
-> Redirected to slot [11662] located at 10.244.1.9:6379

Redis連接此時超時。

我相信在所有情況下,您只需要使用kubernetes類型的Service對象公開服務即可:

  • 群集IP (以防您在群集內部使用它)

  • NodePort (用於外部訪問)

  • LoadBalancer (如果具有公共訪問權限,並且您在雲提供商上)

  • 帶有外部負載平衡器的NodePort(如果您在本地基礎架構上,則用於公共外部訪問)

無需擔心單個吊艙。 服務將照顧他們。

文檔:

https://kubernetes.io/docs/concepts/services-networking/service/

我認為您不需要任何端口重定向。 不過,您必須在集群上構建一個入口控制器,即nginx入口控制器

然后,您只需設置具有公開訪問權限的單個入口服務即可為群集流量提供服務。

這是Ingress Controller訪問群集服務的示例:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: redis-cluster-ing
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: redis-cluster
          servicePort: 6379

您可以查看分步說明

暫無
暫無

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

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