我正在尝试使用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来进行服务查找
答案 0 :(得分:1)
有两种方法:
使用像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