【问题标题】:redis-cluster on kubernetes: connection timed outkubernetes 上的 redis-cluster:连接超时
【发布时间】:2020-05-24 10:24:56
【问题描述】:

我结合/遵循了以下手册在 kubernetes (GCP) 上创建了一个 redis 集群:

我创建了 3 个节点,每个节点上有 2 个 pod。问题是:当我从 kubernetes 集群外部(通过负载均衡器外部 ip)连接到 redis-cluster 时,连接超时。

$ redis-cli -h external_ip_lb -p 6379 -c

external_ip_lb:6379> set foo bar
-> Redirected to slot [12182] located at interal_ip_node:6379
Could not connect to Redis at interal_ip_node:6379: Operation timed out

当我进入一个正在运行的容器的外壳并在那里执行 redis-cli 命令时,它就可以工作了。

$ kubectl exec -it redis-cluster-0 -- redis-cli -c

127.0.0.1:6379> set foo bar
-> Redirected to slot [12182] located at internal_ip_node:6379
OK
internal_ip_node:6379> get foo
"bar"

我还尝试设置一个集群 IP 服务,并将端口转发到我的本地计算机端口 7000,这给了我与外部 ip 方法相同的错误。

$ kubectl port-foward pods/redis-cluster-0 7000:6379

有人知道可能出了什么问题吗?显然,这与我的本地计算机不是 kubernetes 集群的一部分有关,因此与其他节点的内部 IP 的连接失败。

编辑:kubectl describe svc redis-cluster-lb 的输出

Name:                     redis-cluster-lb
Namespace:                default
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"redis-cluster-lb","namespace":"default"},"spec":{"ports":[{"port"...
Selector:                 app=redis-cluster
Type:                     LoadBalancer
IP:                       internal_ip_lb
LoadBalancer Ingress:     external_ip_lb
Port:                     <unset>  6379/TCP
TargetPort:               6379/TCP
NodePort:                 <unset>  30631/TCP
Endpoints:                internal_ip_node_1:6379,internal_ip_node_2:6379,internal_ip_node_3:6379 + 3 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

我能够 ping 外部负载平衡器的 IP。

【问题讨论】:

  • 分享 kubectl describe svc servicename 的输出。你能ping通external_ip吗?
  • 我认为您需要在 GCP 中将客户端系统 ip 列入白名单
  • 好的,我试试看!感谢您的意见!

标签: kubernetes google-cloud-platform redis


【解决方案1】:

我不是 Redis 专家,但在 Redis documentation 你可以阅读:

由于集群节点无法代理请求,客户端可能会使用重定向错误重定向到其他节点

这就是为什么你在 LB 后面的 redis 集群遇到这个问题的原因,这也是它(很可能)不起作用的原因。

您可能需要使用一些在 k8s 集群内部运行的代理(例如官方 redis-cluster-poxy),可以访问 redis 集群的所有内部 IP 并处理重定向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-20
    • 2020-03-08
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    相关资源
    最近更新 更多