无法从部署在同一集群中的golang应用程序连接到kubernetes上的redis集群

问题描述

我在Kubernetes上部署了带rednami舵图(https://github.com/bitnami/charts/tree/master/bitnami/redis-cluster)的redis集群。

通过运行以下命令,我可以从Kubernetes集群成功连接到Redis集群:

  1. kubectl run my-redis-release-client --rm -it --image docker.io/bitnami/redis:4.0.11-debian-9 -- bash

  2. redis-cli -h redis-cluster-0.redis-cluster-headless.redis

但是我无法从部署在同一集群中的golang应用程序连接到Redis集群。

我在golang应用程序上使用的redis连接字符串uri是“ redis://redis-cluster-0.redis-cluster-headless.redis:6379”。这遵循“ redis-pod-name.redis-service-name.namespace”约定。

注意:我只希望能够从Kubernetes集群内部访问redis集群。我不想授予外部访问权限。请帮助...

解决方法

Headless服务是您不需要负载平衡和单个服务IP的服务。 Headless服务不是仅用于从Kubernetes集群内部访问redis集群

您可以创建一个服务来公开Redis。下面是创建ClusterIP类型的示例,仅让您从集群内部而不是集群外部连接

apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: default
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis

redis的pod或部署需要具有匹配的标签app: redis

然后,您可以使用redis.default.svc.cluster.local:6379连接到它,从Golang应用程序连接到它。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...