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

时间:2020-08-12 09:20:53

标签: docker go kubernetes kubernetes-helm redis-cluster

我在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集群。我不想授予外部访问权限。请帮助...

1 个答案:

答案 0 :(得分:1)

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应用程序连接到它。