我在 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/