Ошибка с редисом и nodejs в кубернетес - PullRequest
1 голос
/ 18 февраля 2020

Мне нужно развернуть web (angularjs), API (node.js), Redis. Тем не менее, я получаю ошибку при достижении Redis в API (node.js) с помощью kubernetes.

[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. Какова лучшая стратегия развертывания? т.е. как веб, 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

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 февраля 2020

Проблема исправлена.

Ошибка в том, что я создал все контейнеры в одном модуле. Создание каждого контейнера в отдельных модулях и отдельных сервисах решило проблему.

В Node.js для файла приложения. js задано значение const Redis = new Redis ({host: 'redis'});

0 голосов
/ 19 февраля 2020

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...