繁体   English   中英

Redis如何在K8s集群的NodeJS中连接服务?

[英]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 ipurl配置您的node应用程序。 因为,我可以看到你已经在你的 k8 集群中运行了一个redis ,如果它与你的node应用程序部署是同一个集群,你可以使用类似这样的东西直接将它与服务连接

<service-name>.<namespace-name>.svc.cluster.localns之间如何通信?

从您的示例中,确保您的node应用程序支持redis url 而不仅仅是端口。 并在您的node应用程序中添加您的配置car-redis-service.default.svc.cluster.local:6379它应该可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM