node.js—如何将redis与k8s集群中nodejs中的服务连接起来?

hjzp0vay  于 2021-06-08  发布在  Redis
关注(0)|答案(1)|浏览(442)

我正在开发一个应用程序(汽车应用程序),它使用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
f1tvaqid

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 应用程序应该没有任何问题。

相关问题