【Ambari开启Kerberos】Knox 接入 Trino web-ui 解决方案

一、问题背景:Kerberos 开启后 Trino Web UI 发生了什么变化

代码已经提交到github:Ttbigdata

未开启 Kerberos 的情况下,Trino Web UI 使用的是传统的 Form 登录模式,浏览器直接访问即可完成认证并进入 UI 页面。

但在 开启 Kerberos 之后,Trino 的 Web UI 行为会发生本质变化:

  • 认证方式由 FORM → KERBEROS
  • Web UI 强制依赖 SPNEGO
  • 通信协议通常同时升级为 HTTPS

此时,浏览器如果直接访问 Trino Web UI,会发现页面无法正常展示,或者直接返回空白页面。

二、关于浏览器直连 Kerberos Web UI 的现实限制

理论上,浏览器并非完全无法访问 Kerberos Web UI。

只要在客户端安装 MIT Kerberos,并对浏览器进行 SPNEGO 相关配置,访问是可行的。

但在实际环境中,这条路径存在明显限制:

一)主机名的硬性要求

  • Ambari / Trino 的主机名必须是 FQDN 形式(a.b.c)
  • 类似 dev1 / dev2 / dev3 这样的短主机名,即使浏览器配置齐全,访问成功率也极低

二)客户端维护成本过高

  • 每个用户都需要安装 Kerberos 客户端
  • 浏览器需要单独配置 SPNEGO 白名单
  • HTTPS 证书信任、跨域、Cookie 策略问题频繁出现

实际结论

浏览器直连 Kerberos Web UI 不适合作为统一访问方案,尤其是在多用户、生产集群环境中。

三、统一思路:通过 Knox 代理 Trino Web UI

在已经部署 Knox 作为统一安全入口的前提下,引入 Knox 代理 Trino Web UI,是一条更可控的路径。

整体访问模型如下:

复制代码
Browser → Knox → Trino (Kerberos + HTTPS)
  • 浏览器仅访问 Knox
  • Kerberos 认证逻辑由 Knox 承担
  • Trino 仍保持 Kerberos + HTTPS 的安全形态

四、Trino 当前端口与访问现状分析

从 Trino 的服务配置中可以看到,其同时暴露了 HTTP 与 HTTPS 两个端口:

可以明确:

  • HTTP 端口:8380
  • HTTPS 端口:8443

当直接访问:

复制代码
https://dev1:8443

页面呈现为空白,这并不是端口不可达,而是 当前访问主体未通过 Kerberos 认证

五、Trino 侧配置调整(Kerberos + HTTPS)

一)PEM 证书准备

开启 Trino HTTPS 后,必须准备完整的证书文件:

  • trino.crt
  • trino.key
  • trino.pem

其中 trino.pem 用作 Trino HTTPS 的 keystore。

PEM 生成过程可参考:
Trino启动-缺失PEM证书处理

二)config.properties 核心配置

properties 复制代码
coordinator=true

discovery.uri=http://dev1:8380

http-server.http.port=8380

http-server.https.enabled=true

http-server.https.port=8443
http-server.https.keystore.path=/etc/trino/conf/trino.pem

http-server.https.keystore.key=changeit

http-server.authentication.type=KERBEROS

http-server.authentication.krb5.service-name=HTTP

http-server.authentication.krb5.keytab=/etc/security/keytabs/spnego.service.keytab

http.authentication.krb5.config=/etc/krb5.conf

http-server.process-forwarded=true

http-server.log.path=/var/log/trino/http-request.log

internal-communication.https.required=false

internal-communication.shared-secret=trino

node-scheduler.include-coordinator=true

query.max-memory=2GB

query.max-memory-per-node=1GB

spill-enabled=false

spiller-spill-path=/data/trino/spill

plugin.dir=/usr/bigtop/current/trino/plugins

web-ui.authentication.type=KERBEROS

说明
http-server.process-forwarded=true 在 Knox 场景下非常关键,用于正确处理反向代理带来的 Header 信息。
Ambari启动服务时,会自动渲染配置文件,生产环境下我们如何修改呢?可以参考阅读
适用于生产------ Trino启动-配置模板

六、Knox 侧配置:信任 Trino HTTPS

一)gateway-site.xml

properties 复制代码
gateway.httpclient.truststore.password.alias=trino-httpclient-truststore-pwd
gateway.httpclient.truststore.path=/usr/bigtop/current/knox-server/data/security/keystores/trino-trust.jks
gateway.httpclient.truststore.type=JKS

二)Topology 中新增 Trino UI Service

xml 复制代码
<service>
    <role>TRINOUI</role>
    <url>http://dev1:8380</url>
</service>

七、【关键步骤】构建 truststore 与 Credential Store

一)导入 Trino 证书

bash 复制代码
MASTER=$(sudo -u knox cat /usr/bigtop/current/knox-server/data/security/master)

sudo keytool -importcert -alias trino-dev1 \
  -file /etc/trino/conf/trino.crt \
  -keystore /usr/bigtop/current/knox-server/data/security/keystores/trino-trust.jks \
  -storepass "$MASTER" \
  -noprompt

二)创建 alias

bash 复制代码
sudo -u knox /usr/bigtop/current/knox-server/bin/knoxcli.sh create-alias \
  trino-httpclient-truststore-pwd --cluster __gateway --value "$MASTER"

查看:

bash 复制代码
sudo -u knox /usr/bigtop/current/knox-server/bin/knoxcli.sh list-alias \
  --cluster __gateway

温馨提示

完成所有操作后,需要 重启 knox服务

八、通过 Knox 访问 Trino Web UI

点击 Knox 页面中的 Trino 入口后,即可进入 Trino Web UI:

九、Trino 474 与 Knox 2.1.0 的适配说明

当前使用的 Trino 版本为 474 ,而 Knox 2.1.0 默认并未内置 Trino 的 UI 资源与定义。

因此需要额外进行适配,包括:

  • 增加 Trino UI 图标
  • 补充 Service 定义
  • 调整前端资源路径

适配细节可参考:
Knox 2.1.0 适配 Trino 474

相关推荐
TTBIGDATA14 分钟前
【Knox编译】xmlsectool 依赖缺失问题解析
大数据·hadoop·ambari·hdp·kerberos·knox·bigtop
天远Date Lab17 分钟前
Python实战:对接天远数据手机号码归属地API,实现精准用户分群与本地化运营
大数据·开发语言·python
TechubNews36 分钟前
2026 年观察名单:基于 a16z「重大构想」,详解稳定币、RWA 及 AI Agent 等 8 大流行趋势
大数据·人工智能·区块链
王正南41 分钟前
kali-linux 虚拟机连接安卓模拟器
android·linux·运维·虚拟机连接模拟器·安卓模拟器,linux虚拟机
三不原则1 小时前
故障案例:容器启动失败排查(AI运维场景)——从日志分析到根因定位
运维·人工智能·kubernetes
吳所畏惧1 小时前
Linux环境/麒麟V10SP3下离线安装Redis、修改默认密码并设置Redis开机自启动
linux·运维·服务器·redis·中间件·架构·ssh
yueguangni1 小时前
sysstat 版本 10.1.5 是 CentOS 7 的默认版本,默认情况下确实不显示 %wait 字段。需要升级到新版sysstat
linux·运维·centos
BlockWay1 小时前
WEEX 成为 LALIGA 西甲联赛香港及台湾地区官方区域合作伙伴
大数据·人工智能·安全
funfan05172 小时前
【运维】MySQL数据库全量备份与恢复实战指南:从入门到精通
运维·数据库·mysql
-dcr2 小时前
49.python自动化
运维·python·自动化