Consul服务定义json如下
{
"Address": "192.168.10.10",
"TaggedAddresses": {
"lan": "192.168.10.10",
"wan": "10.0.10.10"
},
"CreateIndex": 51,
"ModifyIndex": 51,
"Node": "foobar",
"ServiceAddress": "172.17.0.3",
"ServiceEnableTagOverride": false,
"ServiceID": "32a2a47f7992:nodea:5000",
"ServiceName": "foobar",
"ServicePort": 5000,
"ServiceTags": [
"tacos"
]
}
现在根据https://www.consul.io/docs/agent/http/catalog.html#catalog_service
提供的文件地址和服务地址的定义如下:
一个。这是否意味着Address是consul服务器节点的地址,服务地址是服务所在节点的地址?
或
B中。这是否意味着Address是驻留在服务中的consul代理的地址。如果是这种情况,这意味着地址和服务地址是否相同?
以上哪项是正确的?
答案 0 :(得分:5)
我想,地址是consul代理的地址,ServiceAddress是用于访问此服务的地址。这可以是相同的地址,但它们也可以不同。
例如,您可以拥有一个具有多个接口的主机,其中一个用于使Consul代理相互交互,另一个用于访问您的服务。
或者您可以使用Docker部署具有许多微服务的单个节点。您可以使用此节点的地址启动单个Consul Agent,并注册在容器中运行的多个微服务,并通过容器内部IP地址相互通信。在这种情况下,您将获得服务信息,其中Address等于节点的IP,ServiceAddress等于具有服务的容器的IP。