领事设置没有码头工具用于生产用途

时间:2016-12-20 17:14:24

标签: microservices consul

我正在领事上做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我已配置的节点。

如果这个问题是基本的话,请耐心等待我,并且我已经完成了每个领事相关问题。

同样经历了thisthis,这些也说我需要做额外的设置。

2 个答案:

答案 0 :(得分:2)

等待!请不要这样做!

DO。不。跑。 CONSUL。如。 ROOT。

请。你可以,但不是。而是执行以下操作:

  1. 在您的VM上运行缓存或转发DNS服务器。我倾向于dnsmasq因为它在常见情况下的简单性和稳定性。
  2. 配置dnsmasq以将TLD .consul转发给consul代理商127.0.0.1:8600(默认)。
  3. 将您的/etc/resolv.conf文件更新为指向127.0.0.1作为您的名称服务器。
  4. 有几种方法可以做到这一点,官方文档有一篇值得研究的文章:

    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群集基础设施。