AWS部署Openshift与沙箱环境SCC配置差异及Restricted SCC绑定方法
问题1:Sandbox OpenShift环境触发报错的配置差异
OpenShift公共Sandbox和自行部署的AWS OpenShift核心差异在SCC的绑定规则和安全策略收紧程度:
- 公共Sandbox作为面向公众的托管测试环境,对所有普通用户命名空间下的
defaultServiceAccount(SA)仅绑定了Restricted SCC,且该SCC被设置为最高优先级,没有其他更高权限SCC可供默认SA使用。 - Restricted SCC强制两条规则:一是Pod运行UID为集群给命名空间分配的随机高UID(无对应容器内系统用户),二是容器运行GID强制为
0(root组)。library/cassandra镜像启动时会校验运行身份,检测到所属组为root组,就会触发你看到的报错:
"Running Cassandra as root user or group is not recommended - please start Cassandra using a different system user. If you really want to force running Cassandra as root, use -R command line option."
- 你自行在AWS部署的OpenShift默认没有做上述安全收紧,默认SA可以优先使用
nonroot、restricted-v2这类允许使用镜像内置用户/自定义组的SCC,Cassandra可以用内置的cassandra用户(UID 999,GID 999)正常启动,不会触发身份校验报错。
问题2:AWS部署的OpenShift配置默认SA关联Restricted SCC的操作步骤
注意:该配置会强制所有匹配规则的Pod使用Restricted SCC规则运行,会影响依赖非随机UID、非root组运行的镜像,操作前需评估业务兼容性。
单命名空间配置
如果仅需要给指定命名空间的默认SA绑定Restricted SCC,执行以下操作:
- 执行绑定命令,替换
<目标命名空间>为实际命名空间名称:oc adm policy add-scc-to-user restricted -z default -n <目标命名空间> - 验证配置:在对应命名空间启动测试Pod,查看分配的SCC:
oc run test-cassandra --image=library/cassandra --restart=Never -n <目标命名空间> oc get pod test-cassandra -o yaml | grep openshift.io/scc
输出为restricted即为配置生效。
全局所有命名空间配置
如果需要给集群所有命名空间的默认SA都绑定Restricted SCC,执行以下操作:
- 调整Restricted SCC的优先级,设置为高于其他默认SCC(默认其他SCC优先级多为10及以下,此处设置为20即可):
oc patch scc restricted --type=merge -p '{"priority": 20}'
若集群版本为4.11及以上,默认使用restricted-v2作为最新受限SCC,将上述命令中的scc restricted改为scc restricted-v2即可。 - 批量给所有现有命名空间的default SA绑定Restricted SCC:
for ns in $(oc get ns -o name | cut -d/ -f2); do oc adm policy add-scc-to-user restricted -z default -n $ns; done - 配置自动给新创建的命名空间的default SA绑定Restricted SCC,可通过Namespace Configuration、Kyverno或OpenShift GitOps等配置同步机制实现,无需手动操作新建命名空间。
内容的提问来源于stack exchange,提问作者Rad4
相关产品推荐
相关产品推荐

