在 Docker Swarm 中的 运行 集群中暴露 Nifi UI
Exposing Nifi UI when running a cluster in Docker Swarm
我是 运行 docker swarm 上的 Apache Nifi 集群,使用以下配置:
version: '3'
services:
zookeeper:
hostname: zookeeper
image: 'bitnami/zookeeper:latest'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
nifi:
image: apache/nifi:latest
ports:
- 8080
environment:
- NIFI_WEB_HTTP_PORT=8080
- NIFI_CLUSTER_IS_NODE=true
- NIFI_CLUSTER_NODE_PROTOCOL_PORT=8082
- NIFI_ZK_CONNECT_STRING=zookeeper:2181
- NIFI_ELECTION_MAX_WAIT=1 min
这很好用,我可以轻松地增加 Nifi 实例的数量。
但是,当尝试通过已发布的端口访问 Nifi UI 时,它似乎不起作用。尝试通过任何 swarm 节点访问它时,连接被拒绝。
ID NAME MODE REPLICAS IMAGE PORTS
klp9kjm7jwdy nifi replicated 3/3 apache/nifi:latest *:30003->8080/tcp
qa3rf9pi6uyw zookeeper replicated 1/1 bitnami/zookeeper:latest
问题似乎与 Nifi 绑定到它运行的主机的主机名有关。通过使用它的容器 ID 使其仅在 swarm 网络内可用。
这在 swarm 网络内的任何容器内都有效,但不能通过已发布的端口。
我还尝试配置 NIFI_WEB_HTTP_HOST=0.0.0.0
以确保 Nifi 绑定到所有网络接口,但这会中断集群中实例之间的通信。
我应该如何配置 Nifi/Docker swarm 以便能够通过 swarm 路由网状网络正确访问 Nifi 的 UI?
在 Apache Nifi Dev Mailing List.
的帮助下 运行 成功了
问题在于,Nifi 默认情况下不会绑定到所有网络接口,来自 swarm 网络的流量使用不同的网络接口。通过将其他网络接口也添加到 Nifi 配置来工作。
我的 Nifi 容器有三个网络接口 eth0
、eth1
和 eth2
,所以我将这些属性添加到 ${NIFI_HOME}/conf/nifi.properties
:
nifi.web.http.network.interface.eth0=eth0
nifi.web.http.network.interface.eth1=eth1
nifi.web.http.network.interface.eth2=eth2
我想这可以缩小到只添加用于来自 Swarm 入口网络的流量的网络接口。
我是 运行 docker swarm 上的 Apache Nifi 集群,使用以下配置:
version: '3'
services:
zookeeper:
hostname: zookeeper
image: 'bitnami/zookeeper:latest'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
nifi:
image: apache/nifi:latest
ports:
- 8080
environment:
- NIFI_WEB_HTTP_PORT=8080
- NIFI_CLUSTER_IS_NODE=true
- NIFI_CLUSTER_NODE_PROTOCOL_PORT=8082
- NIFI_ZK_CONNECT_STRING=zookeeper:2181
- NIFI_ELECTION_MAX_WAIT=1 min
这很好用,我可以轻松地增加 Nifi 实例的数量。
但是,当尝试通过已发布的端口访问 Nifi UI 时,它似乎不起作用。尝试通过任何 swarm 节点访问它时,连接被拒绝。
ID NAME MODE REPLICAS IMAGE PORTS
klp9kjm7jwdy nifi replicated 3/3 apache/nifi:latest *:30003->8080/tcp
qa3rf9pi6uyw zookeeper replicated 1/1 bitnami/zookeeper:latest
问题似乎与 Nifi 绑定到它运行的主机的主机名有关。通过使用它的容器 ID 使其仅在 swarm 网络内可用。
这在 swarm 网络内的任何容器内都有效,但不能通过已发布的端口。
我还尝试配置 NIFI_WEB_HTTP_HOST=0.0.0.0
以确保 Nifi 绑定到所有网络接口,但这会中断集群中实例之间的通信。
我应该如何配置 Nifi/Docker swarm 以便能够通过 swarm 路由网状网络正确访问 Nifi 的 UI?
在 Apache Nifi Dev Mailing List.
的帮助下 运行 成功了问题在于,Nifi 默认情况下不会绑定到所有网络接口,来自 swarm 网络的流量使用不同的网络接口。通过将其他网络接口也添加到 Nifi 配置来工作。
我的 Nifi 容器有三个网络接口 eth0
、eth1
和 eth2
,所以我将这些属性添加到 ${NIFI_HOME}/conf/nifi.properties
:
nifi.web.http.network.interface.eth0=eth0
nifi.web.http.network.interface.eth1=eth1
nifi.web.http.network.interface.eth2=eth2
我想这可以缩小到只添加用于来自 Swarm 入口网络的流量的网络接口。