TT Bigdata TT Bigdata
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件专题

    • 安装指导
    • 开启 Kerberos
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • 实验室

    • VIEW插件
    • JIRA速查
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • APT仓库增量更新
    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Ambari-Metrics
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Kylin V10系列
    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)

JaneTTR

数据酿造智慧,每一滴都是沉淀!
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件专题

    • 安装指导
    • 开启 Kerberos
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • 实验室

    • VIEW插件
    • JIRA速查
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • APT仓库增量更新
    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Ambari-Metrics
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Kylin V10系列
    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)
  • 步步为营

  • 踩坑合集

    • Test Kerberos Client报错:Failed to kinit
    • KERBEROS SERVICE CHECK 报错
    • Ambari开启Kerberos认证加密类型错误
    • [开启Kerberos]-Solr启动失败处理
    • [开启Kerberos]-Kafka启动失败处理
    • Kerberos 客户端模板渲染异常处理
    • Kafka 启动兼容 Kerberos 源码级修改
    • Kerberos 客户端模板渲染异常处理
      • 一、问题背景
      • 二、异常表现与截图
      • 三、问题模板(原始版本)
      • 四、修正版模板(推荐方案)
      • 五、源码差异(diff 对比)
  • 组件安装-Kerberos
  • 踩坑合集
JaneTTR
2025-10-31
目录

Kerberos 客户端模板渲染异常处理源码修改

# 一、问题背景

在 Ambari 部署 Kerberos 的过程中,部分版本可能在生成 krb5.conf 时出现模板渲染异常,导致配置文件内容缺失或不完整。
问题根源来自 krb5_conf.j2 模板缩进与 Jinja2 渲染指令不规范。

# 二、异常表现与截图

模板渲染错误

# 三、问题模板(原始版本)

下方为 Ambari 原始模板 krb5_conf.j2 (位于 ambari-server/src/main/resources/stacks/BIGTOP/3.2.0/services/KERBEROS/properties/),可看到大量 {%- 与 -%} 控制符混用、空格不统一,容易造成渲染出错。

{#
# Licensed to the Apache Software Foundation (ASF)...
#}
[libdefaults]
  #renew_lifetime = 7d
  forwardable = true
  default_realm = {{ realm }}
  ticket_lifetime = 24h
  dns_lookup_realm = false
  dns_lookup_kdc = false
  default_ccache_name = /tmp/krb5cc_%{uid}
  #default_tgs_enctypes = {{ encryption_types }}
  #default_tkt_enctypes = {{ encryption_types }}
  {% if force_tcp %}
  udp_preference_limit = 1
  {% endif %}

{% if domains %}
[domain_realm]
{% for domain in domains.split(',') %}
  {{ domain|trim() }} = {{ realm }}
{% endfor %}
{% endif %}

[logging]
  default = FILE:/var/log/krb5kdc.log
  admin_server = FILE:/var/log/kadmind.log
  kdc = FILE:/var/log/krb5kdc.log

[realms]
  {{ realm }} = {
{% if master_kdc %}
    master_kdc = {{ master_kdc|trim() }}
{% endif %}

{% set _kdc_hosts = kdc_hosts|default('', true)|trim() %}
{% if _kdc_hosts %}
{% set kdc_host_list = _kdc_hosts.split(',') %}
{% if kdc_host_list and kdc_host_list|length > 0 %}
    admin_server = {{ admin_server_host|default(kdc_host_list[0]|trim(), True) }}
{% if kdc_host_list %}
{% if master_kdc and (master_kdc not in kdc_host_list) %}
    kdc = {{ master_kdc|trim() }}
{% endif %}
{% for kdc_host in kdc_host_list %}
{% if kdc_host|trim() %}
    kdc = {{ kdc_host|trim() }}
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% endif %}
  }

