java - Consul Java DNS SRV 查找

标签 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. 使用端口转发,例如 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)

我更喜欢进行端口转发,因为监听低端口需要 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/

相关文章:

java - 如何在不指定 servlet 位置的情况下谎报错误代码?

configuration - 更改 Thomson TG585 Cytanet 路由器的 DNS

ansible - Consul 的 Key-Value 存储有哪些具体用例?

docker - 领事和注册人到单个主机,可以吗?

java - 计算 jar 文件的代码指标

java - 如何将 outputStream 转换为字节数组?

java - java中的json缺少方括号

mysql - 使用哪个外键引用表?

dns - 如何申请 oracle.com 的子域?

领事检查HTTPS自签名