【问题标题】:Unable to reach service using DNS无法使用 DNS 访问服务
【发布时间】:2019-06-08 20:49:03
【问题描述】:

我正在使用 NPM 的 request 包来处理服务之间的一些内部通信。我还将 DNS 服务器设置为正确的服务器(使用 Hashicorp Consul 作为我的 SD 和 DNS)。

我可以在我的本地机器(服务正在运行的地方)上对 consul DNS 服务器进行挖掘,我能够得到正确的响应(IP 和端口号。

如何在 app.js 文件中设置 DNS 6

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 }

当使用 Consul 作为我的 DNS 服务器时,我希望能够向“auth”服务发出请求。我目前有一种非常老套的方法,但我真的很想使用 DNS。

我确实找到了这个,但它与 axios 包有关,而不是我尝试使用的请求,即使它产生相同的错误,但那里的解决方案没有帮助。 Consul service discovery with DNS on Nodejs

【问题讨论】:

  • 如果dig${config.consul.host}:8600 中设置的IP 地址起作用,那么由于某种原因,dns.js 可能不会调用此DNS 服务器。来自文档nodejs.org/api/dns.html#dns_dns_setservers_serversThe dns.setServers() method affects only dns.resolve(), dns.resolve*() and dns.reverse() (and specifically not dns.lookup()). 我对 JavaScript 不是很精通,但请尝试追踪您的 request.post 尝试联系的 DNS 服务器。

标签: node.js dns consul


【解决方案1】:

您可能有先有鸡还是先有蛋的问题。尝试将${config.consul.host} 解析为IP 地址,然后使用该IP 地址调用dns.setServers

【讨论】:

  • 我不明白你的意思,为什么我要把它设置为一个已经是一个变量的变量?该 IP 是我的配置文件中的硬编码值,因此它已经有一个值。使用模板字符串让生活更轻松,因为我不必将所有内容连接到一个变量中。使用模板字符串而不是新变量才有意义。
  • 我假设 config.consul.host 是主机名,而不是 IP 地址。我的错。你说 dig 给你返回了一个 IP 和一个端口。您向dig 请求了什么类型的记录?返回的端口是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多