dns - 如何从主机访问Consul DNS接口(interface)?

标签 dns vagrant virtual-machine virtualbox consul

我一直在尝试为“微服务”创建一个环境。其中两个关键组件是DockerConsul,它们都在虚拟机上运行(我使用Vagrant来创建这个虚拟机)。当我通过 ssh 进入虚拟机时,我可以使用 dig 命令行工具来访问 Consul 提供的 DNS 接口(interface)。

问题是:我希望能够从我的主机访问 DNS 接口(interface)。我已经为虚拟机提供了静态 IP,但这并没有解决我的问题。我还打开了虚拟机的 53 端口,但这也没有解决我的问题。

这是我的虚拟机的 Vagrant 设置脚本:

config.vm.define :app1 do |app1|
# Every Vagrant virtual environment requires a box to build off of.
app1.vm.box = "ubuntu/trusty64"

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
app1.vm.network :forwarded_port, guest: 3000, host: 3000
app1.vm.network :forwarded_port, guest: 53, host: 53
app1.vm.network :forwarded_port, guest: 8500, host: 8500
app1.vm.network :forwarded_port, guest: 15672, host: 15672

# Open 32 ports for Docker containers
for port in 32768..32800
  app1.vm.network :forwarded_port, guest: port, host: port
end

# Create a private network, which allows host-only access to the machine
# using a specific IP.
app1.vm.network :private_network, ip: "200.0.0.1"

app1.vm.hostname = "server-1"

config.vm.provider "virtualbox" do |v|
  v.memory = 1024
end

这就是我使用 Consul 启动 Docker 容器的方式:

sudo docker run --name consul -h $HOSTNAME -p 0.0.0.0:8300:8300 -p 0.0.0.0:8301:8301 -p 0.0.0.0:8301:8301/udp -p 0.0.0.0:8302:8302 -p 0.0.0.0:8302:8302/udp -p 0.0.0.0:8400:8400 -p 0.0.0.0:8500:8500 -p 0.0.0.0:53:53 -p 0.0.0.0:53:53/udp -d progrium/consul -advertise 200.0.0.1 -server -bootstrap

我尝试在我的主机上使用以下命令dig:

dig @200.0.0.1 someservice.service.consul SRV

这回应了:

; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> @200.0.0.1 someservice.service.consul ANY
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

有什么方法可以让我的主机访问 Consul DNS 接口(interface)吗?任何帮助将不胜感激。

最佳答案

这对我有用:

$ docker pull gliderlabs/consul
$ docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --name node1 -h node1 gliderlabs/consul agent -server -bootstrap -client=0.0.0.0 -data-dir /tmp/consul
$ curl '127.0.0.1:8500/v1/catalog/nodes' 
$ # returns [{"Node":"node1","Address":"172.17.0.34"}]

现在 dns 在容器 IP (172.17.0.34) 上可用,不知道为什么在 0.0.0.0 上不可用:

$ dig   @172.17.0.34 -p 8600 node1.node.consul
$ # returns:

; <<>> DiG 9.9.5-3ubuntu0.3-Ubuntu <<>> @172.17.0.34 -p 8600 node1.node.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4812
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;node1.node.consul.     IN  A

;; ANSWER SECTION:
node1.node.consul.  0   IN  A   172.17.0.34

;; Query time: 0 msec
;; SERVER: 172.17.0.34#8600(172.17.0.34)
;; WHEN: Wed Jul 22 08:23:51 CEST 2015
;; MSG SIZE  rcvd: 68

关于dns - 如何从主机访问Consul DNS接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30983079/

相关文章:

c - C中的DNS服务器返回IP地址和端口号

linux - Vagrant for virtual linux dev - 如何知道虚拟机启动是否为 "hanging"?

c - 开发内核并在虚拟机中测试它们

linux - Qemu 显示黑屏

python - 向 DNS 查询时欺骗 src ip 地址

scala - 无法通过 service-locator-dns 库使用基于非 lagom 的静态项目服务

couchdb - Vagrant 端口转发不起作用

php - Vagrant phpmyadmin php 显示为纯文本问题

android - 无法开始调试 : Cannot connect to 127. 0.0.1:29308

dns - IPv6 DNS记录的结构