配置两个不同kerberos认证中心的集群间的互信
兩個Hadoop集群開啟Kerberos驗證后,集群間不能夠相互訪問,需要實現Kerberos之間的互信,使用Hadoop集群A的客戶端訪問Hadoop集群B的服務(實質上是使用Kerberos Realm A上的Ticket實現訪問Realm B的服務)。
先決條件:
1)兩個集群(XDF.COM和HADOOP.COM)均開啟Kerberos認證
2)Kerberos的REALM分別設置為XDF.COM和HADOOP.COM
步驟如下:
1 配置KDC之間的信任ticket
實現DXDF.COM和HADOOP.COM之間的跨域互信,例如使用XDF.COM的客戶端訪問HADOOP.COM中的服務,兩個REALM需要共同擁有名為krbtgt/HADOOP.COM@XDF.COM的principal,兩個Keys需要保證密碼,version number和加密方式一致。默認情況下互信是單向的,?HADOOP.COM的客戶端訪問XDF.COM的服務,兩個REALM需要有krbtgt/XDF.COM@HADOOP.COM的principal。
向兩個集群中添加krbtgt principal
要驗證兩個entries具有匹配的kvno和加密type,查看命令使用getprinc <principal_name>
kadmin.local: getprinc krbtgt/XDF.COM@HADOOP.COM Principal: krbtgt/XDF.COM@HADOOP.COM Expiration date: [never] Last password change: Wed Jul 05 14:18:11 CST 2017 Password expiration date: [none] Maximum ticket life: 1 day 00:00:00 Maximum renewable life: 30 days 00:00:00 Last modified: Wed Jul 05 14:18:11 CST 2017 (admin/admin@XDF.COM) Last successful authentication: [never] Last failed authentication: [never] Failed password attempts: 0 Number of keys: 7 Key: vno 1, aes128-cts-hmac-sha1-96 Key: vno 1, des3-cbc-sha1 Key: vno 1, arcfour-hmac Key: vno 1, camellia256-cts-cmac Key: vno 1, camellia128-cts-cmac Key: vno 1, des-hmac-sha1 Key: vno 1, des-cbc-md5 MKey: vno 1 Attributes: Policy: [none] kadmin.local: getprinc addprinc krbtgt/HADOOP.COM@XDF.COM usage: get_principal [-terse] principal kadmin.local: getprinc krbtgt/HADOOP.COM@XDF.COM Principal: krbtgt/HADOOP.COM@XDF.COM Expiration date: [never] Last password change: Wed Jul 05 14:17:47 CST 2017 Password expiration date: [none] Maximum ticket life: 1 day 00:00:00 Maximum renewable life: 30 days 00:00:00 Last modified: Wed Jul 05 14:17:47 CST 2017 (admin/admin@XDF.COM) Last successful authentication: [never] Last failed authentication: [never] Failed password attempts: 0 Number of keys: 7 Key: vno 1, aes128-cts-hmac-sha1-96 Key: vno 1, des3-cbc-sha1 Key: vno 1, arcfour-hmac Key: vno 1, camellia256-cts-cmac Key: vno 1, camellia128-cts-cmac Key: vno 1, des-hmac-sha1 Key: vno 1, des-cbc-md5 MKey: vno 1 Attributes: Policy: [none]2 在core-site中配置principal和user的映射RULES
?
Paste_Image.png
設置hadoop.security.auth_to_local參數,該參數用于將principal轉變?yōu)閡ser,一個需要注意的問題是SASL RPC客戶端需要遠程Server的Kerberos principal在本身的配置中匹配該principal。相同的pricipal name需要分配給源和目標cluster的服務,例如Source Cluster中的NameNode的kerbeors principal name為nn/h@XDF.COM,在Destination cluster中NameNode的pricipal設置為nn/h@HADOOP.COM(不能設置為nn2/h***@HADOOP.COM),例如:
在XDF Cluster和 HADOOP Cluster的core-site中增加:
?
<property> <name>hadoop.security.auth_to_local</name> <value> RULE:[1:$1@$0](^.*@HADOOP\.COM$)s/^(.*)@HADOOP\.COM$/$1/g RULE:[2:$1@$0](^.*@HADOOP\.COM$)s/^(.*)@HADOOP\.COM$/$1/g RULE:[1:$1@$0](^.*@XDF\.COM$)s/^(.*)@XDF\.COM$/$1/g RULE:[2:$1@$0](^.*@XDF\.COM$)s/^(.*)@XDF\.COM$/$1/g DEFAULT </value> </property>使用hadoop org.apache.hadoop.security.HadoopKerberosName <principal-name>來實現驗證,例如:
[root@node1a141 ~]# hadoop org.apache.hadoop.security.HadoopKerberosName hdfs/nodea1a141@XDF.COM Name: hdfs/nodea1a141@XDF.COM to hdfs3 在krb5.conf中配置信任關系
3.1 配置capaths
第一種方式是配置shared hierarchy of names,這個是默認及比較簡單的方式,第二種方式是在krb5.conf文件中改變capaths,復雜但是比較靈活,這里采用第二種方式。
在兩個集群的節(jié)點的/etc/krb5.conf文件配置domain和realm的映射關系,例如:在XDF cluster中配置:
在HADOOP Cluster中配置:
[capaths]HADOOP.COM = {XDF.COM = .}配置成'.'是表示沒有intermediate realms
3.2 配置realms
為了是XDF 可以訪問HADOOP的KDC,需要將HADOOP的KDC Server配置到XDF cluster中,如下,反之相同:
[realms]XDF.COM = {kdc = {host}.XDF.COM:88admin_server = {host}.XDF.COM:749default_domain = XDF.COM}HADOOP.COM = {kdc = {host}.HADOOP.COM:88admin_server = {host}.HADOOP.COM:749default_domain = HADOOP.COM}3.3 配置domain_realm
在domain_realm中,一般配置成'.XDF.COM'和'XDF.COM'的格式,'.'前綴保證kerberos將所有的XDF.COM的主機均映射到XDF.COM realm。但是如果集群中的主機名不是以XDF.COM為后綴的格式,那么需要在domain_realm中配置主機與realm的映射關系,例XDF.nn.local映射為XDF.COM,需要增加XDF.nn.local = XDF.COM。
[domain_realm] .hadoop.com=HADOOP.COMhadoop.com=HADOOP.COM.xdf.com=XDF.COMxdf.com=XDF.COMnode1a141 = XDF.COMnode1a143 = XDF.COMnode1a210 = HADOOP.COMnode1a202 = HADOOP.COMnode1a203 = HADOOP.COM重啟kerberos服務
3.4 配置hdfs-site.xml
在hdfs-site.xml,設置允許的realms
在hdfs-site.xml中設置dfs.namenode.kerberos.principal.pattern為"*"
?
這個是客戶端的匹配規(guī)則用于控制允許的認證realms,如果該參數不配置,會有下面的異常:
java.io.IOException: Failed on local exception: java.io.IOException: java.lang.IllegalArgumentException:Server has invalid Kerberosprincipal:nn/ HADOOP.COM@ XDF.COM;Host Details : local host is: "host1.XDF.COM/10.181.22.130";destination host is: "host2.HADOOP.COM":8020;4 測試
1)使用hdfs命令測試XDF 和HADOOP 集群間的數據訪問,例如在XDF Cluster中kinit admin@XDF.CON,然后運行hdfs命令:
[root@node1a141 ~]# kdestroy [root@node1a141 ~]# kinit admin Password for admin@XDF.COM: [root@node1a141 ~]# hdfs dfs -ls / Found 3 items drwxrwxrwx+ - hdfs supergroup 0 2017-06-13 15:13 /tmp drwxrwxr-x+ - hdfs supergroup 0 2017-06-22 15:55 /user drwxrwxr-x+ - hdfs supergroup 0 2017-06-14 14:11 /wa [root@node1a141 ~]# hdfs dfs -ls hdfs://node1a202:8020/ Found 9 items drwxr-xr-x - root supergroup 0 2017-05-27 18:55 hdfs://node1a202:8020/cdtest drwx------ - hbase hbase 0 2017-05-22 18:51 hdfs://node1a202:8020/hbase drwx------ - hbase hbase 0 2017-07-05 19:16 hdfs://node1a202:8020/hbase1 drwxr-xr-x - hbase hbase 0 2017-05-11 10:46 hdfs://node1a202:8020/hbase2 drwxr-xr-x - root supergroup 0 2016-12-01 17:30 hdfs://node1a202:8020/home drwxr-xr-x - mdss supergroup 0 2016-12-13 18:30 hdfs://node1a202:8020/idfs drwxr-xr-x - hdfs supergroup 0 2017-05-22 18:51 hdfs://node1a202:8020/system drwxrwxrwt - hdfs supergroup 0 2017-05-31 17:37 hdfs://node1a202:8020/tmp drwxrwxr-x+ - hdfs supergroup 0 2017-05-04 15:48 hdfs://node1a202:8020/user在HADOOP.COM中進行相同的操作
2)運行distcp程序將XDF的數據復制到HADOOP集群,命令如下:
5 附錄
兩集群的/etc/krb5.conf完整文件內容如下:
[root@node1a141 xdf]# cat /etc/krb5.conf [logging]default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]default_realm = XDF.COMdns_lookup_realm = falsedns_lookup_kdc = falseticket_lifetime = 7drenew_lifetime = 30forwardable = truerenewable=true#default_ccache_name = KEYRING:persistent:%{uid}[realms]HADOOP.COM = {kdc = node1a198admin_server = node1a198default_realm = HADOOP.COMsupported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal}XDF.COM = {kdc = node1a141admin_server = node1a141default_realm = XDF.COMsupported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal}[domain_realm].hadoop.com=HADOOP.COMhadoop.com=HADOOP.COM.xdf.com=XDF.COMxdf.com=XDF.COMnode1a141 = XDF.COMnode1a143 = XDF.COMnode1a210 = HADOOP.COMnode1a202 = HADOOP.COMnode1a203 = HADOOP.COM[capaths] XDF.COM = {HADOOP.COM = . }轉載于:https://www.cnblogs.com/felixzh/p/11505996.html
總結
以上是生活随笔為你收集整理的配置两个不同kerberos认证中心的集群间的互信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Three-way Partition
- 下一篇: kafka集群安全化之启用kerbero