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

前提条件

已创建E-MapReduce集群,并且选择了Knox服务。详情请参见创建集群

准备工作

  • 设置安全组访问:
    1. 获取您当前设备的公网访问IP地址。

      为了安全的访问集群组件,在设置安全组策略时,推荐您只针对当前的公网访问IP地址开放。获取您当前公网访问IP地址的方法是,访问ip.taobao.com,然后在左下角即可查看您当前的公网访问IP地址。

    2. 添加8443端口:
      1. 在集群详情页面的网络信息区域,查看网络类型,单击安全组ID链接。
      2. 单击添加安全组规则
      3. 端口范围填写8443/8443
      4. 授权对象填写步骤a中获取的公网访问IP地址。
      5. 单击确定
    注意
    • 为防止被外部的用户攻击导致安全问题,授权对象禁止填写为0.0.0.0/0
    • 如果您创建集群时,没有挂载公网IP,可以在ECS控制台为该ECS实例添加公网IP。添加成功后,返回EMR控制台,在集群管理下的主机列表页面,单击同步主机信息可以立即同步主机信息。
    • Knox节点新挂载公网IP后,需要提交工单处理,进行域名和公网IP的绑定操作。
  • 设置Knox用户

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

    • 使用集群中的LDAP服务

      方式一(推荐)

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

      方式二 :
      1. SSH登录到集群上,详细步骤请参见使用SSH连接主节点
      2. 准备您的用户数据,例如Tom。
        编辑users.ldif文件。
        su knox
        cd /usr/lib/knox-current/templates  
        vi users.ldif

        设置文件中所有的emr-guest替换为Tom,将EMR GUEST替换为Tom,设置setPassword的值为您自己的密码。

      3. 导入用户数据至LDAP。
        su knox
        cd /usr/lib/knox-current/templates
        sh ldap-sample-users.sh
    • 使用自有LDAP服务的情况:
      1. 在Knox的配置页面,单击cluster-topo页签。
      2. 配置xml-direct-to-file-content中参数。
        配置项 描述
        main.ldapRealm.userDnTemplate 设置为您的用户DN模板。
        main.ldapRealm.contextFactory.url 设置为您的LDAP服务器域名和端口。
        cluster-topo
      3. 单击右上角的保存
      4. 确认修改对话框中,配置各项参数,单击确定
      5. 单击右上角的操作 > 重启 Knox
      6. 执行集群操作对话框中,配置各项参数,单击确定

        确认对画框中,单击确定

      7. 开启Knox访问公网LDAP服务的端口,例如10389。

        您可以参见8443端口的开启步骤,选择出方向,开启10389端口。

访问Knox的Web UI

您可以使用Knox账号访问HDFS、YARN、Spark和Ganglia等Web UI页面。

  • 使用E-MapReduce链接访问:
    1. 已通过主账号登录阿里云E-MapReduce控制台
    2. 在顶部菜单栏处,根据实际情况选择地域(Region)和资源组
    3. 单击上方的集群管理页签。
    4. 集群管理页面,单击集群右侧的详情
    5. 在左侧导航栏,单击访问链接与端口
    6. 访问链接与端口页面,单击服务所在行的链接。
  • 使用集群公网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/

用户权限管理(ACLs)

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

示例如下:
  • 场景:YARN UI只允许用户Tom访问。
  • 操作步骤:
    1. 在Knox的配置页面,单击cluster-topo页签。
    2. 配置xml-direct-to-file-content中参数。
      <gateway>...</gateway>标签之间添加ACLs代码。
      <provider>
            <role>authorization</role>
            <name>AclsAuthz</name>
            <enabled>true</enabled>
            <param>
                <name>YARNUI.acl</name>
                <value>Tom;*;*</value>
            </param>
      </provider>
    3. 单击右上角的保存
    4. 确认修改对话框中,配置各项参数,单击确定
    5. 单击右上角的操作 > 重启 Knox
    6. 执行集群操作对话框中,配置各项参数,单击确定

      确认对画框中,单击确定

    警告 Knox会开放对应服务的REST API,您可以通过各服务的REST API操作服务。例如:HDFS文件的添加、删除等操作。出于安全原因,请勿使用Knox安装目录下的LDAP用户名和密码作为Knox的访问用户。