Kyuubi 认证机制中同时启用 KERBEROS 和 LDAP 的问题分析
在 Apache Kyuubi 项目中,当尝试同时启用 KERBEROS 和 LDAP 两种认证方式时,系统会出现认证失败的问题。这个问题主要影响 Kyuubi 1.9.0 和 1.9.1 版本,表现为客户端无法通过 Zookeeper 发现服务并与 Thrift 服务器建立连接。
问题现象
当管理员在 Kyuubi 服务器配置中同时设置 kyuubi.authentication=KERBEROS,LDAP 时,客户端连接会出现以下错误:
- 用户执行
kinit user01命令进行 Kerberos 认证 - 使用 beeline 客户端连接 Kyuubi 服务时
- 系统报错:"Unable to read HiveServer2 configs from Zookeeper"
- 最终错误提示:"Error validating LDAP user: uid=anonymous"
根本原因分析
经过深入排查,发现问题主要出在两个关键组件上:
-
ZookeeperDiscoveryClient 组件:在
addConfsToPublish()方法中,没有正确设置hive.server2.authentication.kerberos.principal参数。这个参数对于 Kerberos 认证至关重要,它指定了服务主体的名称。 -
HiveSiteHS2ConnectionFileParser 组件:在
addKerberos()方法中,同样缺少了对 principal 参数的设置。这个参数需要在客户端连接时提供给服务端进行 Kerberos 认证。
由于这两个关键参数缺失,系统在尝试同时使用两种认证方式时,Kerberos 认证无法正常工作,导致认证流程回退到 LDAP 认证。而 LDAP 认证又无法正确处理匿名用户,最终导致了认证失败。
技术影响
这个问题对系统的影响主要体现在:
- 认证流程中断:客户端无法完成正常的认证流程,导致连接建立失败。
- 功能限制:管理员无法同时利用 Kerberos 和 LDAP 两种认证方式的优势。
- 用户体验下降:用户会收到不明确的错误信息,难以自行排查问题。
解决方案
该问题已在代码提交 8f147f9 中得到修复。修复方案主要包括:
- 在 ZookeeperDiscoveryClient 组件中正确设置 Kerberos 认证所需的所有参数
- 确保 HiveSiteHS2ConnectionFileParser 组件能够完整传递 Kerberos 认证信息
- 完善两种认证方式同时启用时的处理逻辑
对于使用受影响版本的用户,建议升级到包含该修复的版本,或者手动应用相关补丁。
最佳实践
在生产环境中同时启用多种认证方式时,建议:
- 仔细测试每种认证方式的单独工作情况
- 逐步引入多种认证方式,观察系统行为
- 确保所有必要的认证参数都已正确配置
- 监控认证日志,及时发现潜在问题
通过理解这个问题的本质和解决方案,管理员可以更好地规划和管理 Kyuubi 的认证机制,确保系统安全稳定运行。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0218
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0139
uni-appA cross-platform framework using Vue.jsJavaScript09
GLM-5.2智谱开源 GLM-5.2,这是针对长文本任务的最新旗舰模型。相较于前代产品 GLM-5.1,它在长文本任务处理能力上实现了显著飞跃,并且首次在稳定的 100 万 token 上下文中提供这一能力。Jinja00
SwanLab⚡️SwanLab - an open-source, modern-design AI training tracking and visualization tool. Supports Cloud / Self-hosted use. Integrated with PyTorch / Transformers / LLaMA Factory / veRL/ Swift / Ultralytics / MMEngine / Keras etc.Python00
tiny-universe《大模型白盒子构建指南》:一个全手搓的Tiny-UniverseJupyter Notebook03