执政官如何构建SRV记录



假设我在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服务器以零记录正确响应。

为了解决这个问题,你可以做两件事中的一件。

  1. 使用其他名称注册服务,例如bookstore-us

    {
    "Name": "bookstore-us",
    "Port": 1234
    }
    
  2. 在服务注册中将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

最新更新