如何从外部访问Consul UI

32

如何在外部访问Consul UI?

我想写入以下内容来访问Consul UI:

<任何主或从节点的IP>:8500

我尝试使用SSH隧道进行访问:

ssh -N -f -L 8500:localhost:8500 root@172.16.8.194

如果我访问http://localhost:8500,它可以工作,但这不是我想要的。我需要在没有SSH隧道的情况下进行外部访问。

我的config.json文件如下所示:

{
"bind_addr":"172.16.8.216",
"server": false,
"datacenter": "nyc2",
"data_dir": "/var/consul",
"ui_dir": "/home/ikerlan/dist",
"log_level": "INFO",
"enable_syslog": true,
"start_join": ["172.16.8.211","172.16.8.212","172.16.8.213"]
}

需要帮忙吗? 谢谢

6个回答

62
添加
{
  "client_addr": "0.0.0.0"
}

如果你想让你的Web UI可以从外部访问,可以对你的配置进行修改或在命令行中添加选项-client 0.0.0.0(有关更多信息,请查看文档)。

请注意,这也将使您的Consul REST API可以从外部访问。根据您的环境,您可能需要激活Consul的ACL来限制访问。


1
如果我在配置中添加“client_addr”:“0.0.0.0”,客户端将退出集群,并且当我在客户端上运行consul members时,会出现“连接到Consul代理的错误:拨号tcp 127.0.0.1:8400:连接被拒绝”。 如果我在命令行上运行-client 0.0.0.0:“-client:找不到命令”,可能是什么问题?@ahus1 - Asier Gomez
1
@Asier 我已经更新了描述。如果您的客户端离开了集群,请查看consul日志文件。也许您的配置中存在语法错误。 -client选项需要成为您的consul可执行文件命令行的一部分。请查看参考的consul文档。我还更新了答案,使其更加明确。 - ahus1
我将"client_addr":"0.0.0.0"这一行添加到我的config.json文件中,但是如果我使用这个配置,节点就无法连接到其他节点,当我执行consul members时会出现错误。确定我需要做的唯一配置就是编辑config.json并插入这一行吗?谢谢@ahus1 - Asier Gomez
为了让客户端连接到每个consul,将会绑定一个带有私有IP地址的接口。您可以使用“bind”参数手动选择IP地址。默认情况下,此IP地址会向其他客户端广告推送,但您可以使用“advertise”配置参数来覆盖此设置。请参见https://github.com/ahus1/saltconsul-examples,以获取使用Salt和Vagrant或Digital Ocean完整设置consul的详细信息。请参阅cheatsheet.adoc以获得快速入门。 - ahus1
我已经使用bind参数添加了IP,正如您在描述中所看到的我的config.json。我的问题是,如果将下一行client_addr":"0.0.0.0"添加到我的config.json中,它会失败。 @ahus1 - Asier Gomez
谢谢!从文档中没有明确表示! - pmckeown

5

在这种情况下,您可以使用socat。

socat -d -d TCP-L:8500,bind=172.16.93.128,fork TCP:localhost:8500 &

其中172.16.93.12是我的IP地址。


4

最终我找到了解决方案。 在配置文件中添加绑定地址(bind addr)即机器的IP和客户端地址(client_addr)即要监听的主机。因此,我使用0.0.0.0来监听所有IP地址。

"bind_addr":"<machine-ip>",
"client_addr":"0.0.0.0",

4

我将其作为docker镜像运行,我提供了

docker pull consul

docker run -p 8500:8500 consul

我可以访问Consul UI,网址是http://<hostname>:8500/ui


2
我对Consul没有实际操作经验,但是以下是一些提示:
  • 运行sudo netstat -peanut | grep :8500并检查Consul是否绑定到0.0.0.0或显式的IP地址。如果可以配置,应查阅文档。
  • 在每个节点上安装SquidNginx或其他可以充当HTTP代理的软件。

如果我运行“sudo netstat -peanut | grep :8500”,我可以看到:tcp 0 0 127.0.0.1:8500 0.0.0.0:* LISTEN,有没有不安装Nginx或其他软件包的方法?谢谢@NikoNyrh - Asier Gomez
ahus1 似乎更熟悉文档,你应该将其配置为不绑定在“127.0.0.1”上,因为这样它将不会接受外部连接。 - NikoNyrh

0

如果没有用户界面,就无法获取用户界面。 经典的UI是一些桌面环境(x-term....)的堆栈,因此在获取之前,您需要在节点上安装它。


我已经安装了用户界面,可以通过ssh隧道访问它,但我想通过http://172.16.8.194:8500的方式直接访问。 - Asier Gomez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接