如何为RKE2安全策略添加Root Pod或特定命名空间例外?
解决方案:为单个命名空间开放Root运行权限(无需禁用全局安全策略)
完全可以不用禁用全局安全策略,只针对目标命名空间配置例外规则即可,具体操作分两种集群配置场景:
场景1:集群使用PodSecurity Admission(RKE2 v1.25+ / K8s 1.25+默认启用)
PodSecurity Admission通过命名空间标签管控Pod安全规则,privileged级别允许以Root身份运行Pod。只需给目标命名空间添加对应标签:
- 给目标命名空间打上特权级别的强制/警告/审计标签:
kubectl label namespace <你的命名空间名称> pod-security.kubernetes.io/enforce=privileged kubectl label namespace <你的命名空间名称> pod-security.kubernetes.io/warn=privileged kubectl label namespace <你的命名空间名称> pod-security.kubernetes.io/audit=privileged
enforce:强制应用privileged规则,允许该命名空间内的Pod以Root运行warn:对不符合其他严格规则的Pod发出警告(可选但建议添加)audit:记录不符合规则的Pod操作日志(可选但建议添加)
- 重新部署你的Pod,原有的
securityContext配置无需修改:
securityContext: runAsUser: 0 runAsGroup: 0
场景2:集群使用旧版PodSecurityPolicy(PSP,RKE2旧版本可能采用)
如果集群仍在使用已弃用的PSP,需创建允许Root运行的PSP并绑定到目标命名空间的ServiceAccount:
- 创建允许Root运行的PSP资源:
apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: allow-root-psp spec: privileged: false # 若无需特权模式保持false,需要则设为true allowPrivilegeEscalation: true runAsUser: rule: 'RunAsAny' # 允许任意用户(包括Root) runAsGroup: rule: 'RunAsAny' seLinux: rule: 'RunAsAny' supplementalGroups: rule: 'RunAsAny' fsGroup: rule: 'RunAsAny' volumes: - '*' # 可根据Pod实际需求限制卷类型,比如只允许configMap、emptyDir等
执行命令应用:
kubectl apply -f allow-root-psp.yaml
- 创建ClusterRole以授权使用该PSP:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: psp:allow-root rules: - apiGroups: ['policy'] resources: ['podsecuritypolicies'] verbs: ['use'] resourceNames: ['allow-root-psp']
执行命令应用:
kubectl apply -f psp-clusterrole.yaml
- 将ClusterRole绑定到目标命名空间的默认ServiceAccount(或Pod使用的特定ServiceAccount):
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: psp:allow-root-binding namespace: <你的命名空间名称> roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: psp:allow-root subjects: - kind: ServiceAccount name: default namespace: <你的命名空间名称>
执行命令应用:
kubectl apply -f psp-rolebinding.yaml
完成后,目标命名空间内的Pod即可正常以Root身份启动,其他命名空间仍受原有安全策略约束。
内容的提问来源于stack exchange,提问作者IT_User
相关产品推荐
相关产品推荐

