docker 容器中的 ActiveMQ Artemis GUI Jolokia 访问

ActiveMQ Artemis GUI Jolokia access in docker container

我是 运行 ActiveMQ Artemis,位于我们三个环境 (DEV/QA/PROD) 的 docker 容器内。

管理控制台通常在端口 8161 上运行,因此我在创建代理时将其包含在 artemis create 语句中。

--http-host 0.0.0.0 --http-port 8161

所以这导致了我可以看到的以下两个变化:

  1. bootstrap.xml 得到 host/port:

    <web bind="http://0.0.0.0:8161" path="web">
       <app url="redhat-branding" war="redhat-branding.war"/>
       <app url="artemis-plugin" war="artemis-plugin.war"/>
       <app url="dispatch-hawtio-console" war="dispatch-hawtio-console.war"/>
       <app url="console" war="console.war"/>
    </web>
    
  2. jolokia-access.xml 得到 host/port:

    <allow-origin>*://0.0.0.0*</allow-origin>
    

我正在尝试从远程计算机访问 ActiveMQ Artemis Hawtio 管理控制台,但公开的 docker 端口不是 8161。它们是映射端口 3816148161、& 58161.

所以当我登录到管理控制台时,我得到:

Operation unknown failed due to: java.lang.Exception : Origin http://10.0.20.2:58161 is not allowed to call this agent
Uncaught TypeError: Cannot read property 'apply' of undefined (http://10.0.20.2:58161/console/app/app.js:16:14127)
Uncaught TypeError: Cannot read property 'apply' of undefined (http://10.0.20.2:58161/console/app/app.js:16:14127)
...

我相信这里的问题是你的 jolokia-access.xml 使用这个:

<allow-origin>*://0.0.0.0*</allow-origin>

但是,您正试图通过 http://10.0.20.2:58161 访问控制台,根据您的 jolokia-access.xml,这是不允许的。因此,您需要更改 jolokia-access.xml 以允许您实际要使用的 IP:port 进行连接。

您可以在 Jolokia security documentation.

中阅读更多关于 jolokia-access.xml 的信息

为清楚起见,元地址 0.0.0.0 基本上是 "no particular address" 占位符,在将侦听器绑定到网络接口的上下文中,这意味着侦听器应该 bind/listen 所有 接口。但是,在 Jolokia 安全的 <allow-origin> 上下文中,这并不意味着允许所有来源。 <allow-origin> 支持文字匹配和通配符(如上面链接的文档中所述)。因此,如果指定 0.0.0.0,它会尝试逐字匹配 0.0.0.0。无法通过 create 命令禁用 Jolokia 安全性。如果您要将类似 --http-host 10.0.20.* 的内容传递给 create 命令,则 10.0.20.* 将用于绑定 bootstrap.xml 中的网络服务器,这将失败。

有使用 --relax-jolokia 的选项,这将禁用严格检查,这可能有助于您的用例。

只需要对 jolokia-access.xml 文件进行更改即可编辑 cors :

<allow-origin>*://*</allow-origin>

更多相关信息您可以参考:https://medium.com/@hasnat.saeed/setup-activemq-artemis-on-ubuntu-18-04-76bb4975308b