OpenShift集群部署Helm Chart触发安全上下文约束报错求解决方案
OpenShift部署MongoDB Helm Chart安全上下文报错解决方案
报错说明
在OpenShift集群中通过Helm Chart部署MongoDB时触发安全上下文约束(SCC)校验不通过报错,报错信息如下:
is forbidden: unable to validate against any security context constraint: [provider restricted: .spec.securityContext.fsGroup: Invalid value: []int64{999}: 999 is not an allowed group spec.containers[0].securityContext.runAsUser: Invalid value: 999: must be in the ranges: [1000640000, 1000649999]]
关联配置
Deployment模板片段
spec: serviceAccountName: {{ template "mongodb.fullname" . }} securityContext: runAsNonRoot: true runAsUser: {{ .Values.mongo.securityContext.uid | default 999 }} runAsGroup: {{ .Values.mongo.securityContext.gid | default 999 }} fsGroup: {{ .Values.mongo.securityContext.fsGroup | default 999 }}
Values配置的安全上下文参数
securityContext: gid: 999 uid: 999 fsGroup: 999
错误原因
OpenShift默认的restricted安全上下文约束会为每个命名空间自动分配一段唯一的高UID/GID范围,禁止使用自定义的低位UID/GID(如本例的999),避免容器权限逃逸风险。
解决方案
方案一(推荐:符合OpenShift默认安全规则)
直接删除Values中自定义的securityContext配置,或者在部署时覆盖该配置为空,让OpenShift自动为MongoDB容器分配当前命名空间允许范围内的UID/GID,无需修改其他权限配置。
覆盖部署命令示例:
helm install mongodb <你的Chart路径> --set mongo.securityContext=null
方案二(特殊场景需要保留999用户时使用)
为MongoDB绑定的ServiceAccount授权允许使用任意UID的SCC,操作步骤如下:
- 替换命名空间和ServiceAccount名称为实际值,执行绑定命令:
oc adm policy add-scc-to-user anyuid -z <mongodb-serviceaccount-name> -n <部署的命名空间>
- 重新部署Helm Chart即可生效。
注意:该方案会放宽容器权限限制,非必要不建议使用。
内容的提问来源于stack exchange,提问作者gopinath
相关产品推荐
相关产品推荐

