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

标签 docker go kubernetes kubernetes-helm redis-cluster

我在 Kubernetes 上使用 bitnami helm 图表 (https://github.com/bitnami/charts/tree/master/bitnami/redis-cluster) 部署了一个 redis 集群。
我可以通过运行以下命令从 Kubernetes 集群内成功连接到 Redis 集群:

  • kubectl run my-redis-release-client --rm -it --image docker.io/bitnami/redis:4.0.11-debian-9 -- bash
  • 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或者deployment需要有匹配的label app: redis然后您可以使用 redis.default.svc.cluster.local:6379 连接到它。从 Golang 应用程序连接到它。

    关于docker - 无法从部署在同一集群中的我的 golang 应用程序连接到 kubernetes 上的 redis 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63373547/

    相关文章:

    docker - 如何为多个模型使用 tensorflow 服务

    macos - Mac 上的 Docker 测试版 : Cannot use ip to access nginx container

    go - 在 golang html/模板中格式化 float

    postgresql - 如何使用 Gorm (go struct) 将 Postman(json 类型)中的值插入到 Postgres

    kubernetes - 在 argocd 中的不同部署中使用相同的规范

    java - 使用 Windows 操作系统、Java、Selenium、Jenkins 从 Dockerfile 构建 docker 容器

    mysql - 连接到 tutum 端点上的 mysql docker

    go - 如何在 Gogland IDE 的选项卡中显示打开的文件?

    kubernetes - Kubernetes中的列表类型标签

    azure - 在 AKS 中部署 POD 期间应用程序是否会上线?