我正在领事上做POC,以支持服务发现和多个微服务版本。在Linux VM上设置了Consul客户端和服务器群集(3个服务器)。我按照Consul处的文档进行操作,设置成功。
这是我的疑问。我的设置完全在虚拟机上。我已经使用HTTP API添加了服务定义。相同的服务在两个节点上运行。 服务已正确注册:
@PathVariable - must be placed in the endpoint uri and access the query parameter value from the request
@RequestParam - must be passed as method parameter (optional based on the required property)
http://localhost:8080/employee/call/7865467
@RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
public List<Calls> getAgentCallById(
@PathVariable(“callId") int callId,
@RequestParam(value = “status", required = false) String callStatus) {
}
http://localhost:8080/app/call/7865467?status=Cancelled
@RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
public List<Calls> getAgentCallById(
@PathVariable(“callId") int callId,
@RequestParam(value = “status", required = true) String callStatus) {
}
给了我两个节点的详细信息。
当我进行DNS查询时:
curl http://localhost:8600/v1/catalog/service/my-service
我能够看到托管服务的节点的预期结果。但我无法ping服务,因为服务名称未解析。
dig @127.0.0.1 -p 8600 my-service.service.consul
ping:未知主机。
如果我在/ etc / hosts文件中输入ping -c4 my-service or ping -c4 my-service.service.consul
的映射,我只能从同一个VM中ping这个。我无法在同一LAN或WAN上的另一台虚拟机上ping这个。
DNS的默认端口是53. Consul DNS接口侦听8600.我无法使用Docker进行DNS转发。我可能错过了什么吗?没有Docker / dnsmasq或iptables更新,可以查询DNS查询工作吗?
需要说明的是,这就是我希望得到的最终结果:
my-service
这需要以循环方式ping我已配置的节点。
如果这个问题是基本的话,请耐心等待我,并且我已经完成了每个领事相关问题。
答案 0 :(得分:2)
等待!请不要这样做!
DO。不。跑。 CONSUL
。如。 ROOT。
请。你可以,但不是。而是执行以下操作:
dnsmasq
因为它在常见情况下的简单性和稳定性。dnsmasq
以将TLD .consul
转发给consul
代理商127.0.0.1:8600
(默认)。/etc/resolv.conf
文件更新为指向127.0.0.1
作为您的名称服务器。有几种方法可以做到这一点,官方文档有一篇值得研究的文章:
https://www.consul.io/docs/guides/forwarding.html
这应该让你开始。
答案 1 :(得分:1)
这可能是一个非常复杂的主题,但最简单的方法是使用ports指令将consul更改为绑定到端口53,并向consul配置添加一些递归可以将实际DNS请求传递给具有完整DNS的主机功能。像这些位:
{ &#34; recursors&#34;:[ &#34; 8.8.8.8&#34 ;, &#34; 8.8.4.4&#34; ] &#34; ports&#34;:{ &#34; dns&#34;:53 } }
然后在/etc/resolve.conf中修改系统以使用带有名称服务器条目的dns的consul服务器。根据您的操作系统,您可以使用resolv.conf文件中的端口,并避免必须处理需要root来绑定到端口53的Consul。
在一个更复杂的场景中,我知道许多使用未绑定或绑定的人进行拆分DNS并且基本上相反,将.consul域路由到其DNS组织级别的非特权端口上的consul群集基础设施。