Apache NiFi 1.28.1 集群 + Kerberos 认证 + 多租户模式部署

news/2025/9/25 16:38:08/文章来源:https://www.cnblogs.com/dataverse/p/19111478

Apache NiFi 1.28.1 集群 + Kerberos 认证 + 多租户模式部署

1. 系统要求

  • Java 8 或 Java 11

2. 物料包准备

包名 下载地址 说明
nifi-1.28.1-bin.zip https://archive.apache.org/dist/nifi/1.28.1/nifi-1.28.1-bin.zip NiFi 安装包
nifi-toolkit-1.28.1-bin.zip https://archive.apache.org/dist/nifi/1.28.1/nifi-toolkit-1.28.1-bin.zip NiFi 工具包
jdk-11.0.28_linux-x64_bin.tar.gz https://www.oracle.com/java/technologies/downloads/ 网站需注册登录

3. 集群规划

3.1 主机列表

IP 主机名 内存(GB) CPU核数 磁盘 操作系统 CPU 架构
10.0.0.13 arc-pro-dc01 16 1 500GB CentOS 7.9.2009 x86_64
10.0.0.14 arc-pro-dc02 16 1 500GB CentOS 7.9.2009 x86_64
10.0.0.15 arc-pro-dc03 16 1 500GB CentOS 7.9.2009 x86_64

3.2 已安装服务

arc-pro-dc01 arc-pro-dc02 arc-pro-dc03
Zookeeper Zookeeper Server Zookeeper Server Zookeeper Server
Kerberos Kerberos 客户端 Kerberos 服务端 Kerberos 客户端

说明:

  • 每个服务器的 IP 均是静态的
  • 每个服务器的防火墙都已关闭
  • 每个服务器的 SELINUX 已经禁用
  • 每个服务器均存在一个管理员用户 admin,该用户可以免密码执行 sudo 命令;
  • 在 arc-pro-dc01 机器上,可以使用 admin 用户免密码 ssh 到其他机器;
  • 服务器之间的时间同步;
  • 所有操作均使用 admin 用户完成,NiFi 集群的所属用户为 admin;
  • Kerberos 默认的 realm 为:EXAMPLE.COM
  • Principal 格式为 */admin@EXAMPLE.COM,则此主体拥有管理员权限

为使集群满足以上要求,参考下列文章进行配置:

  • 使用 VMware Workstation 安装 CentOS-7 虚拟机
  • 使用 Ansible 批量完成 CentOS 7 操作系统基础配置
  • Ansible + Docker 部署 Zookeeper 集群
  • Kerberos 安装和使用

3.3 集群规划

arc-pro-dc01 arc-pro-dc02 arc-pro-dc03
NiFi NiFi 服务 NiFi 服务 NiFi 服务

4. 部署步骤

4.1 上传物料包

在所有节点执行

$ sudo mkdir -p /opt/app
$ sudo chown admin:admin /opt/app# nifi-1.28.1-bin.zip、nifi-toolkit-1.28.1-bin.zip、jdk-11.0.28_linux-x64_bin.tar.gz 上传到 /opt/app 目录下$ cd /opt/app/
$ unzip nifi-1.28.1-bin.zip
$ ln -s nifi-1.28.1 nifi
$ unzip nifi-toolkit-1.28.1-bin.zip
$ tar -zxf jdk-11.0.28_linux-x64_bin.tar.gz
$ rm -f nifi-1.28.1-bin.zip nifi-toolkit-1.28.1-bin.zip jdk-11.0.28_linux-x64_bin.tar.gz$ ll | egrep 'nifi|jdk'
drwxrwxr-x 9 admin admin 126 Sep 24 14:58 jdk-11.0.28
lrwxrwxrwx 1 admin admin  11 Sep 24 14:57 nifi -> nifi-1.28.1
drwxrwxr-x 7 admin admin 131 Nov 15  2024 nifi-1.28.1
drwxr-xr-x 6 admin admin 104 Nov 15  2024 nifi-toolkit-1.28.1

