如何在Kubernetes中配置PrestoDB内部通信及HTTPS认证
Kubernetes环境PrestoDB HTTPS及密码认证配置指南
一、证书需覆盖的域名说明
你当前使用K8s内部服务名作为发现地址,证书的SAN字段必须包含以下两类必选地址,避免内部通信校验失败:
- Coordinator服务短域名:
prestodb-coordinator-service - Coordinator服务完整FQDN:
prestodb-coordinator-service.<部署命名空间>.svc.cluster.local - 可选:如果需要从集群外访问Presto,还需要添加对外暴露的Ingress域名、LoadBalancer/NodePort对应的节点IP/外部IP
二、完整配置步骤
1. 签发符合要求的证书
可以使用自签证书或者企业内部CA签发证书,确保证书SAN字段覆盖上述所有域名。如果使用JKS格式的密钥库,需要同步生成keystore和truststore文件;如果使用PEM格式证书,直接保留crt、key和根CA证书文件即可。
2. 凭证存入K8s资源
将证书、密钥、密码认证文件存入K8s的Secret或ConfigMap,避免敏感信息明文配置:
- 存储TLS凭证命令示例:
kubectl create secret generic presto-tls-secret --from-file=keystore.jks=./keystore.jks --from-file=truststore.jks=./truststore.jks --from-literal=keystore-pass=<你的密钥库密码> --from-literal=truststore-pass=<你的信任库密码> -n <部署命名空间> - 生成密码文件并存储:首先用
htpasswd -Bc presto-passwd.db <自定义用户名>命令生成加密的密码文件,再执行kubectl create secret generic presto-auth-secret --from-file=presto-passwd.db=./presto-passwd.db -n <部署命名空间> - 将上述两个Secret挂载到所有Coordinator和Worker Pod的
/etc/presto/secret路径下
3. 修改Presto核心配置
3.1 公共配置(Coordinator+Worker均需配置)
在config.properties中添加以下配置:
# 开启HTTPS及内部通信加密 http-server.https.enabled=true http-server.https.port=8443 http-server.https.keystore.path=/etc/presto/secret/keystore.jks http-server.https.keystore.key=${ENV:KEYSTORE_PASS} internal-communication.https.required=true internal-communication.https.truststore.path=/etc/presto/secret/truststore.jks internal-communication.https.truststore.key=${ENV:TRUSTSTORE_PASS} # 修改发现地址为HTTPS协议 discovery.uri=https://prestodb-coordinator-service:8443
在Pod环境变量中注入Secret中存储的密钥库密码,避免明文泄露。
如果你使用PEM格式的TLS证书,无需转换为JKS格式,直接替换为Presto支持的PEM证书路径配置项即可。
3.2 Coordinator额外配置
在Coordinator的配置目录下新增password-authenticator.properties文件:
password-authenticator.name=file file.password-file=/etc/presto/secret/presto-passwd.db
4. 功能验证
Pod启动正常后,执行以下命令验证认证配置生效:presto --server https://prestodb-coordinator-service:8443 --user <你设置的用户名> --password --truststore-path ./truststore.jks
输入密码后如果可以正常进入Presto交互终端,说明配置生效。
内容的提问来源于stack exchange,提问作者Rubens Sôto
相关产品推荐
相关产品推荐

