You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复K3s集群中GitLab的Secrets损坏问题

修复GitLab CipherError及Secrets检测失败问题

核心原因

出现OpenSSL::Cipher::CipherError和gitlab-rake gitlab:doctor:secrets检测失败,本质是当前GitLab实例使用的加密密钥(如secret_key_base、db_key_base),和数据库/Redis中存储的加密数据所用密钥不一致。常见于重新部署时密钥丢失或被替换,导致旧加密数据无法解密。

修复步骤

1. 找回或确认正确的加密密钥

GitLab的加密密钥默认存于部署目录的gitlab-secrets.json(新版本)或secrets.yml(旧版本)中。在K3s环境下,先进入GitLab主Pod查看:

# 进入GitLab Pod(替换成你的Pod名和命名空间)
kubectl exec -it <gitlab-pod-name> -n <namespace> -- bash
# 查看新版本密钥文件
cat /etc/gitlab/gitlab-secrets.json
# 旧版本查看secrets.yml
cat /opt/gitlab/embedded/service/gitlab-rails/config/secrets.yml

如果密钥文件丢失或错误,优先找回之前部署时的备份密钥——没有备份的话,只能通过重置加密数据解决(会丢失部分敏感配置)。

2. 重置无法解密的加密数据(密钥无法找回时)

重置用户数据

# 进入GitLab Rails控制台
gitlab-rails console
# 遍历用户,重置加密失败的字段
User.find_each do |user|
  begin
    user.encrypted_otp_secret
  rescue OpenSSL::Cipher::CipherError
    user.update!(encrypted_otp_secret: nil, encrypted_otp_secret_iv: nil, encrypted_otp_secret_salt: nil, otp_required_for_login: false)
    puts "已重置用户 #{user.username} 的加密数据"
  end
end

重置项目数据

gitlab-rails console
# 遍历项目,重置加密失败的Runner令牌
Project.find_each do |project|
  begin
    project.runners_token
  rescue OpenSSL::Cipher::CipherError
    project.reset_runners_token!
    puts "已重置项目 #{project.name} 的Runner令牌"
  end
end

重置CI Runner数据

gitlab-rails console
# 遍历Runner,重置加密失败的令牌(重置后需重新注册)
Ci::Runner.find_each do |runner|
  begin
    runner.token
  rescue OpenSSL::Cipher::CipherError
    runner.reset_token!
    puts "已重置Runner #{runner.description} 的令牌,请重新注册该Runner"
  end
end

3. 备份加密密钥(避免重复踩坑)

修复完成后,立刻备份密钥文件到本地:

# 从Pod复制密钥文件到本地(替换成你的Pod名和命名空间)
kubectl cp <gitlab-pod-name>:/etc/gitlab/gitlab-secrets.json ./gitlab-secrets-backup.json -n <namespace>

后续重新部署时,需将这个备份文件挂载到GitLab Pod的对应目录,确保密钥一致。

4. 验证修复结果

执行检测命令确认失败项消除:

gitlab-rake gitlab:doctor:secrets

再测试编辑用户、项目操作,确认不再返回500错误。


内容的提问来源于stack exchange,提问作者Andre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:22:33