我已经在 EC2 aws 上安装了 consul。
我有 3 个 consul 服务器 = 11.XX.XX.1,11.XX.XX.2,11.XX.XX.3。
我有 1 个 consul 客户端 = 11.XX.XX.4
以下是配置文件 /etc/consul.d/server/config.json
{
"bootstrap": false,
"server": true,
"datacenter": "abc",
"advertise_addr": "11.XX.XX.1",
"data_dir": "/var/consul",
"log_level": "INFO",
"enable_syslog": true,
"addresses": {
"http": "0.0.0.0"
},
"start_join": ["11.XX.XX.2", "11.XX.XX.3"]
}
以下是 netstat 输出
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:8400 0.0.0.0:* LISTEN 29720/consul
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1006/sshd
tcp 0 0 127.0.0.1:8600 0.0.0.0:* LISTEN 29720/consul
tcp6 0 0 :::8301 :::* LISTEN 29720/consul
tcp6 0 0 :::8302 :::* LISTEN 29720/consul
tcp6 0 0 :::8500 :::* LISTEN 29720/consul
tcp6 0 0 :::22 :::* LISTEN 1006/sshd
tcp6 0 0 :::8300 :::* LISTEN 29720/consul
curl 在远程机器上运行良好,但 dig 只能在本地机器上运行。
; <<>> DiG 9.9.5-3ubuntu0.6-Ubuntu <<>> @127.0.0.1 -p 8600 web.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40873
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;web.service.consul. IN A
;; ANSWER SECTION:
web.service.consul. 0 IN A 11.XX.XX.4
;; Query time: 0 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Fri Dec 30 08:21:41 UTC 2016
;; MSG SIZE rcvd: 52
但远程机器挖掘不工作,请帮忙
dig @11.XX.XX.1 -p 8600 web.service.consul
; <<>> DiG 9.9.5-3ubuntu0.6-Ubuntu <<>> @11.XX.XX.1 -p 8600 web.service.consul
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached
-----------------------------
答案1
你可以尝试这个方法:
检查客户端计算机上的名称服务器(例如:cat /etc/resolv.conf - 这取决于您的机器配置)
将 consul 服务器配置更改为:
{ “引导程序”:false, “服务器”:true, “数据中心”:“abc”, “广告地址”:“11.XX.XX.1”, “data_dir”:“/var/consul”, "日志级别": "INFO", “enable_syslog”:true, “地址”:{ “http”:“0.0.0.0” }, "start_join": ["11.XX.XX.2", "11.XX.XX.3"], “递归者”:[“xxx.xxx.xxx.xxx”,“xxx.xxx.xxx.xxx”], “端口”:{ “DNS”:53 } }
其中递归器是来自点 1 的 DNS 服务器 IP。
在所有 consul 服务器上重新加载或重新启动 consul 服务 - 现在 consul 正在作为 dns 服务器监听端口 53
将客户端计算机上的名称服务器更改为 consul 服务器 IP。确保您的客户端计算机使用新地址(您只需重新启动客户端计算机即可)
现在,您可以在客户端机器上使用所有域名,包括 consul 的域名,例如:dig web.service.consul dig google.com
为了在 consul 服务器上获得相同的行为,您也必须将名称服务器更改为 consul IP。
答案2
我不是领事专家,但我知道您正在使用 TCP 端口 8600。那么您能否确认您已检查过端口 8600 是否在您的 AWS 安全规则设置中打开?
是否只有 consul 失败或任何其他协议失败,即 ssh。