两个Hadoop集群开启Kerberos验证后,集群间不能够相互访问,需要实现Kerberos之间的互信,使用Hadoop集群A的客户端访问Hadoop集群B的服务(实质上是使用Kerberos Realm A上的Ticket实现访问Realm B的服务)。

先决条件:

1)两个集群(IDC.COM和HADOOP.COM)均开启Kerberos认证

2)Kerberos的REALM分别设置为IDC.COM和HADOOP.COM

步骤如下:

1 配置KDC之间的信任ticket

实现DIDC.COM和HADOOP.COM之间的跨域互信,例如使用IDC.COM的客户端访问HADOOP.COM中的服务,两个REALM需要共同拥有名为krbtgt/HADOOP.COM@IDC.COM的principal,两个Keys需要保证密码,version number和加密方式一致。默认情况下互信是单向的, HADOOP.COM的客户端访问IDC.COM的服务,两个REALM需要有krbtgt/IDC.COM@HADOOP.COM的principal。

向两个集群中添加krbtgt principal

  #IDC CLUSTER
kadmin.local: addprinc –e “aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal ” krbtgt/HADOOP.COM@IDC.COM
kadmin.local: addprinc –e “aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal ” krbtgt/IDC.COM@HADOOP.COM #HADOOP CLUSTER
kadmin.local: addprinc –e “aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal ” krbtgt/HADOOP.COM@IDC.COM
kadmin.local: addprinc –e “aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal ” krbtgt/IDC.COM@HADOOP.COM

要验证两个entries具有匹配的kvno和加密type,查看命令使用getprinc <principal_name>

kadmin.local:  getprinc  krbtgt/IDC.COM@HADOOP.COM
Principal: krbtgt/IDC.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@IDC.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@IDC.COM
usage: get_principal [-terse] principal
kadmin.local: getprinc krbtgt/HADOOP.COM@IDC.COM
Principal: krbtgt/HADOOP.COM@IDC.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@IDC.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



设置hadoop.security.auth_to_local参数,该参数用于将principal转变为user,一个需要注意的问题是SASL RPC客户端需要远程Server的Kerberos principal在本身的配置中匹配该principal。相同的pricipal name需要分配给源和目标cluster的服务,例如Source Cluster中的NameNode的kerbeors principal name为nn/h@IDC.COM,在Destination cluster中NameNode的pricipal设置为nn/h@HADOOP.COM(不能设置为nn2/h***@HADOOP.COM),例如:

在IDC 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](^.*@IDC\.COM$)s/^(.*)@IDC\.COM$/$1/g
RULE:[2:$1@$0](^.*@IDC\.COM$)s/^(.*)@IDC\.COM$/$1/g
DEFAULT
</value>
</property>

使用hadoop org.apache.hadoop.security.HadoopKerberosName 来实现验证,例如:

[root@node1a141 ~]#  hadoop org.apache.hadoop.security.HadoopKerberosName hdfs/nodea1a141@IDC.COM

Name: hdfs/nodea1a141@IDC.COM to hdfs

3 在krb5.conf中配置信任关系

3.1 配置capaths

第一种方式是配置shared hierarchy of names,这个是默认及比较简单的方式,第二种方式是在krb5.conf文件中改变capaths,复杂但是比较灵活,这里采用第二种方式。

在两个集群的节点的/etc/krb5.conf文件配置domain和realm的映射关系,例如:在IDC cluster中配置:

[capaths]
IDC.COM = {
HADOOP.COM = .
}

在HADOOP Cluster中配置:

 [capaths]
HADOOP.COM = {
IDC.COM = .
}

配置成'.'是表示没有intermediate realms

3.2 配置realms

为了是IDC 可以访问HADOOP的KDC,需要将HADOOP的KDC Server配置到IDC cluster中,如下,反之相同:

 [realms]
IDC.COM = {
kdc = {host}.IDC.COM:88
admin_server = {host}.IDC.COM:749
default_domain = IDC.COM
}
HADOOP.COM = {
kdc = {host}.HADOOP.COM:88
admin_server = {host}.HADOOP.COM:749
default_domain = HADOOP.COM
}

3.3 配置domain_realm

在domain_realm中,一般配置成'.IDC.COM'和'IDC.COM'的格式,'.'前缀保证kerberos将所有的IDC.COM的主机均映射到IDC.COM realm。但是如果集群中的主机名不是以IDC.COM为后缀的格式,那么需要在domain_realm中配置主机与realm的映射关系,例IDC.nn.local映射为IDC.COM,需要增加IDC.nn.local = IDC.COM。

[domain_realm]
.hadoop.com=HADOOP.COM
hadoop.com=HADOOP.COM
.IDC.com=IDC.COM
IDC.com=IDC.COM
node1a141 = IDC.COM
node1a143 = IDC.COM
node1a210 = HADOOP.COM
node1a202 = HADOOP.COM
node1a203 = HADOOP.COM

重启kerberos服务

3.4 配置hdfs-site.xml

在hdfs-site.xml,设置允许的realms

在hdfs-site.xml中设置dfs.namenode.kerberos.principal.pattern为"*"



这个是客户端的匹配规则用于控制允许的认证realms,如果该参数不配置,会有下面的异常:

java.io.IOException: Failed on local exception: java.io.IOException:
java.lang.IllegalArgumentException:
Server has invalid Kerberosprincipal:nn/ HADOOP.COM@ IDC.COM;
Host Details : local host is: "host1.IDC.COM/10.181.22.130";
destination host is: "host2.HADOOP.COM":8020;

4 测试

1)使用hdfs命令测试IDC 和HADOOP 集群间的数据访问

例如在IDC Cluster中kinit admin@IDC.COM,然后运行hdfs命令,查看本机群和对方集群得hdfs目录:

