Flask consul 和 consul DNS

Flask consul and consul DNS

我正在尝试学习使用 Flask 和 consul。

这是我的 /etc/consul.d/consul.json

{ "data_dir": "/opt/consul/data", "server": 是的, "bind_addr": "0.0.0.0", "bootstrap_expect": 1, "ui":是的, "domain": "bino.inc", "client_addr": "0.0.0.0", "node_name": "node01" }

运行 与 /usr/bin/consul agent -config-dir=/etc/consul.d/

用 dig @127.0.0.1 -p 8600 node01.node.bino.inc 测试得到 ;;答案部分: node01.node.bino.inc。 0 输入 192.168.1.5

我只是复制了 https://github.com/vsudilov/flask-consulate 中的示例 对它做一个小改动:

# Register Consul service:
consul.register_service(
    address='127.0.0.1',
    name='webapp',
    interval='10s',
    tags=['master', ],
    port=5000,
    httpcheck='http://localhost:5000/healthcheck'
)

consul.app.run(端口=5000,线程=假,调试=真)

看起来 consul 和 flask script 正在相互通信。 烧瓶调试得到:

127.0.0.1 - - [15/Nov/2018 08:38:27] "GET /healthcheck HTTP/1.1" 200 -

我的问题是 consul 将生成的我的烧瓶脚本的 FQDN?

我试过了

dig @127.0.0.1 -p 8600 webapp.bino.inc

,领事调试说:

2018/11/15 08:41:29 [WARN] dns: QName invalid: webapp.

尝试过

dig @127.0.0.1 -p 8600 webserver.bino.inc

,领事调试说:

2018/11/15 08:43:37 [WARN] dns: QName invalid: webserver.

此致 -比诺-

通过 DNS 接口在 Consul 中查询注册服务需要服务 FQDN 的特定结构,如本 link 中所述,用于标准查找 (Conusl DNS stadard lookup)

向 Consul 注册的服务的 FQDN 必须采用以下格式:

<service>.service[.datacenter].<domain>

其中 <service> 是您在 Consul 注册的服务的名称,在您的例子中是 webappwebserver<domain> 是在您的 consul.json 中定义的 consul 域。 [datacenter]是可选的,Consul服务器会return为其所属的datacenter服务。由于您尚未在 consul.json 中定义它,因此它是 dc1.

所以您的 dig 查询应该如下所示:

dig @127.0.0.1 -p 8600  webapp.service.bino.inc

dig @127.0.0.1 -p 8600  webserver.service.bino.inc

您可以选择尝试将数据中心添加到 FQDN。您的 dig 查询应该看起来像这样,并且应该 return 与上面的响应相同,因为您是 运行 单 DC 单节点 Consul 集群:

dig @127.0.0.1 -p 8600  webserver.service.dc1.bino.inc

希望对您的问题有所帮助。