OpenShift Origin部署new-app时从私有镜像仓库拉取镜像遇禁止错误
解决OpenShift Origin中私有镜像仓库白名单不生效的问题
从你给出的错误信息来看,核心问题是OpenShift的ImageStreamImport操作仍然认为你的私有仓库registry.test.com不在允许的白名单里,尽管你已经在master-config.yaml中添加了它。下面是几个针对性的解决方案,你可以逐一尝试:
1. 确保master配置修改已生效
修改master-config.yaml后,必须重启OpenShift Master服务才能让配置生效。如果是用oc cluster up启动的单节点集群,执行以下操作:
oc cluster down oc cluster up --image registry.test.com/openshift/origin --skip-registry-check=true
如果是多节点集群,需要重启master组件:
systemctl restart atomic-openshift-master-api atomic-openshift-master-controllers
2. 检查白名单配置的细节
有时候配置格式的小问题会导致白名单不生效:
- 确认
allowedRegistriesForImport中的domainName是否包含正确的端口。如果你的私有仓库使用默认443端口,直接写registry.test.com没问题;如果是自定义端口,需要写成registry.test.com:5000这类格式。 - 尝试给域名加上通配符前缀,比如
*.registry.test.com(如果你的仓库子域名也需要访问的话),不过你的场景里直接写域名应该足够。
3. 绕过ImageStreamImport直接部署镜像
oc new-app默认会尝试创建ImageStream来管理镜像,这一步触发了白名单检查。你可以直接指定用Docker镜像部署,跳过ImageStream的创建:
oc new-app --docker-image=registry.test.com/namespace/cloudera-hadoop-namenode --loglevel=10
或者手动创建DeploymentConfig来部署,这样更直接:
创建一个dc-hadoop.yaml文件:
apiVersion: v1 kind: DeploymentConfig metadata: name: cloudera-hadoop-namenode spec: replicas: 1 selector: app: cloudera-hadoop-namenode template: metadata: labels: app: cloudera-hadoop-namenode spec: containers: - name: cloudera-hadoop-namenode image: registry.test.com/namespace/cloudera-hadoop-namenode:latest imagePullSecrets: - name: my-secret
然后执行:
oc apply -f dc-hadoop.yaml
4. 确保镜像拉取密钥关联到ServiceAccount
你已经创建了my-secret,但需要把它关联到默认的ServiceAccount,这样Pod拉取镜像时才能使用这个密钥:
oc secrets link default my-secret --for=pull
5. 检查OpenShift版本的特殊限制
OpenShift 3.9版本的allowedRegistriesForImport配置可能有一些细节需要注意:
- 确认
imagePolicyConfig下没有其他冲突的配置项,比如denyRegistries是否包含你的私有仓库(不过从错误信息看应该没有)。 - 尝试将私有仓库同时添加到
registrySources的allowedRegistries中(如果你的集群有这个配置项),不过这个配置主要是针对节点拉取镜像的,而你的问题是ImageStreamImport的检查。
按照上面的步骤逐一排查,应该能解决白名单不生效的问题。
内容的提问来源于stack exchange,提问作者Amala
相关产品推荐
相关产品推荐

