【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

相关推荐
starzy19909 小时前
SparkStreaming 之 Direct 模式深度剖析
大数据·spark
翼龙云_cloud9 小时前
阿里云国际渠道代理商:如何在ECS上部署Flask应用?
运维·数据库·阿里云·flask·云计算
金立基包装胶水9 小时前
纸袋热封频繁不良,先排查胶料这一堆问题
大数据·笔记·其他
GGG76610 小时前
Python 运维自动化:psutil+IPy 系统与网络信息采集深度实战
运维·python·云原生·pip
可乐鸡翅yeah_10 小时前
个人 / 外包流媒体项目交付实战,M3U8 验收与问题闭环完整工作流
运维·网络·python·低代码·django·m3u8·在线播放
St_rive10 小时前
移动端自动化环境搭建与准备
运维·自动化
VALENIAN瓦伦尼安教学设备10 小时前
设备状态检测振动分析实训台案例分析
大数据·数据库·人工智能·嵌入式硬件·算法
INNOVIX稳石机器人11 小时前
稳石500强实战验证:从人工仓储迈向AI自主智造,给出仓储自动化升级标准答案
运维·人工智能·自动化
飞飞传输11 小时前
国产化 MOVEit 替代:文件传输架构与安全能力深度解读
大数据·运维·安全
LONGZETECH11 小时前
低空经济背景下:五组核心数据拆解无人机职业教育的机遇与实训破局
大数据·人工智能·系统架构·无人机