我正在使用以下配置在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时,它似乎不起作用。尝试通过任何群集节点访问连接时,连接被拒绝。
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绑定(bind)到其运行的主机的主机名有关。通过使用其容器ID使其仅在群集网络内部可用。
确实可以在群集网络内部的任何容器内工作,但不能通过已发布的端口工作。
我还尝试配置
NIFI_WEB_HTTP_HOST=0.0.0.0
以确保Nifi绑定(bind)到所有网络接口(interface),但这会中断群集中实例之间的通信。我应该如何配置Nifi / Docker群集以通过群集路由网格网络正确访问Nifi的UI?
最佳答案
在Apache Nifi Dev Mailing List的帮助下使其得以启动和运行。
问题在于,默认情况下,Nifi不会绑定(bind)到所有网络接口(interface),并且来自群集网络的流量使用其他网络接口(interface)。也通过将其他网络接口(interface)添加到Nifi配置来工作。
我的Nifi容器具有三个网络接口(interface)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入口网络的流量的网络接口(interface)。