一、问题背景: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.crttrino.keytrino.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