Kubernetes集群中Druid管理员用户非API密钥轮换方案咨询
Druid管理员凭证非API轮换方案(K8s + Vault环境)
以下是几个无需依赖Druid API的凭证轮换方案,适配你的K8s+Vault场景:
1. Vault多版本密钥+Druid配置热加载
- 先在Vault中给管理员密钥开启多版本保留,比如设置
max_versions=3、delete_version_after=48h,确保轮换后旧密钥不会立刻被删除,仍可读取。 - 用Vault Agent Sidecar把新旧版本的密钥分别挂载到Druid Pod的两个目录,比如
/druid/creds/current和/druid/creds/previous。 - 修改Druid的
runtime.properties,配置双密码支持:# 同时加载新旧密码 druid.auth.basic.common.password=file:///druid/creds/current/pass druid.auth.basic.common.backupPassword=file:///druid/creds/previous/pass - 利用Druid支持的文件动态读取特性(部分版本默认会定期检查凭证文件变化),无需API调用,等待集群自动加载双密码配置。
- 确认所有节点都能通过新旧密码认证后,再移除旧密码的挂载和配置项,完成轮换。
2. 临时过渡管理员账号
- 在Vault中创建一个临时的高权限管理员账号,关闭自动轮换,确保凭证稳定。
- 通过
kubectl exec进入Druid Coordinator Pod,用临时账号登录Druid的Web UI(如果启用),直接修改主管理员的密码为Vault生成的新密钥。 - 验证新密钥可用后,立即删除临时账号或重置其密钥,避免安全风险。
3. K8s Secret双凭证滚动更新
- 把Druid的管理员凭证配置为从K8s Secret读取环境变量:
druid.auth.basic.common.username=${DRUID_ADMIN_USER} druid.auth.basic.common.password=${DRUID_ADMIN_PASS} druid.auth.basic.common.oldPass=${DRUID_ADMIN_OLD_PASS} - 当Vault生成新密钥后,先创建包含新旧密钥的临时Secret,更新Druid Deployment,让所有Pod滚动加载双凭证环境变量。
- 待所有Pod完成更新且双密码验证生效后,再将Secret替换为仅包含新密钥,再次滚动更新Druid,移除旧密码配置。
注意事项
- 滚动更新时要设置
maxUnavailable=1,保证集群始终有可用节点,避免服务中断。 - 如果Druid默认不支持双密码,可自定义简单的
BasicAuthenticator扩展,读取多个密码文件/变量进行验证。 - 调整Vault的轮换周期,预留足够的过渡时间,确保旧密钥在集群切换完成前不被销毁。
内容的提问来源于stack exchange,提问作者Aldulea Cristian
相关产品推荐
相关产品推荐

