簡體   English   中英

kubernetes 中的 redis 和 nodejs 錯誤

[英]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-kubernetesENOTFOUNDredis-enotfound

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM