美文网首页玩转大数据js css htmlJava
Zeppelin Kerberos 环境多租户

Zeppelin Kerberos 环境多租户

作者: AlienPaul | 来源:发表于2022-08-26 09:06 被阅读0次

    简介

    本篇主要讲解Zeppelin LDAP Kerberos HDP集群多租户。

    经过验证,目前情况下Zeppelin LDAP多租户在非Kerberos集群可完美工作(参见Flink Zeppelin Hudi Hive 整合环境配置和使用)。但是在Kerberos集群多租户仍存在一些不完善之处。目前情况是:

    • 使用Zeppelin管理员/最高权限用户可自动进行Kerberos认证,Shell,Spark,Flink解析器工作正常。
    • 使用租户账户登录,Zeppelin采用认证为管理员principal,提交作业时候代理成租户的方式,Spark解析器工作正常,Shell和Flink解析器出现权限问题无法启动。

    希望本篇能够抛砖引玉。欢迎大家提出完美的解决方案。本篇不定期更新。

    参考文献

    Zeppelin User impersonation

    环境配置

    下面例子中采用Zeppelin的服务启动/管理账户为zeppelin。租户账户为paul。

    必须的配置和检查的内容如下:

    • LDAP(如果使用的话)和Linux中创建zeppelin用户。所有租户都通过zeppelin用户提交作业。
    • 租户账户必须存在对应的Linux用户。
    • 配置了zeppelin服务启动用户向租户账户的ssh免密。
    • 需要通过Ranger赋予zeppelin用户的HDFS访问权限和Yarn队列的提交权限。
    • Kerberos创建zeppelin用户对应的principal和keytab。
    • 配置并验证Hadoop的auth_to_local
    • Hadoop中配置zeppelin的proxy。

    LDAP/Linux创建管理员和租户账户

    在Linux中执行:

    # 创建zeppelin用户并配置密码
    useradd zeppelin
    passwd zeppelin
    # 创建paul用户并配置密码
    useradd paul
    passwd paul
    # 配置zeppelin用户到paul的ssh免密
    su zeppelin
    ssh-keygen -t rsa
    ssh-copy-id paul@hostname
    

    LDAP创建管理员/租户账户推荐使用Apache Directory Studio完成。或者在Linux中创建用户之后,使用migrationtools迁移用户到LDAP。具体做法参见OpenLDAP 安装配置和使用)

    Ranger赋予zeppelin用户HDFS目录和Yarn队列提交权限

    这一部通过Ranger组件来完成赋权。由于zeppelin是管理员账户,需要赋予较大的权限,否则会遇到作业执行权限不足等问题。我们可以赋予zeppelin用户和HDFS集群yarn用户相同的权限。赋权操作可以通过Ranger图形界面完成,不再赘述。

    Kerberos创建zeppelin的principal和keytab

    在kadmin所在服务器执行kadmin.local,然后执行如下命令:

    addprinc zeppelin@PAULTECH.COM
    
    ktadd -k /etc/security/keytabs/zeppelin.keytab zeppelin@PAULTECH.COM
    

    其中PAULTECH.COM为集群Kerberos的realm。执行时候替换为真实值。

    配置完毕后执行:

    kinit -kt /etc/security/keytabs/zeppelin.keytab zeppelin@PAULTECH.COM
    klist
    

    验证是否可以成功认证。

    配置并验证Hadoop的auth_to_local

    该配置项名为hadoop.security.auth_to_local。它定义了一系列规则,决定如何将Kerberos的principal名称映射为Hadoop的用户名。配置方法较为复杂,参见Auth-to-local Rules Syntax - Cloudera Community - 245316。一般情况下默认的配置是可以满足要求的。可通过如下命令验证用户名转换逻辑是否正确:

    $ hadoop org.apache.hadoop.security.HadoopKerberosName zeppelin@PAULTECH.COM
    Name: zeppelin@PAULTECH.COM to zeppelin
    

    输出结果表明将zeppelin@PAULTECH.COM转换成了zeppelin,符合我们的要求。

    配置zeppelin的用户代理

    Hadoop core-site.xml增加配置:

    <property>
      <name>hadoop.proxyuser.zeppelin.groups</name>
      <value>*</value>
    </property>
    <property>
      <name>hadoop.proxyuser.zeppelin.users</name>
      <value>*</value>
    </property>
    <property>
      <name>hadoop.proxyuser.zeppelin.hosts</name>
      <value>*</value>
    </property>
    

    允许zeppelin模拟任意机器上的任意用户组的任意用户提交任务。当然也可以根据实际情况加以限制。

    Zeppelin配置

    环境配置完毕后接下来开始Zeppelin的配置。

    zeppelin-site.xml文件添加:

    <property>
      <name>zeppelin.server.kerberos.keytab</name>
      <value>/etc/security/keytabs/zeppelin.keytab</value>
      <description>keytab for accessing kerberized hdfs</description>
    </property>
    
    <property>
      <name>zeppelin.server.kerberos.principal</name>
      <value>zeppelin@PAULTECH.COM</value>
      <description>principal for accessing kerberized hdfs</description>
    </property>
    

    然后Zeppelin中用到的解析器需要配置impersonation。参见Flink Zeppelin Hudi Hive 整合环境配置和使用或官网Apache Zeppelin 0.10.1 Documentation: Impersonation

    Interpreter配置

    这一章我们分别配置Shell,Spark和Flink的interpreter。

    Shell interpreter

    Shell interpreter的Kerberos认证需要配置:

    • zeppelin.shell.auth.type: KERBEROS
    • zeppelin.shell.keytab.location: /etc/security/keytabs/zeppelin.keytab
    • zeppelin.shell.principal: zeppelin@PAULTECH.COM

    完成这些认证配置后,Shell interpreter在执行shell命令之前,会自动为我们做kinit操作。

    我们验证下配置是否生效。使用zeppelin管理员用户登录Zeppelin后执行:

    klist
    

    可以发现已认证成功。

    存在问题:使用其他租户登录(例如paul)执行会报错。Shell interpreter启动异常,提示没有权限。

    Spark interpreter

    需要配置:

    • SPARK_HOME
    • spark.master: yarn
    • spark.submit.deployMode: client

    spark.submit.deployMode配置cluster会出现IP地址NumberFormatException问题。

    无需再额外配置认证相关项目。

    接下来我们验证功能。使用zeppelin用户登录可以成功提交任务。

    使用租户paul登录也可以提交任务。提交任务成功后,进入Yarn管理页面可以发现运行作业的用户为paul而不是zeppelin。Spark interpreter使用了--proxy-user参数,让zeppelin用户代理paul用户。目前功能的实现是本篇3个interpreter中较为完美的。但存在的问题是尽管作业以paul用户执行,但是拥有的权限和zeppelin用户相同。

    Flink interpreter

    Flink interpreter无需额外的认证配置。Flink环境相关的配置项参见:Flink Zeppelin Hudi Hive 整合环境配置和使用

    经过验证发现,使用zeppelin用户登录可以成功提交任务。

    然而使用paul租户登录无法提交任务,提示没有权限。

    相关文章

      网友评论

        本文标题:Zeppelin Kerberos 环境多租户

        本文链接:https://www.haomeiwen.com/subject/qzrtnrtx.html