4.2 准备 NiFi 专用的 JDK

在所有节点执行

$ pwd
/opt/app$ sudo mkdir -p /usr/java
# 说明:jdk 的安装包名称为 jdk-21_linux-x64_bin.tar.gz,解压后目录名中包含版本,根据下载包的时间不同,这个版本可能会不一样
$ sudo mv jdk-11.0.28 /usr/java/
$ sudo ls /usr/java/jdk-11.0.28
bin  conf  include  jmods  legal  lib  man  README.html  release$ cd /opt/app/nifi
# 在 nifi 的环境变量中定义 JAVA_HOME 为 jdk11
# 命令的作用是:在第一行下方插入一行,内容为 export JAVA_HOME=/usr/java/jdk-11.0.28
$ sed -i '1a export JAVA_HOME=\/usr\/java\/jdk-11.0.28' bin/nifi-env.sh

4.3 创建 NiFI 使用的 Principal

在 Kerberos 服务端(arc-pro-dc02)执行

# -pw 设置主体 nifi/@EXAMPLE.COM 的密码
$ sudo kadmin.local -q "addprinc -pw 123456 nifi@EXAMPLE.COM"
Authenticating as principal root/admin@EXAMPLE.COM with password.
WARNING: no policy specified for nifi@EXAMPLE.COM; defaulting to no policy
Principal "nifi@EXAMPLE.COM" created.# 创建 keytab 文件所在的目录
$ sudo mkdir -p /etc/keytab# 将主体 nifi/@EXAMPLE.COM 的信息加入 keytab 文件中
$ sudo kadmin.local -q "ktadd -norandkey -k /etc/keytab/nifi.keytab nifi@EXAMPLE.COM"
Authenticating as principal root/admin@EXAMPLE.COM with password.
Entry for principal nifi@EXAMPLE.COM with kvno 1, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/keytab/nifi.keytab.
Entry for principal nifi@EXAMPLE.COM with kvno 1, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/keytab/nifi.keytab.
Entry for principal nifi@EXAMPLE.COM with kvno 1, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/keytab/nifi.keytab.
Entry for principal nifi@EXAMPLE.COM with kvno 1, encryption type arcfour-hmac added to keytab WRFILE:/etc/keytab/nifi.keytab.
Entry for principal nifi@EXAMPLE.COM with kvno 1, encryption type camellia256-cts-cmac added to keytab WRFILE:/etc/keytab/nifi.keytab.
Entry for principal nifi@EXAMPLE.COM with kvno 1, encryption type camellia128-cts-cmac added to keytab WRFILE:/etc/keytab/nifi.keytab.
Entry for principal nifi@EXAMPLE.COM with kvno 1, encryption type des-hmac-sha1 added to keytab WRFILE:/etc/keytab/nifi.keytab.
Entry for principal nifi@EXAMPLE.COM with kvno 1, encryption type des-cbc-md5 added to keytab WRFILE:/etc/keytab/nifi.keytab.# 将 /etc/keytab/nifi.keytab 分发给其他两个节点,nifi.keytab 都放在 /etc/keytab 目录下,提前创建好目录
$ sudo scp /etc/keytab/nifi.keytab arc-pro-dc01:/etc/keytab/
$ sudo scp /etc/keytab/nifi.keytab arc-pro-dc03:/etc/keytab/

4.4 修改配置文件 /etc/krb5.conf

在所有节点同步修改

# 确保下面这行配置是注释掉的
# renew_lifetime = 7d

4.5 生成 TLS 证书

在任意节点操作一次

