![](/img/trans.png)
[英]Redis connect ECONNREFUSED in NodeJS in Kubernetes cluster
[英]Error with redis and nodejs in kubernetes
我需要部署 web (angularjs)、api (node.js)、redis。 但是,我在使用 kubernetes 将 redis 连接到 api (node.js) 时出错。
[ioredis] Unhandled error event: Error: getaddrinfo ENOTFOUND redis redis:6379
at errnoException (dns.js:50:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)
我尝试了多种配置,但没有任何效果。
const redis = new Redis('redis://redis:6379');
const redis = new Redis({ port: 6379, host: 'redis', connectTimeout: 10000 });
const client = redis.createClient(6379,"redis");
此外,由于标准 redis 映像没有 redis.conf,我添加了 redis.conf 并在其中绑定了 0.0.0.0,保护模式是。 我仍然收到错误。
我将所有容器放在一个部署中,即 web、api、redis 并使用类型创建服务:负载均衡器。 我可以访问该应用程序,但出现 [ioredis] 错误。
Kubernetes version: 1.15.7
Cloud being used: (aws)
Installation method: kops
Host OS: ubuntu
解决 redis 错误的任何想法和建议。 最好的部署策略是什么? 即web、api、redis如何在k8s中分发?
部署yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
labels:
app: app1
env: prod
spec:
selector:
matchLabels:
app: app1
env: prod
replicas: 3
template:
metadata:
labels:
app: app1
env: prod
spec:
containers:
- name: web-angular-nginx
image: xxxx.dkr.ecr.us-east-1.amazonaws.com/web
ports:
- containerPort: 8080
- name: api-nodejs
image: xxxx.dkr.ecr.us-east-1.amazonaws.com/api
ports:
- containerPort: 7000
- name: xxxx.dkr.ecr.us-east-1.amazonaws.com/redis
image: redis
ports:
- containerPort: 6379
服务 yaml
apiVersion: v1
kind: Service
metadata:
name: app-svc
labels:
app: app1
spec:
ports:
- port: 80
nodePort: 30001
protocol: TCP
selector:
app: app1
env: prod
type: LoadBalancer
谢谢
问题已解决。
错误是我在一个 pod 中创建了所有容器。 在单独的 pod 和单独的服务中创建每个容器解决了这个问题。
在 Node.js 中,app.js 文件设置为 const Redis = new Redis({ host: 'redis' });
ENOTFOUND是连接问题 - 您的节点脚本无法连接到指定地址的 Redis 服务器 - 检查您的 redis 服务器。
将以下行添加到您的配置中:
const redis = require('ioredis');
还可以尝试删除网络并通过以下方式替换 redis 部分:
redis:
image: redis:latest
command: ["redis-server", "--bind", "redis", "--port", "6379"]
编辑 NetworkManager.conf 文件:
$ vim /etc/NetworkManager/NetworkManager.conf
评论这一行:
#dns=dnsmasq
最后
$ sudo service network-manager restart
$ sudo service docker restart
您可以在此处找到更多信息: redis-kubernetes 、 ENOTFOUND 、 redis-enotfound 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.