使用第三方提供的EKS集群无法创建Deployment等资源的问题咨询
问题原因说明
首先可以排除你猜测的两种情况:既不是ECS封禁了公共镜像仓库,也不是第三方EKS提供商未启用公共Docker镜像仓库的访问权限。
本次报错是第三方EKS集群内置了Kyverno准入策略引擎,强制要求所有部署的工作负载必须符合平台预设的安全、资源规范,你通过命令行默认生成的Deployment不满足规则,被准入拦截导致的。
各报错规则说明及修复方案
- 资源请求配置校验不通过
对应策略:edison-platform-policy-disallow-pod-without-resources
平台要求:所有容器必须显式配置CPU、内存的资源请求(requests),除非给工作负载打上AllowContainerWithoutResourcesRequests特殊标签。 - 特权权限校验不通过
对应策略:edison-platform-policy-disallow-privileged-container
平台要求:所有容器的securityContext必须显式设置allowPrivilegeEscalation: false,关闭特权升级权限,除非给工作负载打上AllowPrivilegedEscalation特殊标签。 - 运行用户校验不通过
对应策略:edison-platform-policy-disallow-root-user
平台要求:Pod或容器级别的securityContext必须显式设置runAsNonRoot: true,或者指定非root的运行UID,禁止默认以root身份运行容器,除非给工作负载打上AllowRootUserAccess特殊标签。 - 镜像来源校验不通过
对应策略:edison-platform-policy-disallow-unknown-registries
平台要求:不能直接使用Docker Hub的短镜像名(比如nginx),必须填写平台允许的镜像仓库完整地址。如果平台允许使用Docker Hub镜像,把镜像地址补全为docker.io/library/nginx:对应版本号即可,否则需要咨询提供商获取允许的镜像仓库列表。
符合要求的Deployment示例
你可以参考以下yaml调整配置,修改完成后执行kubectl apply -f <yaml文件名>即可创建:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-depl namespace: comp-dev spec: replicas: 1 selector: matchLabels: app: nginx-depl template: metadata: labels: app: nginx-depl spec: securityContext: runAsNonRoot: true runAsUser: 101 # nginx官方镜像默认非root用户UID containers: - name: nginx image: docker.io/library/nginx:1.25 # 替换为平台允许的镜像地址 resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "200m" memory: "256Mi" securityContext: allowPrivilegeEscalation: false
内容的提问来源于stack exchange,提问作者sandeep.ganage
相关产品推荐
相关产品推荐

