使用 DNS 从远程访问 consul

使用 DNS 从远程访问 consul

我已经在 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

你可以尝试这个方法:

  1. 检查客户端计算机上的名称服务器(例如:cat /etc/resolv.conf - 这取决于您的机器配置)

  2. 将 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。

  1. 在所有 consul 服务器上重新加载或重新启动 consul 服务 - 现在 consul 正在作为 dns 服务器监听端口 53

  2. 将客户端计算机上的名称服务器更改为 consul 服务器 IP。确保您的客户端计算机使用新地址(您只需重新启动客户端计算机即可)

现在,您可以在客户端机器上使用所有域名,包括 consul 的域名,例如:dig web.service.consul dig google.com

为了在 consul 服务器上获得相同的行为,您也必须将名称服务器更改为 consul IP。

答案2

我不是领事专家,但我知道您正在使用 TCP 端口 8600。那么您能否确认您已检查过端口 8600 是否在您的 AWS 安全规则设置中打开?

是否只有 consul 失败或任何其他协议失败,即 ssh。

相关内容