首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

大数据平台搭建利器 Ambari 之 Kerberos 集成之路(3)

大数据平台搭建利器 Ambari 之 Kerberos 集成之路(3)

Ambari Kerberos Descriptor 介绍从上面的介绍中,我们了解了 Ambari Server 如何创建 Principal 和 Keytab,以及如何在 Agent 端获取对应的 Kerberos 信息。这一小节,便介绍下如何在 Ambari 中对一个 Service 定义相关的 Kerberos 参数,而这个定义文件,便称之为 Kerberos Descriptor。
Kerberos Descriptor 是一个 Json 格式的文件,存放于 Service 或者 Stack 的根目录,并命名为 kerberos.json,其包含有 Principal 的名字、Keytab 的路径等 Kerberos 相关的配置。这里需要注意,当一个 Service 通过 Kerberos.json 声明相关的 Kerberos 配置时,其所归属的 Stack 也必须存在 Kerberos.json 文件。换句话说,先要有 Stack 级别的 Kerberos.json,才能有 Service 级别的 Kerberos.json,并且在 Service 级别的配置文件中,又会有 Compoent 级别的区分。下面我们用 Spark 的 kerberos.json 为例,来介绍下该文件。
清单 4.Spark 的 kerbers.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
{
"services": [
{
"name": "SPARK",
"identities": [
{
"name": "/smokeuser"
},
{
"name": "sparkuser",
"principal": {
"value": "${spark-env/spark_user}-${cluster_name}@${realm}",
"type" : "user",
"configuration": "spark-defaults/spark.history.kerberos.principal",
"local_username" : "${spark-env/spark_user}"
},
"keytab": {
"file": "${keytab_dir}/spark.headless.keytab",
"owner": {
"name": "${spark-env/spark_user}",
"access": "r"
},
"group": {
"name": "${cluster-env/user_group}",
"access": ""
},
"configuration": "spark-defaults/spark.history.kerberos.keytab"
}
}
],
"configurations": [
{
"spark-defaults": {
"spark.history.kerberos.enabled": "true"
}
}
],
"components": [
{
"name": "SPARK_JOBHISTORYSERVER",
"identities": [
{
"name": "/HDFS/NAMENODE/hdfs"
}
]
},
{
"name": "SPARK_CLIENT"
}
]
}
]
}




从以上的配置代码中可以看到,Spark 只在 Service 级别定义了一个 sparkuser 段,并配置了 Principal 和 Keytab 等定义。因此,这里我们就先仔细看下 sparkuser 段的配置。该段中配置了 Principal 的名称,由 spark-env 中的 spark_user(默认为 spark)加上 Ambari 的 cluster name 和 Kerberos 的 REALM 名组成。Type 为 user(也可以是 service)。Principal 段和 Keytab 段中的 configuration 标签用于关联该 Service 的配置项参数,从而呈现在 Ambari WEB 中。当在 Ambari 启用 Automated Kerberization 机制的时候,如果已经部署了 Spark,Ambari 会读取 kerberos.json 中的 Principal 和 Keytab 的值,并将其中 value 段的配置关联到 spark-default 中的 spark.history.kerberos.principal 和 spark.history.kerberos.keytab。在 Keytab 字段中,还通过 file 标签配置了 keytab 的存放路径({keytab_dir} 默认为/etc/security/keytabs,可以在启用 Automated Kerberization 的时候更改)。Owner 和 group 配置了文件的用户组权限,这里注意 keytab 一般只能配置为只读权限,否则会有安全问题。另外,在独立的 configuration 段的配置会被增加到该 Service 的 Desired Configuration 信息中。用户也可以在 Compoent 段为 Service 的模块配置不同的 Principal 和 Keytab。在 Service 的 Kerberos.json 文件中,也可以关联其他 Service 的配置,或者关联 Stack 级别的配置。当需要关联的时候,只需要使用字符“/”。例如“/smokeuser”关联的便是 Stack 级别的配置,“/HDFS/NAMENODE/hdfs”则是关联 HDFS 中 namenode 的配置。Kerberos.json 在 Stack 之间以及 Service 版本之间,存在继承关系。不过目前的实现中还不支持部分更新。也就是说 Service 或者 Stack 的新版本,如需要定义一个新的 Kerberos.json 文件,就必须完整重写上一个版本的所有配置。在 Ambari 中启用 Kerberos 之后,我们可以使用 configs.sh 的脚本查看 spark-defaults 的更新,以及 cluster-env 的变化。
图 6. 使用 configs.sh 获得 spark-defaults 的配置项(启用 Kerberos 之后)
返回列表