K8s集群中NodeJS中的服务如何连接Redis?
How to connect Redis with service in NodeJS in K8s cluster?
我正在开发一个使用 socket.io 的应用程序 (car-app)。现在我要把它部署到 kubernetes 集群。然后我使用Redispub/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 集群上 运行ning 时出错:
Error: Redis connection to 127.0.0.1:6379 failed - connect
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
它在本地主机上工作,因为主机可能已经配置了 redis
运行,所以你的 node
正在寻找 127.0.0.1:6379
并且它能够连接到一个没有任何错误。
来到 k8s,您部署的 application
正在同一容器中寻找 redis
。因此,您在执行相同操作时遇到错误。
在使用 GKE 或云时,您需要使用特定的 host ip
或 url
配置您的 node
应用程序,您的 redis
应用程序 [=38] =].因为,我可以看到你已经 运行 a redis
在你的 k8 集群中,如果它与你的 node
应用程序部署是同一个集群,你可以使用类似的东西直接将它与服务连接这个
<service-name>.<namespace-name>.svc.cluster.local
How to communicate between ns?
根据您的示例,确保您的 node
应用支持 redis
url 而不仅仅是端口。并在您的 node
应用程序中添加您的配置 car-redis-service.default.svc.cluster.local:6379
它应该可以正常工作。
我正在开发一个使用 socket.io 的应用程序 (car-app)。现在我要把它部署到 kubernetes 集群。然后我使用Redispub/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 集群上 运行ning 时出错:
Error: Redis connection to 127.0.0.1:6379 failed - connect 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
它在本地主机上工作,因为主机可能已经配置了 redis
运行,所以你的 node
正在寻找 127.0.0.1:6379
并且它能够连接到一个没有任何错误。
来到 k8s,您部署的 application
正在同一容器中寻找 redis
。因此,您在执行相同操作时遇到错误。
在使用 GKE 或云时,您需要使用特定的 host ip
或 url
配置您的 node
应用程序,您的 redis
应用程序 [=38] =].因为,我可以看到你已经 运行 a redis
在你的 k8 集群中,如果它与你的 node
应用程序部署是同一个集群,你可以使用类似的东西直接将它与服务连接这个
<service-name>.<namespace-name>.svc.cluster.local
How to communicate between ns?
根据您的示例,确保您的 node
应用支持 redis
url 而不仅仅是端口。并在您的 node
应用程序中添加您的配置 car-redis-service.default.svc.cluster.local:6379
它应该可以正常工作。