我正在尝试使用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来进行服务查找
最佳答案
有两种方法:
使用端口转发,例如 ip 表(您使用过的)、dnsmasq 等。 例如,使用 debian 包管理器安装 dnsmasq 将是:
apt-get install dnsmasq
然后:echo "server=/consul/127.0.0.1#8600">/etc/dnsmasq.d/10-consul
使用 port.dns 配置让 consul 监听端口 53 (https://www.consul.io/docs/agent/options.html)
我更喜欢进行端口转发,因为监听低端口需要 root 权限,而授予 consul root 权限可能不是一个好主意。另一方面,安装 dnsmasq 或其他解决方案只是您系统的另一个依赖项。
无论如何,您必须在它们之间进行选择,并且这两种方法都需要 root 权限(请要求您的系统管理员支持您)。
您可以在这里阅读所有相关内容: https://www.consul.io/docs/guides/forwarding.html
关于java - Consul Java DNS SRV 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39142280/