$ cd /opt/app/nifi-toolkit-1.28.1/
$ sed -i '1a export JAVA_HOME=\/usr\/java\/jdk-11.0.28' bin/tls-toolkit.sh$ bin/tls-toolkit.sh standalone \
--clientCertDn 'CN=NIFI, OU=NIFI' \
--hostnames 'arc-pro-dc01,arc-pro-dc02,arc-pro-dc03' \
--keyAlgorithm RSA \
--keySize 2048 \
--days 36500 \
--keyPassword keyPassword@123456 \
--keyStorePassword keyStorePassword@123456 \
--trustStorePassword trustStorePassword@123456 \
--outputDirectory ./certs# 输出
...
[main] INFO org.apache.nifi.toolkit.tls.standalone.TlsToolkitStandalone - tls-toolkit standalone completed successfully$ ll certs/
total 16
drwx------ 2 admin admin   71 Sep 25 15:47 arc-pro-dc01
drwx------ 2 admin admin   71 Sep 25 15:47 arc-pro-dc02
drwx------ 2 admin admin   71 Sep 25 15:47 arc-pro-dc03
-rw------- 1 admin admin 3676 Sep 25 15:47 CN=NIFI_OU=NIFI.p12
-rw------- 1 admin admin   43 Sep 25 15:47 CN=NIFI_OU=NIFI.password
-rw------- 1 admin admin 1229 Sep 25 15:47 nifi-cert.pem
-rw------- 1 admin admin 1675 Sep 25 15:47 nifi-key.key# 分发证书和配置文件
$ cd /opt/app/nifi-toolkit-1.28.1/certs/$ scp *.p12 *.password arc-pro-dc01/* arc-pro-dc01:/opt/app/nifi-1.28.1/conf/
$ scp *.p12 *.password arc-pro-dc02/* arc-pro-dc02:/opt/app/nifi-1.28.1/conf/
$ scp *.p12 *.password arc-pro-dc03/* arc-pro-dc03:/opt/app/nifi-1.28.1/conf/

4.6 修改配置文件 state-management.xml

/opt/app/nifi-1.28.1/conf/state-management.xml 所有节点同步配置

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<stateManagement><local-provider><id>local-provider</id><class>org.apache.nifi.controller.state.providers.local.WriteAheadLocalStateProvider</class><property name="Directory">./state/local</property><property name="Always Sync">false</property><property name="Partitions">16</property><property name="Checkpoint Interval">2 mins</property></local-provider><cluster-provider><id>zk-provider</id><class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class><property name="Connect String">10.0.0.13:2181,10.0.0.14:2181,10.0.0.15:2181</property><property name="Root Node">/nifi</property><property name="Session Timeout">10 seconds</property><property name="Access Control">Open</property></cluster-provider>
</stateManagement>

4.7 修改配置文件 nifi.properties

/opt/app/nifi-1.28.1/conf/nifi.properties 所有节点同步配置,重点核对以下配置

nifi.zookeeper.connect.string=10.0.0.13:2181,10.0.0.14:2181,10.0.0.15:2181
nifi.security.user.login.identity.provider=kerberos-provider
nifi.security.user.authorizer=file-provider
nifi.cluster.is.node=true
nifi.web.proxy.context.path=/nifi
nifi.web.proxy.host=arc-pro-dc01:9443,arc-pro-dc02:9443,arc-pro-dc03:9443
nifi.sensitive.props.key=SensitivePassword@123456
# Kerberos 配置
nifi.kerberos.krb5.file=/etc/krb5.conf
# 4.3 步骤创建的 principal
nifi.kerberos.service.principal=nifi@EXAMPLE.COM
# 4.3 步骤分发的 keytab 文件
nifi.kerberos.service.keytab.location=/etc/keytab/nifi.keytab

命令替换:

$ sed -i \-e 's|^nifi.zookeeper.connect.string=.*|nifi.zookeeper.connect.string=10.0.0.13:2181,10.0.0.14:2181,10.0.0.15:2181|' \-e 's|^nifi.security.user.login.identity.provider=.*|nifi.security.user.login.identity.provider=kerberos-provider|' \-e 's|^nifi.security.user.authorizer=.*|nifi.security.user.authorizer=file-provider|' \-e 's|^nifi.cluster.is.node=.*|nifi.cluster.is.node=true|' \-e 's|^nifi.web.proxy.context.path=.*|nifi.web.proxy.context.path=/nifi|' \-e 's|^nifi.web.proxy.host=.*|nifi.web.proxy.host=arc-pro-dc01:9443,arc-pro-dc02:9443,arc-pro-dc03:9443|' \-e 's|^nifi.kerberos.krb5.file=.*|nifi.kerberos.krb5.file=/etc/krb5.conf|' \-e 's|^nifi.kerberos.service.principal=.*|nifi.kerberos.service.principal=nifi@EXAMPLE.COM|' \-e 's|^nifi.kerberos.service.keytab.location=.*|nifi.kerberos.service.keytab.location=/etc/keytab/nifi.keytab|' \-e 's|^nifi.sensitive.props.key=.*|nifi.sensitive.props.key=SensitivePassword@123456|' \/opt/app/nifi/conf/nifi.properties

4.8 修改配置文件 login-identity-providers.xml

/opt/app/nifi-1.28.1/conf/login-identity-providers.xml 所有节点同步配置

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<loginIdentityProviders><provider><identifier>single-user-provider</identifier><class>org.apache.nifi.authentication.single.user.SingleUserLoginIdentityProvider</class><property name="Username"/><property name="Password"/></provider><provider><identifier>kerberos-provider</identifier><class>org.apache.nifi.kerberos.KerberosProvider</class><property name="Default Realm">EXAMPLE.COM</property><property name="Authentication Expiration">12 hours</property></provider>
</loginIdentityProviders>

4.9 修改配置文件 authorizers.xml

/opt/app/nifi-1.28.1/conf/authorizers.xml 所有节点同步配置

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<authorizers><userGroupProvider><identifier>file-user-group-provider</identifier><class>org.apache.nifi.authorization.FileUserGroupProvider</class><property name="Users File">./conf/users.xml</property><property name="Legacy Authorized Users File"></property><property name="Initial User Identity 1"></property></userGroupProvider><accessPolicyProvider><identifier>file-access-policy-provider</identifier><class>org.apache.nifi.authorization.FileAccessPolicyProvider</class><property name="User Group Provider">file-user-group-provider</property><property name="Authorizations File">./conf/authorizations.xml</property><property name="Initial Admin Identity"></property><property name="Legacy Authorized Users File"></property><property name="Node Identity 1"></property><property name="Node Group"></property></accessPolicyProvider><authorizer><identifier>managed-authorizer</identifier><class>org.apache.nifi.authorization.StandardManagedAuthorizer</class><property name="Access Policy Provider">file-access-policy-provider</property></authorizer><authorizer><identifier>file-provider</identifier><class>org.apache.nifi.authorization.FileAuthorizer</class><property name="Authorizations File">./conf/authorizations.xml</property><property name="Users File">./conf/users.xml</property><property name="Initial Admin Identity">nifi@EXAMPLE.COM</property><property name="Legacy Authorized Users File"></property><property name="Node Identity 1">CN=arc-pro-dc01, OU=NIFI</property><property name="Node Identity 2">CN=arc-pro-dc02, OU=NIFI</property><property name="Node Identity 3">CN=arc-pro-dc03, OU=NIFI</property></authorizer><authorizer><identifier>single-user-authorizer</identifier><class>org.apache.nifi.authorization.single.user.SingleUserAuthorizer</class></authorizer>
</authorizers>

4.10 修改配置文件 bootstrap.conf(可选)

/opt/app/nifi-1.28.1/conf/bootstrap.conf 所有节点同步配置,根据服务器资源情况按需修改

# JVM memory settings
java.arg.2=-Xms1g
java.arg.3=-Xmx1g

4.11 启动 NiFI

所有节点执行

$ cd /opt/app/nifi
$ bin/nifi.sh start$ bin/nifi.sh status
2025-09-24 16:08:56,704 INFO [main] org.apache.nifi.bootstrap.Command Apache NiFi is currently running, listening to Bootstrap on port 38667, PID=98487

4.12 访问页面

访问任意节点:

  • https://10.0.0.13:9443/nifi
  • https://10.0.0.14:9443/nifi
  • https://10.0.0.15:9443/nifi

image

image

image

说明:账号密码为 nifi/123456

因为在 4.3 创建 Principal 时的命令:

sudo kadmin.local -q "addprinc -pw 123456 nifi@EXAMPLE.COM"

如果创建的 Principal 是 nifi/admin@EXAMPLE.COM,则登录用户是 nifi/admin,即 Principal @EXAMPLE.COM 之前的内容。

首次登录后,显示“The Flow Controller is initializing the Data Flow.”这是因为,集群要进行选举,可能花费几分钟。

image

查看 logs/nifi-app.log,可以看到:集群正在投票,选举会在 289 秒内完成(确实需要这么长时间)

2025-09-25 15:08:34,330 INFO [main] 
o.a.nifi.controller.StandardFlowService Requested by cluster coordinator to retry connection in 5 seconds with explanation: 
Cluster is still voting on which Flow is the correct flow for the cluster. 
Election will complete in 289 seconds

选举完成后,刷新页面:

image

5. 多租户授权简单测试

在 kerberos 服务端执行

$ sudo kadmin.local -q "addprinc -pw 123456 tom@EXAMPLE.COM"

image

image

image

image

image

image

切换用户:

image

image

image

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【cv】cycleGAN代码解析:train.py

【cv】cycleGAN代码解析:train.pyPosted on 2025-09-25 16:37 SaTsuki26681534 阅读(0) 评论(0) 收藏 举报import time # 计时:统计每轮/每次迭代耗时 from options.train_o…

做移动网站优化网站建设过程中要怎么打开速度

这次我们将学着怎么从一个深度图里面导出边界。我们对3种不同种类的点很感兴趣:物体的边框的点&#xff0c;阴影边框点&#xff0c;和面纱点(在障碍物边界和阴影边界)&#xff0c;这是一个很典型的现象在通过雷达获取的3D深度。 下面是代码 /* \author Bastian Steder */#incl…