如果未开启跨域互信,访问对方hdfs目录时会报认证错误

[root@node1a141 ~]# kdestroy

在本机群客户端登陆admin用户,通过kerberos认证
[root@node1a141 ~]# kinit admin
Password for admin@IDC.COM: 访问本集群hdfs
[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 访问对方集群hdfs
[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程序将IDC的数据复制到HADOOP集群,命令如下:

[root@node1a141 ~]# hadoop distcp hdfs://node1a141:8020/tmp/test.sh  hdfs://node1a202:8020/tmp/

5 附录

两集群的/etc/krb5.conf完整文件内容如下:

[root@node1a141 IDC]# cat /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log [libdefaults]
default_realm = IDC.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 7d
renew_lifetime = 30
forwardable = true
renewable=true
#default_ccache_name = KEYRING:persistent:%{uid} [realms]
HADOOP.COM = {
kdc = node1a198
admin_server = node1a198
default_realm = HADOOP.COM
supported_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
}
IDC.COM = {
kdc = node1a141
admin_server = node1a141
default_realm = IDC.COM
supported_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.COM
hadoop.com=HADOOP.COM
.IDC.com=IDC.COM
IDC.com=IDC.COM
node1a141 = IDC.COM
node1a143 = IDC.COM
node1a210 = HADOOP.COM
node1a202 = HADOOP.COM
node1a203 = HADOOP.COM [capaths]
IDC.COM = {
HADOOP.COM = .
}

配置两个Hadoop集群Kerberos认证跨域互信的更多相关文章

  1. 使用Windows Azure的VM安装和配置CDH搭建Hadoop集群

    本文主要内容是使用Windows Azure的VIRTUAL MACHINES和NETWORKS服务安装CDH (Cloudera Distribution Including Apache Hado ...

  2. 一键配置高可用Hadoop集群(hdfs HA+zookeeper HA)

    准备环境 3台节点,主节点 建议 2G 内存,两个从节点 1.5G内存, 桥接网络 关闭防火墙 配置ssh,让节点之间能够相互 ping 通 准备  软件放到 autoInstall  目录下,已存放 ...

  3. Hadoop集群(第5期)_Hadoop安装配置

    1.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和Map ...

  4. Hadoop集群_Hadoop安装配置

    1.集群部署介绍 1.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesy ...

  5. 大数据系列(1)——Hadoop集群坏境搭建配置

    前言 关于时下最热的技术潮流,无疑大数据是首当其中最热的一个技术点,关于大数据的概念和方法论铺天盖地的到处宣扬,但其实很多公司或者技术人员也不能详细的讲解其真正的含义或者就没找到能被落地实施的可行性方 ...

  6. 构建高可靠hadoop集群之4-保全模式

    本文主要翻译自http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/SecureMode.html 译注:之所以 ...

  7. Hadoop集群搭建安装过程(一)(图文详解---尽情点击!!!)

    Hadoop集群搭建(一)(上篇中讲到了Linux虚拟机的安装) 一.安装所需插件(以hadoop2.6.4为例,如果需要可以到官方网站进行下载:http://hadoop.apache.org) h ...

  8. Linux 搭建Hadoop集群 成功

    内容基于(自己的真是操作步骤编写) Linux 搭建Hadoop集群---Jdk配置 Linux 搭建Hadoop集群 ---SSH免密登陆 一:下载安装 Hadoop 1.1:下载指定的Hadoop ...

  9. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

随机推荐

  1. 八大排序算法——快速排序(动图演示 思路分析 实例代码Java 复杂度分析)

    一.动图演示 二.思路分析 快速排序的思想就是,选一个数作为基数(这里我选的是第一个数),大于这个基数的放到右边,小于这个基数的放到左边,等于这个基数的数可以放到左边或右边,看自己习惯,这里我是放到了 ...

  2. Kali Linux搭建Go语言环境

     准备: (1)Kali Linux系统(此实验为VMware环境) (2)Go语言安装包 具体过程: (1)到官网下载Go语言安装包,如图示操作(官网可能需要梯子,没有的可以从国内相关网站下载) ( ...

  3. Python_Mix*生成器,生成器函数,推导式,生成器表达式

    生成器: 生成器的本质就是迭代器 生成器一般由生成器函数或者生成器表达式来创建,其实就是手写的迭代器 def func(): print('abc') yield 222 #由于函数中有了yield ...

  4. 【原创】KMP算法代码(C)

    //s是模式字符串,t是匹配字符串(可以看我上一篇文章中的叙述) int KMP(const char * s , const char * t) { int slen = strlen(s) , t ...

  5. [Leetcode 217&219]寻找数组中的重复值Contains Duplicate I & II

    [题目1] Given an array of integers, find if the array contains any duplicates. Your function should re ...

  6. BatchPreparedStatementSetter,用法

    spring批量更新数据 ---- BatchPreparedStatementSetter (2007-04-15 15:41:29) 转载▼ 标签: spring batchpreparedsta ...

  7. linux目录说明

    /etc/passwd  用户信息文件 [root@web01 ~]# cat /etc/passwd root: x: : : root: /root: /bin/bash 可登录用户 bin: x ...

  8. php留言板程序

    =================== 先创建note.php <html><head><title>PHP留言本</title></head&g ...

  9. 最佳sql server 分页查询

    用关键字查询 并作为条件是最快的,比其他嵌套select性能都要好 select top 100 id , name from tablex where id >preid order by i ...

  10. centos7 下安装mysql教程

    最近要在centos服务器上配置环境,在部署mysql的时候,碰到各种各样的问题,网上博客文章也是有各种坑,目前发现一个比较好的博客: https://blog.csdn.net/xiaomojun/ ...