集群互信配置
更新时间:2025-01-21
工作准备
注意事项:
- 进行互信配置的两个集群的 nameservice 需要不同,BMR 默认 nameservice 为 bmr-cluster
- 本文以 BMR 跨域访问 CDH 集群中的服务为例。配置完成后,BMR 在获取到本集群 KDC 授予的TGT(Ticket Granting Ticket)后,能够跨域访问 CDH 中的服务。
- 本文配置的跨域互信是单向的,即 CDH 无法跨域访问 BMR 上的服务,如果需要实现双向跨域互信,按照同样的方法交换配置即可。
- 如需配置外部集群(即CDH集群)与BMR集群间的互信,除本文说明操作外还需要修改 BMR 安全组规则使外部集群可访问 BMR 集群 Kerberos 服务。
在进行配置前,需获知集群 hostname 或 ip 以及 realm 信息,以 master 节点获取 hostname 和 realm 为例,具体操作步骤如下。
- 登录 BMR 集群的 master 节点;
- 执行
hostname
命令获取 hostname;或通过接口可直接获取集群hostname列表,参考 实例操作接口; - 在 master 节点的 /etc/krb5.conf 文件中获取 realm,执行,其中 default_realm 即为所需的集群 realm。
Plain Text
1cat /etc/krb5.conf
为方便表述实际使用方式,在本文中,规定所使用的 BMR 集群与 CDH 集群信息如下:
集群 | hostname | realm |
---|---|---|
BMR | master-8932187 | BAIDU.COM |
CDH | test-cdh5-1 | CDHTEST.COM |
添加跨域认证 Principal
注意事项
- 实现 BMR 集群和 CDH 集群之间的跨域互信,例如使用 BMR 集群的客户端访问 CDH 集群中的服务,两个集群 realm 需要同时拥有名为 krbtgt/CDHTEST.COM.COM@BAIDU.COM的 principal。
- 默认情况下互信是单向的,CDH集群的客户端如需访问BMR集群的服务,两个REALM则需要有krbtgt/BAIDU.COM@CDHTEST.COM的principal。两个两次操作需要保证密码,version number和加密方式一致。
具体操作步骤如下:
- 使用 root 用户,SSH 登录 BMR 集群的 master 节点;
- 执行以下命令,添加 princ,其中 krbtgt/CDHTEST.COM@BAIDU.COM 为跨域访问的共同 principal;
Plain Text
1kadmin.local -q 'add_principal -e "aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal" krbtgt/CDHTEST.COM@BAIDU.COM'
- 按照提示输入两次密码(建议为集群密码),在两个集群中添加Principal时使用的密码必须一致;
- 登录 CDH 集群,重复上述步骤1~2。
配置principal和user的映射关系
- SSH 登录 BMR 集群的 master 节点;
- 执行以下命令,获取 HDFS 配置文件 core-site 中的hadoop.security.auth_to_local值:
Plain Text
1cat /etc/hadoop/conf/core-site.xml
- 将步骤2中获取的值,追加到 CDH 集群的 HDFS 配置文件 hadoop.security.auth_to_local 值末尾;
- 配置完毕后,重启 CDH 集群的HDFS;
- 配置完成后,在 CDH 集群节点上执行 hadoop org.apache.hadoop.security.HadoopKerberosName princ查看是否能成功解析用户。
配置krb5.conf
- SSH 登录 BMR 集群的 master 节点;
- 执行以下命令,修改 BMR 集群上krb5.conf的配置信息。注:一个集群中所有节点的 krb5.conf 配置一致:
Plain Text
1vim /etc/krb5.conf
- 修改krb5.conf中的[domain_realm],将 CDH 及BMR集群的节点 hostname 和realm做映射
修改前格式如下:
Plain Text
1[domain_realm]
2 baidu.com = BAIDU.COM
修改后示例如下:
Plain Text
1[domain_realm]
2 baidu.com = BAIDU.COM
3 core-8932187-3 = BAIDU.COM
4 core-8932187-2 = BAIDU.COM
5 core-8932187-1 = BAIDU.COM
6 master-8932187 = BAIDU.COM
7 test-cdh5-1.baidu.com = CDHTEST.COM
8 test-cdh5-2.baidu.com = CDHTEST.COM
9 test-cdh5-3.baidu.com = CDHTEST.COM
- 修改 krb5.conf 中的 [realms] ,将 CDH的 KDC Server(配置在 CDH 集群的 krb5.conf 中)配置到 BMR 的 realms 中
修改前格式如下:
Plain Text
1[realms]
2 BAIDU.COM = {
3 #kadmin instance_name
4 admin_server = master-8932187
5 #kdc instance_name
6 kdc = master-8932187
7 database_module = openldap_ldapconf
8 }
修改后格式如下:
Plain Text
1[realms]
2 BAIDU.COM = {
3 #kadmin instance_name
4 admin_server = master-8932187
5 #kdc instance_name
6 kdc = master-8932187
7 database_module = openldap_ldapconf
8 }
9 HWLPOC.COM = {
10 kdc = test-cdh5-1.baidu.com
11 admin_server = test-cdh5-1.baidu.com
12 }
- krb5.conf中新增[capaths],krb5.conf 中 默认没有 [capaths] 相关配置。需新增配置,示例如下:
Plain Text
1[capaths]
2 CDHTEST.COM = {
3 BAIDU.COM = .
4 }
-
同步修改好的krb5.conf配置信息复制到BMR集群所有节点
a.SSH 登录 BMR 集群master节点
b.执行如下命令:
Plain Text
1vim instance
2 #把BMR集群所有节点(除了当前)hostname写入文件中,保存
3ansible -i instance all -m copy -a "src=/etc/krb5.conf dest=/etc/krb5.conf"
- 重启Kerberos服务
a.在master节点上执行如下命令
Plain Text
1systemctl restart krb5kdc.service
2systemctl restart kadmin.service
b.在master节点上执行如下命令
Plain Text
1[libdefaults]
2 kdc_timeout = 3000
3 max_retries = 3
4 udp_preference_limit = 1
5 renew_lifetime = 7d
6 forwardable = true
7 #cluster realm
8 default_realm = BAIDU.COM
9 ticket_lifetime = 24h
10 dns_lookup_realm = false
11 dns_lookup_kdc = false
12 default_ccache_name = /tmp/krb5cc_%{uid}
13 #default_tgs_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
14 #default_tkt_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
15
16[domain_realm]
17 #cluster realm
18 baidu.com = BAIDU.COM
19 core-8932187-3 = BAIDU.COM
20 core-8932187-2 = BAIDU.COM
21 core-8932187-1 = BAIDU.COM
22 master-8932187 = BAIDU.COM
23 test-cdh5-1.baidu.com = CDHTEST.COM
24 test-cdh5-2.baidu.com = CDHTEST.COM
25 test-cdh5-3.baidu.com = CDHTEST.COM
26
27[logging]
28 default = FILE:/mnt/bmr/log/kerberos/krb5kdc.log
29 admin_server = FILE:/mnt/bmr/log/kerberos/kadmind.log
30 kdc = FILE:/mnt/bmr/log/kerberos/krb5kdc.log
31
32[realms]
33 BAIDU.COM = {
34 #kadmin instance_name
35 admin_server = master-8932187
36 #kdc instance_name
37 kdc = master-8932187
38 database_module = openldap_ldapconf
39 }
40 CDHTEST.COM = {
41 kdc = test-cdh5-1.baidu.com
42 admin_server = test-cdh5-1.baidu.com
43 }
44
45[dbdefaults]
46 ldap_kerberos_container_dn = cn=krbcontainer,dc=bmr.sh,dc=com
47
48[dbmodules]
49 openldap_ldapconf = {
50 db_library = kldap
51 #openldap ip
52 ldap_servers = ldap://172.18.0.33
53 ldap_kerberos_container_dn = cn=krbcontainer,dc=bmr.sh,dc=com
54 ldap_kdc_dn = uid=krb5kdc,ou=People,dc=bmr.sh,dc=com
55 ldap_kadmind_dn = uid=kadmind,ou=People,dc=bmr.sh,dc=com
56 #kerberos-ldap key file
57 ldap_service_password_file = /etc/krb5.ldap
58 ldap_conns_per_server = 5
59 }
60[capaths]
61 CDHTEST.COM = {
62 BAIDU.COM = .
63 }
修改BMR集群的/etc/hosts
- SSH 登录 BMR 集群的 master 节点;
- 复制 CDH 集群节点 /etc/hosts 中的 CDH 集群节点信息,追加到 BMR 当前节点的 /etc/hosts 文件中。
Plain Text
1vim instance
2 #把 BMR 所有节点(除了当前)hostname写入文件中,保存
3ansible -i cores all -m copy -a "src=/etc/hosts dest=/etc/hosts"
互信验证
BMR 集群访问 CDH 集群的 HDFS 文件,示例如下:
Plain Text
1 #查看本集群hdfs
2hdfs dfs -ls /
3
4 #查看CDH集群hdfs
5 #test-cdh5-1.baidu.com为CDH集群的namenode所在节点
6hdfs dfs -ls hdfs://test-cdh5-1.baidu.com:8020/