注册 网站开发 公司重庆招聘网

作者 | 轩辕之风O来源 | 编程技术宇宙相信大家这两天应该被这么一条新闻刷屏了&#xff1a;这个漏洞到底是怎么回事&#xff1f;核弹级&#xff0c;真的有那么厉害吗&#xff1f;怎么利用这个漏洞呢&#xff1f;我看了很多技术分析文章&#xff0c;都太过专业&#xff0c;很多非…

创建网站怎么创电子商务网站有哪些类型

项目介绍&#xff1a; 使用javaspringbootmysql开发的法律咨询网&#xff08;文书&#xff09;&#xff0c;系统包含管理员、用户角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;登录系统&#xff1b;用户管理&#xff1b;文章管理&#xff08;法律知识&#xff09…

网站建设公司业务在哪里来百度网站的总结

I老师就职于双非二本院校&#xff0c;希望通过出国研修以提升科研背景&#xff0c;在公派访学和申请导师出资的博士后之间&#xff0c;其选择了后者。最终我们落实了美国耶鲁大学的职位&#xff0c;头衔为Associate Research Scientist&#xff08;副研究科学家&#xff09;&am…

企业网站 联系我们电商培训机构有哪些?哪家比较好

常用示例 入门 Hello CMake CMake 是一个用于配置跨平台源代码项目应该如何配置的工具建立在给定的平台上。 ├── CMakeLists.txt # 希望运行的 CMake命令 ├── main.cpp # 带有main 的源文件 ├── include # 头文件目录 │ └── header.h └── src # 源代码目录 ├…

