玩转大数据js css htmlJava

Zeppelin Kerberos 环境多租户

2022-08-26  本文已影响0人  AlienPaul

简介

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

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

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

参考文献

Zeppelin User impersonation

环境配置

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

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

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认证需要配置:

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

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

klist

可以发现已认证成功。

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

Spark interpreter

需要配置:

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租户登录无法提交任务,提示没有权限。

上一篇 下一篇

猜你喜欢

热点阅读