如何创建兼容Kubernetes 1.25与OpenShift 4.11的Pod部署配置
Kubernetes 1.25与OpenShift 4.11通用Deployment配置方案
问题分析
你遇到的核心矛盾是:OpenShift 4.11的安全上下文约束(SCC)强制要求使用项目专属UID范围[1000640000, 1000649999],而Kubernetes 1.25允许自定义非root用户UID,固定的runAsUser:1000导致配置无法同时适配两个集群。
报错信息翻译
错误创建Pod:pods "testcustom-589767ccd5-" 被禁止:无法通过任何安全上下文约束校验:[provider "anyuid": 禁止:用户或服务账户无法使用,spec.containers[0].securityContext.runAsUser: 无效值:1000:必须在范围 [1000640000, 1000649999] 内,provider "restricted": 禁止:用户或服务账户无法使用,provider "nonroot-v2": 禁止:用户或服务账户无法使用,provider "nonroot": 禁止:用户或服务账户无法使用,provider "privileged": 禁止:用户或服务账户无法使用]
通用Deployment配置
修改核心是移除固定UID/GID配置,让集群自动适配安全规则,同时保留通用安全约束:
apiVersion: apps/v1 kind: Deployment metadata: name: testcustom namespace: ics-e2e-deploy-7887 labels: app: testcustom spec: replicas: 1 selector: matchLabels: app: testcustom template: metadata: labels: app: testcustom spec: containers: - image: busybox name: container-name volumeMounts: - mountPath: /myvolumepath name: pvc-name securityContext: # 若PVC需要特定组权限,可替换为OpenShift项目补充组范围内的值(执行oc describe project查看) # fsGroup: 1000640000 seccompProfile: type: RuntimeDefault allowPrivilegeEscalation: false runAsNonRoot: true # 移除固定runAsUser,让OpenShift自动分配合规UID,K8s适配镜像默认非root用户 # runAsUser: 1000 capabilities: drop: ["ALL"] volumes: - name: pvc-name persistentVolumeClaim: claimName: csi-block-pvc-custom-one
额外说明
- OpenShift专属操作:若部署后仍提示SCC权限问题,给默认服务账户添加
nonrootSCC权限:oc adm policy add-scc-to-user nonroot system:serviceaccount:ics-e2e-deploy-7887:default - PVC权限适配:如果存储卷需要特定组权限,执行
oc describe project ics-e2e-deploy-7887查看Supplemental Groups范围,将fsGroup设置为该范围内的值即可同时兼容两个集群。
内容的提问来源于stack exchange,提问作者ambikanair
相关产品推荐
相关产品推荐

