2016-12-30 2 views
0

Я установил consul на AWS EC2, с 3 серверами и 1 клиентом.Конфигурация DNS для доступа к консулу удаленно

сервер IPs = 11.XX.XX.1,11.XX.XX.2,11.XX.XX.3. клиент IP = 11.XX.XX.4

consul конфигурации: /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 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 
----------------------------- 

Как заставить его работать?

ответ

0

По умолчанию consul только слушает подключения DNS на устройстве loopback экземпляра. Лучшие практики требуют, чтобы вы установили клиента на любую удаленную машину, которая хочет использовать консул DNS. Это не всегда практично.

Я видел люди разоблачить DNS (консул порт 8600) на все интерфейсы с помощью JSON конфигурации Консула так:

{ 
    "server": true, 
    "addresses": { 
    "dns": "0.0.0.0" 
    } 
} 

Вы также можете выставить все порты прослушивают шлейф с полем CLIENT_ADDR в формате JSON или проходе это с помощью командной строки:

consul agent -client 0.0.0.0 

Есть несколько элементов управления и кнопки, доступные для настройки (см Docs):

https://www.consul.io/docs/agent/options.html

+0

, когда вы говорите, выставляете DNS на весь интерфейс, что это значит? –

+0

Я думаю, проблема связана с resolv.conf, поскольку AWS перезаписывает его. –

+0

Все, что связано с петлевой интерфейсом, доступно только для аппарата, на котором он запущен. По умолчанию Consul DNS только прослушивает устройство loopback. Вот почему вы не можете получить доступ к DNS с помощью копания из другого экземпляра. Expose DNS на всех интерфейсах сообщает приложению Consul прослушивать входящие DNS-запросы на всех интерфейсах (а не только ограниченном кольцевом устройстве). Это позволяет другим экземплярам связываться с этим экземпляром с использованием обычных IP-адресов. Конечно, это исключает любые проблемы с брандмауэром или связью между двумя экземплярами. – thun

Смежные вопросы