13.7. 导入标签和镜像元数据
镜像流可以被配置为从外部 Docker 镜像注册表中的镜像存储库导入标签和镜像元数据。您可以使用几种不同方法进行此操作。
您可以使用
--from
选项使用oc import-image
命令手动导入 tag 和镜像信息:$ oc import-image <image_stream_name>[:<tag>] --from=<docker_image_repo> --confirm
例如:
$ oc import-image my-ruby --from=docker.io/openshift/ruby-20-centos7 --confirm The import completed successfully. Name: my-ruby Created: Less than a second ago Labels: <none> Annotations: openshift.io/image.dockerRepositoryCheck=2016-05-06T20:59:30Z Docker Pull Spec: 172.30.94.234:5000/demo-project/my-ruby Tag Spec Created PullSpec Image latest docker.io/openshift/ruby-20-centos7 Less than a second ago docker.io/openshift/ruby-20-centos7@sha256:772c5bf9b2d1e8... <same>
您还可以添加
--all
标志来导入镜像的所有标签,而不只导入 latest。与 OpenShift Container Platform 中的大多数对象一样,您还可以将 JSON 或 YAML 定义写入文件,然后使用 CLI 创建对象。将
spec.dockerImageRepository
字段设置为镜像的 Docker pull spec:apiVersion: "v1" kind: "ImageStream" metadata: name: "my-ruby" spec: dockerImageRepository: "docker.io/openshift/ruby-20-centos7"
然后,创建对象:
$ oc create -f <file>
当您创建引用外部 Docker registry 中的镜像的镜像流时,OpenShift Container Platform 会在短时间内与外部 registry 通信,以便获取镜像的最新信息。
同步 tag 和镜像元数据后,镜像流对象将类似如下:
apiVersion: v1 kind: ImageStream metadata: name: my-ruby namespace: demo-project selflink: /oapi/v1/namespaces/demo-project/imagestreams/my-ruby uid: 5b9bd745-13d2-11e6-9a86-0ada84b8265d resourceVersion: '4699413' generation: 2 creationTimestamp: '2016-05-06T21:34:48Z' annotations: openshift.io/image.dockerRepositoryCheck: '2016-05-06T21:34:48Z' spec: dockerImageRepository: docker.io/openshift/ruby-20-centos7 tags: - name: latest annotations: null from: kind: DockerImage name: 'docker.io/openshift/ruby-20-centos7:latest' generation: 2 importPolicy: { } status: dockerImageRepository: '172.30.94.234:5000/demo-project/my-ruby' tags: - tag: latest items: - created: '2016-05-06T21:34:48Z' dockerImageReference: 'docker.io/openshift/ruby-20-centos7@sha256:772c5bf9b2d1e8e80742ed75aab05820419dc4532fa6d7ad8a1efddda5493dc3' image: 'sha256:772c5bf9b2d1e8e80742ed75aab05820419dc4532fa6d7ad8a1efddda5493dc3' generation: 2
您可以将标签设置为以调度的间隔查询外部 registry,从而通过设置 --scheduled=true
标志和 oc tag
命令(如将标签添加到镜像流中所述) 来同步标签和镜像元数据。
另外,您可以在标签的定义中将 importPolicy.scheduled
设置为 true :
apiVersion: v1 kind: ImageStream metadata: name: ruby spec: tags: - from: kind: DockerImage name: openshift/ruby-20-centos7 name: latest importPolicy: scheduled: true
13.7.1. 从 Insecure Registries 导入镜像
镜像流可以被配置为从不安全的镜像 registry 中导入标签和镜像元数据,如使用自签名证书签名的镜像元数据或使用普通 HTTP 而不是 HTTPS 进行签名的镜像元数据。
要配置此功能,请添加 openshift.io/image.insecureRepository
注释,并将它设为 true。此设置会在连接到 registry 时绕过证书验证:
kind: ImageStream
apiVersion: v1
metadata:
name: ruby
annotations:
openshift.io/image.insecureRepository: "true" 1
spec:
dockerImageRepository: my.repo.com:5000/myimage
- 1
- 将
openshift.io/image.insecureRepository
注解设置为 true
这个选项指示集成 registry 在提供镜像流时回退到镜像流中标记的任何外部镜像的不安全传输,而这存在危险。如果可能,通过将 istag
标记为 insecure 来避免这一风险。
13.7.1.1. 镜像流标签策略
13.7.1.1.1. 不安全的标签导入策略
以上注解适用于特定 ImageStream
的所有镜像和标签。若要进行精细控制,可以在 istags
上设置策略。在标签的定义中将 importPolicy.insecure
设置为 true
,以便只对该标签下的镜像进行回退到不安全传输。
当镜像流被标注为不安全或者 istag
具有不安全的导入策略时,会在特定 istag
下启用回退到不安全的传输。importPolicy.insecure'
设置为 false
无法覆盖镜像流注解。
13.7.1.1.2. 参考策略
Reference Policy 允许您指定引用此镜像流标签的资源的位置。它仅适用于远程镜像(从外部 registry 中导入)。有两个选项可供选择,即 Local
和 Source
。
Source
策略指示客户端直接从镜像的源 registry 中拉取。除非镜像由集群管理,否则不会涉及集成的 registry。(不是外部镜像。) 这是默认策略。
Local
策略指示客户端始终从集成的 registry 中拉取。如果要在不修改 Docker 守护进程设置的情况下从外部不安全的 registry 拉取(pull)非常有用。
此策略仅影响镜像流标签的使用。使用其外部 registry 位置直接引用或拉取镜像的组件或操作不会重定向到内部注册表。
注册表为客户端提供远程镜像。此功能(默认情况下为启用)必须启用本地参考策略。另外,默认会镜像所有 blobs,以便以后更快地访问。
您可以在镜像流标签规格中将策略设置为 referencePolicy.type
。
带有本地参考策略的 Insecure Tag 示例
kind: ImageStream apiVersion: v1 metadata: name: ruby tags: - from: kind: DockerImage name: my.repo.com:5000/myimage name: mytag importPolicy: insecure: true 1 referencePolicy: type: Local 2