E-MapReduce中的HAS Kerberos在配置跨域互信(Cross Realm)后支持跨域访问,即不同Kerberos集群之间可以互相访问。

使用限制

EMR-3.37.1及后续版本和EMR-5.3.1及后续版本的集群,HAS Kerberos才支持跨域互信。

操作流程

  1. 步骤一:工作准备
  2. 步骤二:添加跨域认证Principal
  3. 步骤三:配置Cluster-A的krb5.conf
  4. 步骤四:访问Cluster-B服务

步骤一:工作准备

本文以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的配置信息。
    vim /etc/krb5.conf
    配置[realms][domain_realm][capaths]。示例如下。
    [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地址。
  2. 同步修改好的krb5.conf配置信息至Cluster-A所有节点。
  3. 拷贝Cluster-B集群节点/etc/hosts中的信息(只需要长域名emr-xxx-x.cluster-xxx)至Cluster-A集群所有节点的/etc/hosts文件中。
    10.**.**.**  emr-worker-1.cluster-xxx
    10.**.**.**  emr-worker-2.cluster-xxx
    10.**.**.**  emr-header-1.cluster-xxx
    说明
    • 如果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为例介绍。
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