Consul Java DNS SRV Lookup

时间:2016-08-25 10:04:34

标签: java dns consul service-discovery srv

我正在尝试使用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来进行服务查找

1 个答案:

答案 0 :(得分:1)

有两种方法:

  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配置使consul侦听端口53 (https://www.consul.io/docs/agent/options.html

  3. 我更喜欢进行端口转发,因为在低端口上侦听需要root权限,并且授予consul root权限可能不是一个好主意。另一方面,安装dnsmasq或其他解决方案只是系统的另一个依赖。

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

    你可以在这里阅读所有相关内容: https://www.consul.io/docs/guides/forwarding.html