Kubernetes中Vault从1.6.2升级到1.10.9出现CrashLoopBackOff错误
解决Vault升级后vault-unsealer CrashLoopBackOff权限问题
问题分析
错误日志明确指出:system:serviceaccount:vault:vault 服务账号在 default 命名空间没有访问 secrets 资源的权限,导致unsealer初始化失败。
解决步骤
1. 验证服务账号权限
先确认当前vault服务账号的权限绑定情况:
# 查看vault命名空间下的vault服务账号详情 kubectl describe sa vault -n vault # 搜索所有与vault相关的权限绑定 kubectl get clusterrolebindings,rolebindings -A | grep vault
2. 授予default命名空间的Secret访问权限
创建Role和RoleBinding,允许vault服务账号在default命名空间读取Secret:
创建配置文件 vault-default-secret-rbac.yaml:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: vault-secret-reader rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: default name: vault-default-secret-binding subjects: - kind: ServiceAccount name: vault namespace: vault roleRef: kind: Role name: vault-secret-reader apiGroup: rbac.authorization.k8s.io
执行应用命令:
kubectl apply -f vault-default-secret-rbac.yaml
3. 检查并修正Helm配置(可选)
如果你的vault-test Secret是创建在vault命名空间而不是default,可以调整Helm配置让unsealer在vault命名空间读取Secret,避免跨命名空间权限问题:
helm upgrade vault banzaicloud-stable/vault -n vault \ --set "image.tag=1.10.9" \ --set "unsealer.keystore.k8sSecret.namespace=vault"
4. 重启Pod验证
删除出错的Pod触发重启:
kubectl delete pod vault-0 -n vault
等待Pod重启后检查状态:
kubectl get pods -n vault
内容的提问来源于stack exchange,提问作者Coldalpha
相关产品推荐
相关产品推荐

