本文将介绍如何在E-MapReduce上使用Knox。

背景信息

目前E-MapReduce中支持了Apache Knox,选择支持Knox的镜像创建集群,完成以下准备工作后,即可在公网直接访问Yarn、HDFS、SparkHistory等服务的Web UI。

准备工作

  • 开启Knox公网IP访问
    1. E-MapReduce上Knox的服务端口是8443,在集群详情中找到集群所在的ECS安全组。
    2. 在ECS控制台修改对应的安全组,在入方向添加一条规则,打开8443端口。
    注意
    • 为了安全原因,这里设置的授权对象必须是您的一个有限的IP段范围,禁止使用0.0.0.0/0。
    • 打开安全组的8443端口之后,该安全组内的所有机器均会打开公网入方向的8443端口,包括非E-MapReduce的ECS机器。
    • 若集群在创建时,没有挂载公网IP。可以在ECS控制台为该ECS实例添加公网IP。添加成功后,返回EMR控制台,在集群管理下的主机列表页面,单击同步主机信息可以立即同步。
    • Knox节点新挂载公网IP后,需要通过提交工单联系E-MapReduce产品团队,进行域名和公网IP的绑定操作。
  • 设置Knox用户

    访问Knox时需要对身份进行验证,会要求您输入用户名和密码。Knox的用户身份验证基于LDAP,您可以使用自有LDAP服务,也可以使用集群中的Apache Directory Server的LDAP服务。

    • 使用集群中的LDAP服务

      方式一(推荐)

      用户管理中直接添加Knox访问账号。

      方式二
      1. SSH登录到集群上,详细步骤请参见SSH登录集群
      2. 准备您的用户数据,如:Tom。将文件中所有的emr-guest替换为Tom,将cn:EMR GUEST替换为cn:Tom,设置userPassword的值为您自己的密码。
        su knox
        cd /usr/lib/knox-current/templates  
        vi users.ldif
        注意 出于安全原因,导入前务必修改 users.ldif的用户密码,即:设置 userPassword的值为您自己的用户密码。
      3. 导入到LDAP。
        su knox
        cd /usr/lib/knox-current/templates
        sh ldap-sample-users.sh
    • 使用自有LDAP服务的情况
      1. 在集群配置管理中找到KNOX的配置管理,在cluster-topo配置中设置两个属性:main.ldapRealm.userDnTemplatemain.ldapRealm.contextFactory.urlmain.ldapRealm.userDnTemplate设置为自己的用户DN模板,main.ldapRealm.contextFactory.url 设置为自己的LDAP服务器域名和端口。设置完成后保存并重启Knox。配置Knox
      2. 一般自己的LDAP服务不在集群上运行,所以需要开启Knox访问公网LDAP服务的端口,如:10389。参考8443端口的开启步骤,选择出方向
        注意 为了安全原因,这里设置的授权对象必须是您的Knox所在集群的公网IP,禁止使用 0.0.0.0/0

开始访问 Knox

  • 使用 E-MapReduce 快捷链接访问
    1. 登录阿里云 E-MapReduce 控制台
    2. 单击对应的集群 ID。
    3. 在左侧导航栏中单击集群服务 > HDFS

      选择相应的服务,如:HDFS,YARN等,本文以HDFS为例。

    4. 单击右上角HDFS的快捷链接。快捷链接
  • 使用集群公网 IP 地址访问
    1. 通过集群详情查看公网 IP。
    2. 在浏览器中访问相应服务的 URL。
      • HDFS UI:https://{集群公网ip}:8443/gateway/cluster-topo/hdfs/
      • Yarn UI:https://{集群公网ip}:8443/gateway/cluster-topo/yarn/
      • SparkHistory UI:https://{集群公网ip}:8443/gateway/cluster-topo/sparkhistory/
      • Ganglia UI:https://{集群公网ip}:8443/gateway/cluster-topo/ganglia/
      • Storm UI:https://{集群公网ip}:8443/gateway/cluster-topo/storm/
      • Oozie UI:https://{集群公网ip}:8443/gateway/cluster-topo/oozie/
    3. 浏览器显示您的链接不是私密链接,是因为 Knox 服务使用了自签名证书,请再次确认访问的是自己集群的 IP、且端口为 8443。单击高级 > 继续前往
    4. 在登录框中输入您在 LDAP 中设置的用户名和密码。

用户权限管理(ACLs)

Knox 提供服务级别的权限管理,可以限制特定的用户,特定的用户组和特定的 IP 地址访问特定的服务,可以参见Apache Knox 授权

示例:

  • 场景:Yarn UI 只允许用户 Tom 访问。
  • 步骤:在集群配置管理中找到 KNOX 的配置管理,找到 cluster-topo 配置,在 cluter-topo 配置的<gateway>...</gateway>标签之间添加 ACLs 代码:
    <provider>
          <role>authorization</role>
          <name>AclsAuthz</name>
          <enabled>true</enabled>
          <param>
              <name>YARNUI.acl</name>
              <value>Tom;*;*</value>
          </param>
    </provider>
    警告 Knox 会开放相应服务的 REST API,用户可以通过各服务的 REST API 操作服务,如:HDFS 的文件添加、删除等。出于安全原因,请务必确保在 ECS 控制台开启安全组 Knox 端口 8443 时,授权对象必须是您的一个有效 IP 地址段,禁止使用 0.0.0.0/0;请勿使用 Knox 安装目录下的 LDAP 用户名和密码作为 Knox 的访问用户。