受保护的 NiFi 不会与 NiFi 注册表通信

问题描述

我在 Docker 中安装了独立安全的 NiFi 1.12.1,一切正常。我成功地使用了站点站点远程处理器、站点站点的 Nifi 公告转发、调用 NiFi API 进行自我监控等。我通过证书登录。到目前为止一切正常。

当我尝试使用 NiFi Registry 时出现问题。我可以访问两个实例:安全和不安全。

无论我指定什么确切格式(FQDN,只是一个名称,带 /nifi-registry 或不带),当我尝试访问(例如通过导入进程组)任一 NiFi 注册表时来自 NiFi,它以 o.a.n.w.a.config.NiFiCoreExceptionMapper org.apache.nifi.web.NiFiCoreException: Unable to obtain listing of buckets: java.net.ConnectException: Connection refused (Connection refused). Returning Conflict response. 失败。在日志中只是带有 enormous stack-trace 的这条消息,仅此而已。

我检查了所有证书,它们看起来没问题(证书路径,证书用于 clientAuth 和 serverAuth)。我什至用它们自己登录 NiFi ...... 最让我惊讶的是,它适用于 Site-To-Site 协议、API 调用等,但不适用于 NiFi Registry。

请问您不知道可能有什么问题吗?或者有什么想法要检查什么?

解决方法

TL;博士:

使用 IP 地址或编辑 /etc/hosts。问题在于将主机名转换为 IP 地址。


当我尝试通过 InvokeHTTP 直接从 NiFi 访问 NiFi Registry 的 API 时,我注意到一件重要的事情 - 不同容器中的任何内容都没有响应我(failed to connect 到目标):

#Safe NiFi - the one I am troubleshooting
https://<my FQDN>:8443/nifi-api/flow/registries

#Safe NiFi Registry (another container) - the one I am trying connect to
https://<my FQDN>:18443/nifi-registry-api/buckets

#Unsafe NiFi (another container) - just for test
http://<my FQDN>:28080/nifi-api/flow/registries

#Unsafe NiFi Registry (another container) - just for test
http://<my FQDN>:38080/nifi-registry-api/buckets

然后我突然明白了:为了解决站点到站点连接的问题(容器名称与为托管机器颁发的 HTTPS 证书的差异),我给 容器 赋予了与托管相同的名称Docker 机器。为了验证我使用了 IP 地址而不是 FQDN,并且它有效。同时检查 /etc/hosts 证实了这一点 - FQDN 指向容器的 IP 地址而不是 Docker 主机。

因此,一个给定的 FQDN 在容器中解析为本地主机和其他任何地方的 Docker 主机。并且由于在 NiFi 注册表端口上的本地主机上没有任何监听 ...

因此,作为解决方案,要么修改 /etc/hosts 以删除违规行,要么使用 IP 地址强制遍历 Docker 主机。