0

我正在尝试使用 Consul 从使用 spotify 的 dnsjava 在默认 Debian 服务器上运行的 Java 应用程序进行服务发现

我知道 Consul DNS 在端口 8600 上侦听查询(https://www.consul.io/docs/agent/dns.html)。

但是默认情况下 DNS 侦听端口 53,因此需要将查询转发给 Consul。我使用 IPTables 进行了此转发 - 但我不知道这是否是正确的方法。它确实可以使用 dig,但我不知道副作用可能是什么。作为应用程序开发人员,我不一定有权更新 iptables 并安装其他软件包

我有一个服务叫 bapi

sudo apt-get install dnsutils

sudo iptables -t nat -A PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 8600

sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 53 -j REDIRECT --to-ports 8600

sudo iptables -t nat -A OUTPUT -d localhost -p udp -m udp --dport 53 -j REDIRECT --to-ports 8600

sudo iptables -t nat -A OUTPUT -d localhost -p tcp -m tcp --dport 53 -j REDIRECT --to-ports 8600

dig @127.0.0.1 -p 8600 bapi.service.consul. SRV

dig @127.0.0.1 -p 8600 bapi-stub-node.node.consul. ANY

dig @127.0.0.1 -p 53 bapi.service.consul. SRV

dig @127.0.0.1 -p 53 bapi-stub-node.node.consul. ANY

此应用程序尝试从 Java 应用程序中查找 DNS,但它不起作用,我不知道为什么

https://github.com/tonymurphy/srv-discovery

我知道 Spring 有 consul 集成和服务发现,但我不想要它附带的所有包袱,而且它似乎使用 http api 来做服务查找

4

1 回答 1

1

有2种方法:

  1. 使用端口转发,如 ip 表(你使用的)、dnsmasq 等。例如,使用你的 debian 包管理器安装 dnsmasq 将是: apt-get install dnsmasq然后: echo "server=/consul/127.0.0.1#8600" > /etc/dnsmasq.d/10-consul

  2. 使用 port.dns 配置(https://www.consul.io/docs/agent/options.html)让 consul 监听端口 53

我更喜欢做端口转发,因为监听低端口需要 root 权限,而给予 consul root 权限可能不是一个好主意。另一方面,安装 dnsmasq 或其他解决方案只是您系统的另一个依赖项。

无论如何,您必须在它们之间进行选择,并且这两种方法都需要 root 权限(请您的系统管理员支持您)。

您可以在这里阅读所有相关信息: https ://www.consul.io/docs/guides/forwarding.html

于 2016-08-25T18:45:59.483 回答