[英]How to connect Redis with service in NodeJS in K8s cluster?
我正在开发一个使用 socket.io 的应用程序 (car-app)。现在我要把它部署到 kube.netes 集群。 然后我使用 Redis pub/sub function 进行通信。
My app structure:
Backend: NodeJS
Frontend: ReactJS
Mongodb
然后我尝试在 NodeJS 中连接 Redis。 它可以在我的本地主机上运行,但不能在我的 GKE 集群上运行。
(NodeJS)
const redis = require('redis');
const REDISPORT = 6379;
const subscriber = redis.createClient(REDISPORT, redis);
在 GKE 集群上运行时出错:
错误:Redis 连接到 127.0.0.1:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379
我认为这可能是由服务连接引起的,我的 redis 部署和服务配置如下。
apiVersion: apps/v1
kind: Deployment
metadata:
name: car-redis-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: car-redis
spec:
containers:
- name: car-redis
image: redis:latest
ports:
- containerPort: 6379
name: http-port
selector:
matchLabels:
app: car-redis
apiVersion: v1
kind: Service
metadata:
name: car-redis-service
spec:
ports:
- port: 6379
protocol: TCP
targetPort: 6379
selector:
app: car-redis
type: NodePort
它在 localhost 上工作,因为主机可能已经配置为运行redis
,因此您的node
正在寻找127.0.0.1:6379
并且它能够连接到一个而没有任何错误。
来到 k8s,您部署的application
正在同一容器中查找redis
。 所以,你在做同样的事情时遇到了错误。
在使用 GKE 或云时,您需要使用运行redis
应用程序的特定host ip
或url
配置您的node
应用程序。 因为,我可以看到你已经在你的 k8 集群中运行了一个redis
,如果它与你的node
应用程序部署是同一个集群,你可以使用类似这样的东西直接将它与服务连接
<service-name>.<namespace-name>.svc.cluster.local
ns之间如何通信?
从您的示例中,确保您的node
应用程序支持redis
url 而不仅仅是端口。 并在您的node
应用程序中添加您的配置car-redis-service.default.svc.cluster.local:6379
它应该可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.