7.3.7. 从外部 registry 导入镜像
应用程序开发人员可以使用 oc import-image
命令导入镜像来创建镜像流
,并且可以配置 OpenShift Container Platform 来允许或拒绝来自外部 registry 的镜像导入。
流程
要配置可以导入镜像的允许的 registry,请将以下内容添加到
/etc/origin/master/master-config.yaml
文件中:imagePolicyConfig: allowedRegistriesForImport: - domainName: docker.io - domainName: '\*.docker.io' - domainName: '*.redhat.com' - domainName: 'my.registry.example.com'
- 要从外部经过身份验证的用户导入镜像,请在所需项目中创建一个 secret。
即使不建议使用外部身份验证的 registry,或者无法信任证书,
oc import-image
命令可以与--insecure=true
选项一起使用。如果外部经过身份验证的用户的 registry 是安全的,则 registry 证书应该在 master 主机中运行 registry 导入控制器时被信任:
在
/etc/pki/ca-trust/source/anchors/
中复制证书:$ sudo cp <my.registry.example.com.crt> /etc/pki/ca-trust/source/anchors/<my.registry.example.com.crt>
运行
update-ca-trust
命令:$ sudo update-ca-trust
重启所有 master 主机上的 master 服务:
$ sudo master-restart api $ sudo master-restart controllers
外部 registry 的证书应该在 OpenShift Container Platform registry 中信任:
$ for i in pem openssl java; do oc create configmap ca-trust-extracted-${i} --from-file /etc/pki/ca-trust/extracted/${i} oc set volume dc/docker-registry --add -m /etc/pki/ca-trust/extracted/${i} --configmap-name=ca-trust-extracted-${i} --name ca-trust-extracted-${i} done
警告目前,没有将证书添加到 registry pod 的官方流程,但可以使用上述临时解决方案。
这个临时解决方案是,在运行这些命令的系统中使用所有可信证书创建
configmap
,因此建议是从只信任所需证书的干净系统中运行它。或者,修改 registry 镜像,以信任使用
Dockerfile
重建镜像的适当证书:FROM registry.redhat.io/openshift3/ose-docker-registry:v3.6 ADD <my.registry.example.com.crt> /etc/pki/ca-trust/source/anchors/ USER 0 RUN update-ca-trust extract USER 1001
重建镜像,将其推送到
docker
registry,并将该镜像用作 registrydeploymentconfig
中的spec.template.spec.containers["name":"registry"].image
:$ oc patch dc docker-registry -p '{"spec":{"template":{"spec":{"containers":[{"name":"registry","image":"*myregistry.example.com/openshift3/ose-docker-registry:latest*"}]}}}}'
要在安装时添加 imagePolicyConfig
配置,openshift_master_image_policy_config
变量可用于 json
格式的字符串,包括所有 imagePolicyConfig
配置,如下所示:
openshift_master_image_policy_config={"imagePolicyConfig":{"allowedRegistriesForImport":[{"domainName":"docker.io"},{"domainName":"\*.docker.io"},{"domainName":"*.redhat.com"},{"domainName":"*my.registry.example.com*"}]}}
有关 ImagePolicy
的更多信息,请参阅 ImagePolicy
准入插件 部分。