Ambari 开启kerberos报错add_principal:分析主体时主体的格式不正确怎么解决

发布时间:2021-12-23 18:48:36 作者:柒染
来源:亿速云 阅读:422
# Ambari 开启Kerberos报错add_principal:分析主体时主体的格式不正确怎么解决

## 问题背景

在使用Ambari管理Hadoop集群时,开启Kerberos认证是保障集群安全的重要步骤。然而在执行`Enable Kerberos`向导过程中,许多用户会遇到以下关键报错:

add_principal: 分析主体时主体的格式不正确 (Malformed representation of the principal)


这个错误通常出现在**创建服务主体(Service Principal)**阶段,表明KDC(Key Distribution Center)无法识别Ambari提交的主体名称格式。本文将深入分析该问题的根源,并提供多种解决方案。

## 一、错误原因深度分析

### 1.1 主体(Principal)的基本格式要求

Kerberos主体标准格式为:

primary/instance@REALM

其中:
- `primary`:服务主名称(如hdfs、yarn等)
- `instance`:完全限定主机名(FQDN)
- `REALM`:大写的Kerberos领域

**典型正确示例**:

hdfs/namenode01.example.com@EXAMPLE.COM


### 1.2 Ambari生成主体的机制

Ambari会根据以下配置自动生成主体:
- `krb5-conf`中定义的`default_realm`
- 服务组件所在主机的主机名
- 服务类型(hdfs、yarn等)

### 1.3 常见格式错误场景

| 错误类型 | 错误示例 | 问题说明 |
|---------|---------|---------|
| 领域大小写错误 | hdfs/node1@example.com | 领域名未大写 |
| 主机名非FQDN | hdfs/node1@EXAMPLE.COM | 缺少域名后缀 |
| 特殊字符未转义 | hdfs/node_1@EXAMPLE.COM | 下划线需转义 |
| 领域配置缺失 | hdfs/node1.example.com | 缺少@REALM部分 |

## 二、解决方案大全

### 2.1 基础检查步骤

#### 步骤1:验证/etc/krb5.conf配置
```ini
[libdefaults]
 default_realm = EXAMPLE.COM
 
[realms]
 EXAMPLE.COM = {
  kdc = kdc-server.example.com
  admin_server = kdc-server.example.com
 }

步骤2:检查主机名解析

# 确保返回FQDN
hostname -f
# 验证正向解析
nslookup $(hostname -f)
# 验证反向解析
nslookup $(hostname -i)

2.2 高级解决方案

方案A:手动预创建主体(推荐)

  1. 在KDC服务器上手动创建正确的主体:
kadmin.local -q "addprinc -randkey hdfs/$(hostname -f)@EXAMPLE.COM"
  1. 在Ambari中启用Kerberos时选择:

方案B:修正Ambari主机名配置

  1. 检查Ambari主机名设置:
ambari-server setup --verbose
  1. 更新所有节点的主机名映射:
# 在/etc/hosts中添加
192.168.1.10 node1.example.com node1

方案C:自定义Kerberos描述符

  1. 创建自定义JSON描述符:
{
  "services" : [
    {
      "name" : "HDFS",
      "components" : [
        {
          "name" : "NAMENODE",
          "principals" : [
            {
              "principal" : "hdfs/_HOST@EXAMPLE.COM",
              "keytab" : "/etc/security/keytabs/nn.service.keytab"
            }
          ]
        }
      ]
    }
  ]
}
  1. 通过Ambari API上传:
curl -u admin:admin -H "X-Requested-By: ambari" -X POST \
  http://ambari-server:8080/api/v1/clusters/CLUSTER_NAME/artifacts/kerberos_descriptor \
  -d @custom_descriptor.json

2.3 疑难问题处理

案例1:多领域(Multi-Realm)环境

当集群跨多个Kerberos领域时,需在krb5.conf中明确定义:

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM
 .test.com = TEST.COM
 test.com = TEST.COM

案例2:自定义主体命名规则

通过修改Ambari Server的kerberos-env配置:

# 在Ambari Web UI > Services > Kerberos > Configs
principal_name_rules=DEFAULT
principal_name_rules=RULE:[1:\$${0}.*]
principal_name_rules=RULE:[2:\$${0}.*]

三、验证与测试

3.1 验证主体创建

# 列出所有主体
kadmin.local -q "list_principals"

# 获取特定主体的票据
kinit -k -t /path/to/keytab hdfs/node1.example.com@EXAMPLE.COM

3.2 测试服务功能

# HDFS示例
hdfs dfs -ls /
# 查看票据缓存
klist -e

四、预防措施

  1. 环境预检查清单

    • [ ] 所有节点时间同步(NTP配置)
    • [ ] 主机名解析一致
    • [ ] KDC服务可访问
    • [ ] 领域名称统一
  2. Ambari最佳实践

    • 在非生产环境先测试Kerberos配置
    • 备份所有keytab文件
    • 记录所有手动操作步骤

五、总结

当遇到”add_principal:分析主体时主体的格式不正确”错误时,本质上需要关注三个核心要素: 1. 主体格式合规性:严格遵循primary/instance@REALM结构 2. 环境一致性:确保所有节点的主机名、领域配置一致 3. 创建权限:Ambari需要有足够的KDC管理权限

通过本文提供的多种解决方案,大多数情况下可以快速定位并解决问题。建议优先采用”手动预创建主体”方案,这种方式虽然需要额外步骤,但能提供最大的可控性。

重要提示:在生产环境操作前,务必在测试环境验证所有步骤,并确保有完整的回滚方案。

参考资料

  1. Ambari官方Kerberos文档
  2. MIT Kerberos管理员指南
  3. Hadoop安全部署最佳实践

”`

这篇文章共计约2000字,采用Markdown格式编写,包含: 1. 深度问题分析 2. 多维度解决方案 3. 实际案例说明 4. 验证与预防措施 5. 结构化排版(表格、代码块、列表等)

可根据实际环境情况调整具体参数(如领域名、主机名等)。

推荐阅读:
  1. ambari+hdp安装
  2. Ambari Server 服务迁移

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ambari kerberos

上一篇:Snowflake的独特技术优势是什么

下一篇:linux中如何删除用户组

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》