Hadoop集群雙向Kerberos互信配置

前言

大數(shù)據(jù)Hadoop集群啟用Kerberos認(rèn)證之后,訪問返回會被限制到單個集群內(nèi)部。如果有需要訪問另一個開啟Kerberos集群的需求(例如跨集群數(shù)據(jù)導(dǎo)入導(dǎo)出),需要配置Kerberos集群互信。

前提條件

  • 兩個集群的Kerberos Realm不能相同。
  • 兩個集群的FQDN二級域名不能相同。
  • 兩個集群的網(wǎng)絡(luò)互通。

配置方法

環(huán)境信息

假定兩個集群分別為BEIJING集群和SHANGHAI集群。

對于/etc/krb5.conf配置文件的[realms]片段,BEIJING集群的配置為:

[realms]
    BEIJING = {
        admin_server = host1.beijing.com
        kdc = host1.beijing.com
    }

SHANGHAI集群的配置為:

[realms]
    SHANGHAI = {
        admin_server = host1.shanghai.com
        kdc = host1.shanghai.com
    }

對于/et/hosts,BEIJING集群的配置為:

100.0.0.1 host1.beijing.com
100.0.0.2 host2.beijing.com
100.0.0.3 host3.beijing.com

SHANGHAI集群的配置為:

120.0.0.1 host1.shanghai.com
120.0.0.2 host2.shanghai.com
120.0.0.3 host3.shanghai.com

下面為互信的配置步驟。

修改/etc/krb5.conf文件

確保雙方的集群都具有對方的realms配置。domain_realmcapaths按照下面的例子配置。

BEIJING集群的配置修改為:

[realms]
    BEIJING = {
        admin_server = host1.beijing.com
        kdc = host1.beijing.com
    }
    SHANGHAI = {
        admin_server = host1.shanghai.com
        kdc = host1.shanghai.com
    }
[domain_realm]
    .beijing.com = BEIJING
    beijing.com = BEIJING
    .shanghai.com = SHANGHAI
    shanghai.com = SHANGHAI
[capaths]
    BEIJING = {
        SHANGHAI = .
    }

SHANGHAI集群的配置修改為:

[realms]
    SHANGHAI = {
        admin_server = host1.shanghai.com
        kdc = host1.shanghai.com
    }
    BEIJING = {
        admin_server = host1.beijing.com
        kdc = host1.beijing.com
    }
[domain_realm]
    .shanghai.com = SHANGHAI
    shanghai.com = SHANGHAI
    .beijing.com = BEIJING
    beijing.com = BEIJING
[capaths]
    SHANGHAI = {
        BEIJING = .
    }

需要注意的是,如果存在有二級域名不是shanghai.com或者beijing.com的節(jié)點,需要在[domain_realm]片段中單獨指定所屬realm。例如:

[domain_realm]
    .shanghai.com = SHANGHAI
    shanghai.com = SHANGHAI
    .beijing.com = BEIJING
    beijing.com = BEIJING
    testnode1 = BEIJING

配置完畢之后需要重啟兩個集群的Kerberos服務(wù):

systemctl restart krb5kdc.service
systemctl restart kadmin.service

修改/etc/hosts文件

確保雙方集群都具有對方的hosts信息。

BEIJING集群的配置修改為:

100.0.0.1 host1.beijing.com
100.0.0.2 host2.beijing.com
100.0.0.3 host3.beijing.com

120.0.0.1 host1.shanghai.com
120.0.0.2 host2.shanghai.com
120.0.0.3 host3.shanghai.com

SHANGHAI集群的配置修改為:

120.0.0.1 host1.shanghai.com
120.0.0.2 host2.shanghai.com
120.0.0.3 host3.shanghai.com

100.0.0.1 host1.beijing.com
100.0.0.2 host2.beijing.com
100.0.0.3 host3.beijing.com

配置krbtgt

在BEIJING集群添加krbtgt:

kadmin.local: addprinc -pw admin krbtgt/BEIJING@SHANGHAI
kadmin.local: addprinc -pw admin krbtgt/SHANGHAI@BEIJING

同樣也需要在SHANGHAI集群添加krbtgt:

kadmin.local: addprinc -pw admin krbtgt/BEIJING@SHANGHAI
kadmin.local: addprinc -pw admin krbtgt/SHANGHAI@BEIJING

配置core-site.xml的hadoop.security.auth_to_local

hadoop.security.auth_to_local配置項的作用是定義將principal名稱轉(zhuǎn)化為user的規(guī)則。因此對于BEIJING和集群來說,需要得知SHANGHAI集群的轉(zhuǎn)換規(guī)則,可以將SHANGHAI集群的hadoop.security.auth_to_local復(fù)制追加到本集群配置的后面(DEFAULT除外)。反過來也一樣。

BEIJING集群的hadoop.security.auth_to_local配置修改為:

RULE:[1:$1@$0](^.*@BEIJING$)s/^(.*)@BEIJING$/$1/g
RULE:[2:$1@$0](^.*@BEIJING$)s/^(.*)@BEIJING$/$1/g
...省略BEIJING集群的其余配置
RULE:[1:$1@$0](^.*@SHANGHAI$)s/^(.*)@SHANGHAI$/$1/g
RULE:[2:$1@$0](^.*@SHANGHAI$)s/^(.*)@SHANGHAI$/$1/g 
...省略SHANGHAI集群的其余配置
DEFAULT 

SHANGHAI集群的hadoop.security.auth_to_local配置修改為:

RULE:[1:$1@$0](^.*@SHANGHAI$)s/^(.*)@SHANGHAI$/$1/g
RULE:[2:$1@$0](^.*@SHANGHAI$)s/^(.*)@SHANGHAI$/$1/g 
...省略SHANGHAI集群的其余配置
RULE:[1:$1@$0](^.*@BEIJING$)s/^(.*)@BEIJING$/$1/g
RULE:[2:$1@$0](^.*@BEIJING$)s/^(.*)@BEIJING$/$1/g
...省略BEIJING集群的其余配置
DEFAULT 

以上配置僅為示例,實際使用已真實環(huán)境配置為準(zhǔn),不要擅自修改以防止用戶名解析出現(xiàn)問題。

配置完畢之后需要重啟HDFS等相關(guān)組件才能生效。

結(jié)果驗證

驗證principal轉(zhuǎn)用戶名是否正常

兩個集群的HDFS等相關(guān)組件重啟完畢后。以hdfs/host1.shanghai.com轉(zhuǎn)換為用戶名為例,在BEIJING集群執(zhí)行:

hadoop org.apache.hadoop.security.HadoopKerberosName hdfs/host1.shanghai.com@SHANGHAI
Name: hdfs/host1.shanghai.com@SHANGHAI to hdfs

如果顯示類似上面的輸出,說明BEIJING能夠?qū)HANGHAI集群的hdfs/host1.shanghai.com@SHANGHAI轉(zhuǎn)換為hdfs用戶,配置是正確的。

假如這里遇到問題,需要檢查BEIJING集群的core-site.xmlhadoop.security.auth_to_local配置是否正確。

驗證是否可以訪問對方集群的數(shù)據(jù)

在BEIJING集群執(zhí)行:

kinit hdfs/host1.beijing.com
# 假定SHANGHAI集群的namenode安裝在host1.shanghai.com上
# 訪問SHANGHAI集群的數(shù)據(jù)
hdfs dfs -ls hdfs://host1.shanghai.com:8020/

如果互信配置正確,認(rèn)證之后可以訪問到對方集群HDFS的數(shù)據(jù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容