深入解析:李宏毅2023机器学习作业 HW01实操

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于Java+SpringBoot+SSM,Flask福聚苑社区团购体系(源码+LW+调试文档+讲解等)/福聚苑社区/团购系统/社区团购/福聚苑/团购/社区/环境/福聚苑小区/在线团购/社区购物

基于Java+SpringBoot+SSM,Flask福聚苑社区团购体系(源码+LW+调试文档+讲解等)/福聚苑社区/团购系统/社区团购/福聚苑/团购/社区/环境/福聚苑小区/在线团购/社区购物pre { white-space: pre !important; word-wrap: nor…

按需引入echarts

--// echarts-config.js // ECharts按需引入配置文件 import * as echarts from echarts/core; import {BarChart,LineChart,PieChart,ScatterChart,RadarChart } from echarts/charts; import {TitleComponent,Toolti…

软件构造的用户交互设计 4章

交互设计的原则 1.尽量保持一致 2.满足普遍可用性 3.提供信息反馈 4.设计对话框以产生结束信息 5.预防并成立错误 6.允许撤销操作 7.支持内部控制点 8.减轻短时记忆负担 交互设计的基本过程 标识和建立用户需求 提出满…

自定义制作docker容器自动自愈容器镜像

包括:完整的 autoheal.sh(支持每分钟检查一次、连续 5 次 unhealthy 才重启) Dockerfile docker-compose.yml 详细文档,包含参数说明、用法1️⃣ autoheal.sh #!/usr/bin/env sh set -e set -o pipefailDOCKER_SOC…

阀门公司网站建设广州动漫制作公司

1 mpl_toolkits.mplot3d 功能介绍 mpl_toolkits.mplot3d 是 Matplotlib 库中的一个子模块&#xff0c;用于绘制和可视化三维图形&#xff0c;包括三维散点图、曲面图、线图等。它提供了丰富的功能来创建和定制三维图形。以下是 mpl_toolkits.mplot3d 的主要功能和功能简介&am…

如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据?

如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据?如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据? 一、引言 在数据驱动时代,开发者与研究者越来越依…

第一次编码器测试

共1055圈 平均2047.974408 平均每张丢失距离 0.00001132 mm可以忽略 不丢帧

04-FreeRTOS的概述及编程规范

概述 本文对FreeRTOS源码进行概述,包括其核心文件作用,及其编程规范,有助于阅读rtos的内核源码,更好的帮助理解。 一、FreeRTOS 源码核心结构概述 FreeRTOS 是轻量级实时操作系统,核心功能围绕 “任务调度” 和 “…

10_ select/poll/epoll实现服务端的io多路复用

一、io多路复用 在现有模型中,似乎每一个线程都做了同样的事情,1、监听客户端消息;2、业务消息处理。 “一消息一线程”的缺点究其根本,在于让每个线程都做了同样重复、且消耗资源巨大的事情——单独持有fd、监听客…

模拟实战配置实验

vlan之间的互通 要实现 VLAN 10(192.168.150.0/24)、VLAN 100(192.168.100.0/24)、VLAN 200(192.168.200.0/24) 之间的互联互通,核心原理是:二层交换机仅负责 VLAN 内流量转发,跨 VLAN 流量需通过三层设备(核…

微网站建设的现状设计吧

首先要理解double的存储方式&#xff0c;具体可查找相关的博客本文实现的是将8个字节(存储为16进制的字符串)转化为对应的double类型double MainWindow::qByteArraytodouble(QString qstr){QByteArray byte;StringToHex(qstr,byte);double result;memcpy(&result, byte.dat…

聚力赋能|竹云受邀出席2025华为全联接大会 - 详解

聚力赋能|竹云受邀出席2025华为全联接大会 - 详解2025-09-25 16:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displ…

Linux安装Kafka(无Zookeeper模式)保姆级教程,云服务器安装部署,Windows内存不够允许看看

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …