在 Vagrant 上运行 Consul:从来宾到主机的端口转发在 Mac OS X 上不起作用

use*_*644 1 macos portforwarding vagrant consul

我想使用 Vagrant 在我的本地机器(Mac OS X)上设置一个带有 UI 的 Consul 集群。到目前为止,我只是按照官方领事文档的入门说明进行操作:https : //www.consul.io/intro/getting-started/join.html

为了能够从主机访问 UI,我只是将这一行添加到提供的 Vagrantfile ( https://github.com/hashicorp/consul/blob/master/demo/vagrant-cluster/Vagrantfile )

n1.vm.network "forwarded_port", guest: 8500, host: 8500
Run Code Online (Sandbox Code Playgroud)

要在来宾机器上使用 UI 启动 Consul,我 ssh 进入机器,然后简单地将 -ui 标志添加到提供的命令中:

consul agent -server -bootstrap-expect=1 \
    -data-dir=/tmp/consul -node=agent-one -bind=172.20.20.10 \
    -enable-script-checks=true -config-dir=/etc/consul.d -ui
Run Code Online (Sandbox Code Playgroud)

Consul 启动时没有问题,从我可以执行的来宾机器开始:

curl -v 'http://localhost:8500/ui/'
Run Code Online (Sandbox Code Playgroud)

并返回预期的 HTML 页面。

但是,尝试http://localhost:8500/ui/在浏览器中访问或通过主机上的 curl访问不起作用。在主机上使用 curl 会导致:

*   Trying ::1...
* TCP_NODELAY set
* Connection failed
* connect to ::1 port 8500 failed: Connection refused
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8500 (#0)
> GET /ui/ HTTP/1.1
> Host: localhost:8500
> User-Agent: curl/7.54.0
> Accept: */*
> 
* Empty reply from server
* Connection #0 to host localhost left intact
curl: (52) Empty reply from server
Run Code Online (Sandbox Code Playgroud)

正确设置端口转发时我缺少什么?运行后的日志vagrant up对我来说很好:

n1: Forwarding ports...
    n1: 8500 (guest) => 8500 (host) (adapter 1)
Run Code Online (Sandbox Code Playgroud)

Fré*_*nri 5

您有 2 个选择:

  1. 使用静态 IP(公共网络专用网络),这样您将在静态 IP 上绑定您的领事代理(例如172.20.20.10),您将能够http://172.20.20.10:8500/ui/从您的 Web 浏览器访问

注意:在这种情况下,你不需要在你的 Vagrantfile 中有转发的端口

  1. 根据有关绑定选项的领事文档

应该绑定到内部集群通信的地址。这是集群中所有其他节点都应该可以访问的 IP 地址。默认情况下,这是"0.0.0.0",这意味着 Consul 将绑定到本地机器上的所有地址

这样您就可以从主机访问在您的 VM 上运行的 consul

注意:我的偏好是选项 #1