【发布时间】:2020-09-22 13:34:06
【问题描述】:
我正在开发一个使用 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 失败 - 连接 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 在 k8s 网络下运行。您将需要 Redis pod 主机名 (
car-redis) kubernetes.io/docs/concepts/services-networking/dns-pod-service -
您也可以在一个 pod 中运行 2 个容器,这样您就可以通过 localhost 从另一个容器访问 redis,当然如果您打算使用同一个实例,则不建议这样做来自另一个 pod 的 redis
标签: node.js kubernetes redis kubernetes-pod kubernetes-service