假设我在consul中注册了一项服务,这样我就可以通过以下方式查询它:
curl http://localhost:8500/v1/catalog/service/BookStore.US
并返回
[
{
"ID": "xxxxx-xxx-...",
"ServiceName": "BookStore.US",
...
}
]
如果我在代码中直接使用consul,那没关系。但问题是,当我想直接使用SRV记录时,它不起作用。
通常情况下,领事会创建一个名为service_name.service.consol的服务记录;书店美国服务领事;
以便您可以使用";"挖";命令获取。
dig @127.0.0.1 -p 8600 BookStore.US.service.consul SRV
但当我试图";"挖";它以0回答会话失败。
我的问题:
执政官如何构建服务/SRV名称(在注册执政官记录中选择一些字段并连接它们?(
有没有什么方法可以让我用通配符搜索SRV记录,这样至少我可以通过使用关键字"来搜索SRV名称;BookStore";
SRV查找不起作用,因为Consul将服务名称中的.
解释为主机名中的域分隔符。
根据https://www.consul.io/docs/discovery/dns#standard-Consul中的查找、服务查找可以使用以下格式。
[tag.]<服务>。服务[.database]。<域>
标记和数据中心组件是可选的。必须指定其他组件。给定名称BookStore.US.service.consul
,Consul将组件解释为:
- 标签:
BookStore
- 服务:
US
- 子域:
service
- TLD:
consul
由于您没有以名称US
注册的服务,DNS服务器以零记录正确响应。
为了解决这个问题,你可以做两件事中的一件。
-
使用其他名称注册服务,例如
bookstore-us
。{ "Name": "bookstore-us", "Port": 1234 }
-
在服务注册中将
US
位置指定为tag
。{ "Name": "bookstore", "Tags": ["us"], "Port": 1234 }
请注意,在任何一种情况下,服务名称都应该是有效的DNS标签。也就是说,它可能只包含ASCII字母a到z(不区分大小写(、数字0到9以及连字符减号('-'(。
SRV查询然后应成功返回服务查找的结果。
# Period in hostname changed to a hyphen
$ dig -t SRV bookstore-us.service.consul +short
# If `US` is a tag:
# Standard lookup
$ dig -t SRV us.bookstore.service.consul +short
# RFC 2782-style lookup
$ dig -t SRV _bookstore._us.service.consul +short