说明
本文描述问题及解决方法同样适用于 弹性 MapReduce(EMR)。
操作流程
步骤一:工作准备
本文以Cluster-A跨域去访问Cluster-B中的服务为例。配置完成后,Cluster-A在获取到本集群KDC授予的TGT(Ticket Granting Ticket)后,能够跨域访问Cluster-B中的服务。本文配置的跨域互信是单向的,即Cluster-B无法跨域访问Cluster-A上的服务,如果需要实现双向跨域互信,按照同样的方法交换配置即可。
在两个集群在emr-header-1节点上,执行 hostname
命令获取hostname。在emr-header-1节点的/etc/krb5.conf文件中获取realm。本文使用的两个集群信息示例如下:
- Cluster-A的相关信息:
- hostname:emr-header-1.cluster-1234。
- realm:EMR.1234.COM。
- Cluster-B的相关信息:
- hostname:emr-header-1.cluster-6789。
- realm:EMR.6789.COM。
步骤二:添加跨域认证Principal
1. 使用SSH方式登录到集群Cluster-A,详情请参见[登录集群]
2. 使用root用户,在集群Cluster-A的emr-header-1节点执行以下命令。 sh /usr/lib/has-current/bin/admin-local.sh /etc/ecm/has-conf -k /etc/ecm/has-conf/admin.keytab admin.local: addprinc -pw 123456 krbtgt/EMR.6789.COM@EMR.1234.COM 上面命令涉及的参数如下:
123456
:是初始密码,您可以自定义。EMR.1234.COM
:Cluster-A的realm。EMR.6789.COM
:Cluster-B的realm。
3. 在集群Cluster-B的emr-header-1节点,重复上述步骤[1]~[2],添加跨域认证Principal。
步骤三:配置Cluster-A的krb5.conf
1. 执行以下命令,修改Cluster-A集群上krb5.conf的配置信息。
代码语言:javascript复制vim /etc/krb5.conf
配置 [realms] 、 [domain_realm] 和 [capaths] 。示例如下。
代码语言:javascript复制[libdefaults]
kdc_realm = EMR.1234.COM
default_realm = EMR.1234.COM
udp_preference_limit = 4096
kdc_tcp_port = 88
kdc_udp_port = 88
dns_lookup_kdc = false
[realms]
EMR.1234.COM = {
kdc = 10.81.**.**:88
}
EMR.6789.COM = {
kdc = 10.81.**.**:88
}
[domain_realm]
.cluster-1234 = EMR.1234.COM
.cluster-6789 = EMR.6789.COM
[capaths]
EMR.1234.COM = {
EMR.6789.COM = .
}
EMR.6789.COM = {
EMR.1234.COM = .
}
说明:
kdc参数值中的 10.81.**.** 为HAS KDC所在节点的内网IP地址。
1. 同步修改好的krb5.conf配置信息至Cluster-A所有节点。
2. 拷贝Cluster-B集群节点/etc/hosts中的信息(只需要长域名 emr-xxx-x.cluster-xxx )至Cluster-A集群所有节点的/etc/hosts文件中。
代码语言:javascript复制10.**.**.** emr-worker-1.cluster-xxx 10.**.**.** emr-worker-2.cluster-xxx 10.**.**.** emr-header-1.cluster-xxx
3. 说明
- 如果Cluster-A上需要运行作业访问Cluster-B,则需要先重启YARN。
- 在Cluster-A的所有节点上,配置Cluster-B的host绑定信息。
步骤四:访问Cluster-B服务
在Cluster-A上,您可以使用Cluster-A的Kerberos keytab文件,访问Cluster-B的服务。 例如,访问Cluster-B的HDFS服务。创建测试需要的Principal及导出keytab文件,详情请参见[兼容MIT Kerberos认证]。下面以test用户的keytab为例介绍。
代码语言:javascript复制kinit -kt test.keytab test@EMR.1234.COM
hadoop fs -ls hdfs://emr-header-1.cluster-6789:9000/
Found 6 items
drwxr-xr-x - hadoop hadoop 0 2021-08-27 10:10 hdfs://emr-header-1.cluster-6789:9000/apps
drwxrwxrwt - hadoop hadoop 0 2021-08-27 10:10 hdfs://emr-header-1.cluster-6789:9000/spark-history
drwxrwxrwt - hadoop hadoop 0 2021-08-27 10:11 hdfs://emr-header-1.cluster-6789:9000/tmp
drwxrwxrwt - hadoop hadoop 0 2021-08-27 10:11 hdfs://emr-header-1.cluster-6789:9000/user
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!