繁体   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