无法连接到 Kubernetes 中的 Redis:与 localhost:6379 的 Redis 连接失败
Fail to connect to Redis in Kubernetes: Redis connection to localhost:6379 failed
我已经部署了一个连接到 Redis pod 和 Mongodb pod 的后端 API。 API 已成功建立与 mongodb 的连接,但未与 Redis 建立连接,出现以下错误,有人知道如何解决吗?
Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1088:14)
2021-01-18 09:22:36 error: uncaughtException: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1088:14) {"error":{"errno":"ECONNREFUSED","code":"ECONNREFUSED","syscall":"connect","address":"127.0.0.1","port":6379},"stack":"Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379\n at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1088:14)","exception":true,"date":"Mon Jan 18 2021 09:22:36 GMT+0000 (Coordinated Universal Time)","process":{"pid":1,"uid":0,"gid":0,"cwd":"/usr/src/app","execPath":"/usr/local/bin/node","version":"v11.14.0","argv":["/usr/local/bin/node","/usr/src/app/dist/server.js"],"memoryUsage":{"rss":101421056,"heapTotal":73146368,"heapUsed":37365856,"external":19092480}},"os":{"loadavg":[1.232421875,0.8720703125,0.69482421875],"uptime":281868},"trace":[{"column":14,"file":"net.js","function":"TCPConnectWrap.afterConnect [as oncomplete]","line":1088,"method":"afterConnect [as oncomplete]","native":false}]}
backend.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-api
spec:
replicas: 1
selector:
matchLabels:
app: backend-api
template:
metadata:
labels:
app: backend-api
spec:
containers:
- image: <image_name>
name: backend-test
imagePullPolicy: Never
ports:
- containerPort: 8080
env:
- name: MONGODB_URL
value: mongodb://localhost:27017/dt?authSource=admin
- name: REDIS_URL
value: redis://localhost:6379
restartPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
name: backend-svc
labels:
app: backend-svc
spec:
selector:
app: backend-api
ports:
- name: http
port: 8080
targetPort: 8080
redis.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-master
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
replicas: 1
template:
metadata:
labels:
app: redis
spec:
containers:
- name: master
image: k8s.gcr.io/redis:e2e # or just image: redis
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis-master
labels:
app: redis
spec:
ports:
- name: redis
port: 6379
targetPort: 6379
selector:
app: redis
我也尝试过将端口转发到 pod 上的端口,但没有成功
kubectl port-forward redis-master-765d459796-258hz 6379:6379
localhost 用于一个 pod 中容器之间的通信。试试 redis-master:6379
localhost 仅用于本地连接。这意味着您只能从 pod 内部与本地主机连接。当您需要从外部访问时,您需要使用服务。然后服务将解析您的 IP 地址。当您尝试通过服务访问时。这是您的 yaml 中需要更新的代码。
- name: REDIS_URL
value: redis://redis-master.default.svc.cluster.local:6379
模板类似于 my_Service_Name.my_Namespace.svc.cluster-domain.example
,但您可以跳过 cluster-domain.example
部分。只有 Service_Name.Namespace.svc
可以正常工作。所以对你来说它将是:redis-master.default.svc
这是更新后的代码:
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-api
spec:
replicas: 1
selector:
matchLabels:
app: backend-api
template:
metadata:
labels:
app: backend-api
spec:
containers:
- image: <image_name>
name: backend-test
imagePullPolicy: Never
ports:
- containerPort: 8080
env:
- name: MONGODB_URL
value: mongodb://localhost:27017/dt?authSource=admin
- name: REDIS_URL
value: redis://redis-master.default.svc.cluster.local:6379
restartPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
name: backend-svc
labels:
app: backend-svc
spec:
selector:
app: backend-api
ports:
- name: http
port: 8080
targetPort: 8080
我已经部署了一个连接到 Redis pod 和 Mongodb pod 的后端 API。 API 已成功建立与 mongodb 的连接,但未与 Redis 建立连接,出现以下错误,有人知道如何解决吗?
Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1088:14)
2021-01-18 09:22:36 error: uncaughtException: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1088:14) {"error":{"errno":"ECONNREFUSED","code":"ECONNREFUSED","syscall":"connect","address":"127.0.0.1","port":6379},"stack":"Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379\n at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1088:14)","exception":true,"date":"Mon Jan 18 2021 09:22:36 GMT+0000 (Coordinated Universal Time)","process":{"pid":1,"uid":0,"gid":0,"cwd":"/usr/src/app","execPath":"/usr/local/bin/node","version":"v11.14.0","argv":["/usr/local/bin/node","/usr/src/app/dist/server.js"],"memoryUsage":{"rss":101421056,"heapTotal":73146368,"heapUsed":37365856,"external":19092480}},"os":{"loadavg":[1.232421875,0.8720703125,0.69482421875],"uptime":281868},"trace":[{"column":14,"file":"net.js","function":"TCPConnectWrap.afterConnect [as oncomplete]","line":1088,"method":"afterConnect [as oncomplete]","native":false}]}
backend.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-api
spec:
replicas: 1
selector:
matchLabels:
app: backend-api
template:
metadata:
labels:
app: backend-api
spec:
containers:
- image: <image_name>
name: backend-test
imagePullPolicy: Never
ports:
- containerPort: 8080
env:
- name: MONGODB_URL
value: mongodb://localhost:27017/dt?authSource=admin
- name: REDIS_URL
value: redis://localhost:6379
restartPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
name: backend-svc
labels:
app: backend-svc
spec:
selector:
app: backend-api
ports:
- name: http
port: 8080
targetPort: 8080
redis.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-master
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
replicas: 1
template:
metadata:
labels:
app: redis
spec:
containers:
- name: master
image: k8s.gcr.io/redis:e2e # or just image: redis
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis-master
labels:
app: redis
spec:
ports:
- name: redis
port: 6379
targetPort: 6379
selector:
app: redis
我也尝试过将端口转发到 pod 上的端口,但没有成功
kubectl port-forward redis-master-765d459796-258hz 6379:6379
localhost 用于一个 pod 中容器之间的通信。试试 redis-master:6379
localhost 仅用于本地连接。这意味着您只能从 pod 内部与本地主机连接。当您需要从外部访问时,您需要使用服务。然后服务将解析您的 IP 地址。当您尝试通过服务访问时。这是您的 yaml 中需要更新的代码。
- name: REDIS_URL
value: redis://redis-master.default.svc.cluster.local:6379
模板类似于 my_Service_Name.my_Namespace.svc.cluster-domain.example
,但您可以跳过 cluster-domain.example
部分。只有 Service_Name.Namespace.svc
可以正常工作。所以对你来说它将是:redis-master.default.svc
这是更新后的代码:
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-api
spec:
replicas: 1
selector:
matchLabels:
app: backend-api
template:
metadata:
labels:
app: backend-api
spec:
containers:
- image: <image_name>
name: backend-test
imagePullPolicy: Never
ports:
- containerPort: 8080
env:
- name: MONGODB_URL
value: mongodb://localhost:27017/dt?authSource=admin
- name: REDIS_URL
value: redis://redis-master.default.svc.cluster.local:6379
restartPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
name: backend-svc
labels:
app: backend-svc
spec:
selector:
app: backend-api
ports:
- name: http
port: 8080
targetPort: 8080