[在Docker Swarm中运行集群时暴露Nifi UI

问题描述 投票:1回答:1

我正在使用以下配置在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绑定到其运行的主机的主机名有关。通过使用容器的容器ID,使其仅在群集网络内部可用。

这确实可以在群集网络内的任何容器内工作,但不能通过已发布的端口来工作。

我还尝试配置NIFI_WEB_HTTP_HOST=0.0.0.0以确保Nifi绑定到所有网络接口,但这会中断群集中实例之间的通信。

我应该如何配置Nifi / Docker群集,以便能够通过群集路由网状网络正确访问Nifi的UI?

java docker apache-nifi docker-swarm docker-networking
1个回答
0
投票
Apache Nifi Dev Mailing List的帮助下成功启动并运行。

问题在于,默认情况下Nifi不会绑定到所有网络接口,并且来自群集网络的流量会使用其他网络接口。通过将其他网络接口添加到Nifi配置中来工作。

我的Nifi容器具有三个网络接口eth0eth1eth2,所以我将这些属性添加到${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入口网络的流量的网络接口。    
© www.soinside.com 2019 - 2024. All rights reserved.