我正在开发一个应用程序(汽车应用程序),它使用socket.io。现在我将把它部署到kubernetes集群。然后使用redis的pub/sub函数进行通信。
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失败-连接到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
1条答案
按热度按时间f1tvaqid1#
它在localhost上工作,因为主机可能已经配置为
redis
跑步,所以你的node
正在寻找127.0.0.1:6379
它能够连接到一个没有任何错误。来到k8s,你的朋友
application
正在寻找redis
在同一容器内。所以,你在做同样的事情时也会出错。在使用gke或cloud时,您需要配置
node
与特定host ip
或者url
你的redis
应用程序正在运行。我可以看到你已经在运行一个redis
在您的k8集群中,如果它与您的node
应用程序部署您可以使用类似这样的方式直接将其与服务连接起来<service-name>.<namespace-name>.svc.cluster.local
如何在ns之间通信?从你的例子中,确保
node
应用程序支持redis
url而不仅仅是端口。并添加您的配置car-redis-service.default.svc.cluster.local:6379
在你的node
应用程序应该没有任何问题。