{# Append additional realm declarations below #}
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
54
55

问题分析

模板中控制语句缺少统一缩进和空格对齐,导致:

  • 变量 realm、kdc_host_list 等未正常渲染;
  • 部分 for 循环提前结束;
  • 生成文件中 [realms] 段缺少 admin_server 与 kdc 字段。

# 四、修正版模板(推荐方案)

该版本通过调整空格、控制符与循环嵌套层级,彻底修复模板渲染异常。

{#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#}
[libdefaults]
  #renew_lifetime = 7d
  forwardable = true
  default_realm = {{ realm }}
  ticket_lifetime = 24h
  dns_lookup_realm = false
  dns_lookup_kdc = false
  default_ccache_name = /tmp/krb5cc_%{uid}
  #default_tgs_enctypes = {{ encryption_types }}
  #default_tkt_enctypes = {{ encryption_types }}
  {% if force_tcp %}
  udp_preference_limit = 1
  {% endif %}

{% if domains %}
[domain_realm]
{% for domain in domains.split(',') %}
  {{ domain|trim() }} = {{ realm }}
{% endfor %}
{% endif %}

[logging]
  default = FILE:/var/log/krb5kdc.log
  admin_server = FILE:/var/log/kadmind.log
  kdc = FILE:/var/log/krb5kdc.log

[realms]
  {{ realm }} = {
{% if master_kdc %}
    master_kdc = {{ master_kdc|trim() }}
{% endif %}

{% set _kdc_hosts = kdc_hosts|default('', true)|trim() %}
{% if _kdc_hosts %}
{% set kdc_host_list = _kdc_hosts.split(',') %}
{% if kdc_host_list and kdc_host_list|length > 0 %}
    admin_server = {{ admin_server_host|default(kdc_host_list[0]|trim(), True) }}
{% if kdc_host_list %}
{% if master_kdc and (master_kdc not in kdc_host_list) %}
    kdc = {{ master_kdc|trim() }}
{% endif %}
{% for kdc_host in kdc_host_list %}
{% if kdc_host|trim() %}
    kdc = {{ kdc_host|trim() }}
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% endif %}
  }

{# Append additional realm declarations below #}

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

# 五、源码差异(diff 对比)


diff --git a/ambari-server/src/main/resources/stacks/BIGTOP/3.2.0/services/KERBEROS/properties/krb5_conf.j2 b/ambari-server/src/main/resources/stacks/BIGTOP/3.2.0/services/KERBEROS/properties/krb5_conf.j2
--- a/ambari-server/src/main/resources/stacks/BIGTOP/3.2.0/services/KERBEROS/properties/krb5_conf.j2	(revision d993a6d0d350ac64161d3e762e4ddb9d3af0f298)
+++ b/ambari-server/src/main/resources/stacks/BIGTOP/3.2.0/services/KERBEROS/properties/krb5_conf.j2	(revision fbc97535262c3a9e8cf72cd8ffa7c995541649ea)
@@ -18,46 +18,52 @@
 [libdefaults]
   #renew_lifetime = 7d
   forwardable = true
-  default_realm = {{realm}}
+  default_realm = {{ realm }}
   ticket_lifetime = 24h
   dns_lookup_realm = false
   dns_lookup_kdc = false
   default_ccache_name = /tmp/krb5cc_%{uid}
-  #default_tgs_enctypes = {{encryption_types}}
-  #default_tkt_enctypes = {{encryption_types}}
-  {%- if force_tcp %}
+  #default_tgs_enctypes = {{ encryption_types }}
+  #default_tkt_enctypes = {{ encryption_types }}
+  {% if force_tcp %}
   udp_preference_limit = 1
-  {%- endif -%}
+  {% endif %}
+
 {% if domains %}
 [domain_realm]
-{%- for domain in domains.split(',') %}
-  {{domain|trim()}} = {{realm}}
-{%- endfor %}
+{% for domain in domains.split(',') %}
+  {{ domain|trim() }} = {{ realm }}
+{% endfor %}
 {% endif %}
+
 [logging]
   default = FILE:/var/log/krb5kdc.log
   admin_server = FILE:/var/log/kadmind.log
   kdc = FILE:/var/log/krb5kdc.log
 
 [realms]
-  {{realm}} = {
-{%- if master_kdc %}
-    master_kdc = {{master_kdc|trim()}}
-{%- endif -%}
-{%- if kdc_hosts > 0 -%}
-{%- set kdc_host_list = kdc_hosts.split(',')  -%}
-{%- if kdc_host_list and kdc_host_list|length > 0 %}
-    admin_server = {{admin_server_host|default(kdc_host_list[0]|trim(), True)}}
-{%- if kdc_host_list -%}
-{%- if master_kdc and (master_kdc not in kdc_host_list) %}
-    kdc = {{master_kdc|trim()}}
-{%- endif -%}
+  {{ realm }} = {
+{% if master_kdc %}
+    master_kdc = {{ master_kdc|trim() }}
+{% endif %}
+
+{% set _kdc_hosts = kdc_hosts|default('', true)|trim() %}
+{% if _kdc_hosts %}
+{% set kdc_host_list = _kdc_hosts.split(',') %}
+{% if kdc_host_list and kdc_host_list|length > 0 %}
+    admin_server = {{ admin_server_host|default(kdc_host_list[0]|trim(), True) }}
+{% if kdc_host_list %}
+{% if master_kdc and (master_kdc not in kdc_host_list) %}
+    kdc = {{ master_kdc|trim() }}
+{% endif %}
 {% for kdc_host in kdc_host_list %}
-    kdc = {{kdc_host|trim()}}
-{%- endfor -%}
+{% if kdc_host|trim() %}
+    kdc = {{ kdc_host|trim() }}
+{% endif %}
+{% endfor %}
 {% endif %}
-{%- endif %}
-{%- endif %}
+{% endif %}
+{% endif %}
   }
 
 {# Append additional realm declarations below #}

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82

image-20251105194859000

处理完毕需要重新编译

#Ambari#Kerberos#KDC#KERBEROS_SERVICE_CHECK#kinit.real#KDCKerberosOperationHandler#管理员凭证#ACL#krb5.conf#DNS/Realm映射
Kafka 启动兼容 Kerberos 源码级修改

← Kafka 启动兼容 Kerberos 源码级修改

最近更新
01
Ambari开启Kerberos认证加密类型错误 Kylin V10
11-05
02
KERBEROS SERVICE CHECK 报错
11-04
03
Test Kerberos Client报错:Failed to kinit
11-04
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式