本文檔旨在說明如何在NIFI集羣模式下中配置kerberos安全登陸模式。
一、版本信息
OS:CentOS7.2
JDK : 1.8.0_65
NIFI : 1.3.0
ZooKeeper: 3.4.6
二、操作系統配置
vi /etc/sysconfig/network-scripts/ifcfg-enoXXX(該文件可能會因環境而異)
2.2 配置每個節點的主機名
方法一 hostnamectl set-hostname ***
方法二 vi /etc/hostname 把原來的主機名修改爲需要設置的主機名,例如:node1
2.3配置每個節點的IP映射文件
vi /etc/hosts
192.168.1.1 node1
192.168.1.2 node2
192.168.1.3 node3
2.4 關閉每個節點的防火牆>setenforce 0
>vi /etc/selinux/config
SELINUX=disabled #修改內容爲disabled
>systemctl stop firewalld.service
>systemctl disable firewalld.service
>firewall-cmd --state #查看防火牆狀態(關閉顯示not running,開啓顯示running)
2.5 同步每個節點的時間ntpdate 0.centos.pool.ntp.org 同步時間
三、配置kerberos server
參考 上一篇文章 nifi基於Kerberos的單節點安全登陸配置配置好Kerberos server端以後(可單獨配置一臺機器,也可配置在一臺nifi節點上),在其他節點安裝Kerberos的client端,並能連通(參考Kerberos主從架構設計)
配置Kerberos的client端--在每個client端執行
1.通過在線安裝的方式安裝KDC客戶端
yum -y install krb5-libs krb5-workstation krb5-auth-dialog
2.配置kerberos客戶端的/etc/krb5.conf文件配置成kerberos服務端一樣的內容就可以,爲了方便可直接拷貝kerberos服務端的文件直接覆蓋就可以。
3.驗證kerberos客戶端是否聯通,利用kinit命令驗證kerberos客戶端是否可以通信服務端。
kinit login/[email protected]
四、證書生成以及配置
下載地址:http://nifi.apache.org/download.html
下載後解壓安裝nifi-toolkit-1.3.0-bin.zip (或tar.gz格式),配置好環境變量方便使用.
爲node[1-3]節點生成密鑰庫,truststore,nifi.properties以及具有給定DN的客戶端證書。
tls-toolkit.sh standalone -c ca.nifi.com -n 'node[1-3]' -o './target'
其中 -n,-hostnames要生成證書的主機名列表(以逗號分隔),可指定多次,支持範圍和實例模式。
-c, -certificateAuthorityHostname 爲Hostname of NiFi Certificate Authority。
-o, -outputDirectory 指定生成證書的路徑
把node1目錄下的文件拷貝到node1節點下nifi的安裝目錄的conf文件下,重複的文件選擇覆蓋,同樣把node2目錄下的文件拷貝到node2節點下nifi的安裝目錄的conf文件下,把node3目錄下的文件拷貝到node3節點下nifi的安裝目錄的conf文件下。
scp ./node1/* /opt/nifi-1.3.0/conf/
scp ./node2/* root@node2:/opt/nifi-1.3.0/conf/
scp ./node3/* root@node3:/opt/nifi-1.3.0/conf/
五、NIF配置-Kerberos認證
然後修改nifi.properties中的一些參數
nifi.state.management.embedded.zookeeper.start=true
nifi.cluster.protocol.is.secure=true
nifi.cluster.is.node=true
nifi.zookeeper.connect.string=node1:2181,node2:2181,node3:2181
採用了nifi中的自帶zookeeper,設置三個節點的zookeeper.修改配置了zookeeper節點的nifi安裝目錄下的/conf/state-management.xml
<property name="Connect String">node1:2181,node2:2181,node3:2181</property>
修改每個節點的/conf/zookeeper.properties server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
創建myid文件,主要根據zookeeper.properties文件的的dataDir=./state/zookeeper參數確定位置在此文件夾下(沒有則創建)不同節點分別執行
echo 1 > ./state/zookeeper/myid
echo 2 > ./state/zookeeper/myid
echo 3 > ./state/zookeeper/myid
2. 配置kerberos參數nifi.remote.input.secure=true
nifi.security.user.login.identity.provider=kerberos-provider
# kerberos #
nifi.kerberos.krb5.file=/etc/krb5.conf
nifi.kerberos.service.principal=test/[email protected] #配置的服務主體
nifi.kerberos.keytab.location=/opt/test-NIFI.keytab #配置服務主體的keytab
把配置服務主體的/opt/test-NIFI.keytab拷貝到每個節點的/opt目錄下scp test-NIFI.keytab root@node2:/opt/
scp test-NIFI.keytab root@node3:/opt/
3. 配置nifi登陸信息vi login-identity-providers.xml
<provider>
<identifier>kerberos-provider</identifier>
<class>org.apache.nifi.kerberos.KerberosProvider</class>
<property name="Default Realm">NIFI.COM</property>
<property name="Authentication Expiration">12 hours</property>
</provider>
放開kerberos-provide的配置,把相關注釋部分取消,然後配置成你前面設置的Realm。4. 配置用於登陸的用戶信息
<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">login/[email protected]</property>
<property name="Legacy Authorized Users File"></property>
<!-- Provide the identity (typically a DN) of each node when clustered. 注意空格-->
<property name="Node Identity 1">CN=node1, OU=NIFI</property>
<property name="Node Identity 2">CN=node2, OU=NIFI</property>
<property name="Node Identity 3">CN=node3, OU=NIFI</property>
</authorizer>
每個節點都能登陸訪問web頁面
Hosts:設置的ip
Port: 9443(默認,或者你修改的端口)
User: login/server
Password: ****(前面kerberos配置的用戶名和密碼)