【问题标题】:Exposing Nifi UI when running a cluster in Docker Swarm在 Docker Swarm 中运行集群时暴露 Nifi UI
【发布时间】:2020-06-17 14:15:48
【问题描述】:

我正在使用以下配置在 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?

【问题讨论】:

    标签: java docker apache-nifi docker-swarm docker-networking


    【解决方案1】:

    Apache Nifi Dev Mailing List 的帮助下成功启动并运行。

    问题在于 Nifi 默认情况下不会绑定到所有网络接口,来自 swarm 网络的流量使用不同的网络接口。通过将其他网络接口添加到 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 入口网络的流量的网络接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-22
      • 2019-06-04
      • 2021-11-08
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      相关资源
      最近更新 更多