Не удается получить доступ к службе с помощью DNS

Я использую пакет request от NPM для обработки внутренней связи между службами. Я также установил правильный DNS-сервер (используя Hashicorp Consul в качестве SD и DNS).

Я могу копать на своем локальном компьютере (где работают службы) DNS-сервер консула, и я могу получить правильный ответ (IP-адрес и номер порта.

Как настроить DNS в файле app.js6

dns.setServers([ `${config.consul.host}:8600` ]);

Установить в файле, отличном от app.js

options = {
    baseUrl: `http://auth.service.consul`,
    json: { '': '' },
    headers: { authorization: '' }
};

Тот же файл, что и варианты выше

request.post(req.path, options, (error, response, body) => {
    console.log(error);
    if (error) throw error;
    res.status(response.statusCode).json(body);
});

Сообщение об ошибке:

    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
  errno: 'ENOTFOUND',
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'auth.service.consul',
  host: 'auth.service.consul',
  port: 80 }

Я хочу иметь возможность делать запросы к службе «auth» при использовании Consul в качестве моего DNS-сервера. В настоящее время у меня есть очень хакерский способ сделать это, но я действительно хотел бы использовать DNS.

Я нашел это, но это относится к пакету axios, а не к запросу, который я пытаюсь использовать, хотя он выдает ту же ошибку, что и решение, которое там не помогло. Обнаружение службы Consul с DNS на Nodejs


person joshk132    schedule 08.06.2019    source источник
comment
Если dig работает с IP-адресом, установленным в ${config.consul.host}:8600, то dns.js может по какой-то причине не вызывать этот DNS-сервер. Из документации nodejs.org/api/dns.html#dns_dns_setservers_servers The dns.setServers() method affects only dns.resolve(), dns.resolve*() and dns.reverse() (and specifically not dns.lookup()). Я не очень хорошо владеет JavaScript, но попробуйте отследить DNS-серверы, к которым пытается подключиться ваш request.post.   -  person bagljas    schedule 10.06.2019


Ответы (1)


У вас может быть проблема курицы и яйца. Попробуйте преобразовать ${config.consul.host} в IP-адрес, а затем вызвать dns.setServers с этим IP-адресом.

person schtever    schedule 09.06.2019
comment
Я не понимаю, что вы имеете в виду, зачем мне устанавливать переменную, если она уже одна? Этот IP-адрес является жестко закодированным значением в моем файле конфигурации, поэтому он уже имеет значение. Использование строк шаблона упрощает жизнь, поскольку мне не нужно объединять все в одну переменную. Просто имеет смысл использовать строки шаблона вместо новой переменной. - person joshk132; 09.06.2019
comment
Я предположил, что config.consul.host было именем хоста, а не IP-адресом. Виноват. Вы сказали, что dig вернул вам IP и порт. Какой тип записи вы запрашивали у dig? А какой порт вернули? - person schtever; 10.06.2019