Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

11.2. 配置 registry 允许导入

您可以在 imagePolicyConfig:allowedRegistriesForImport 部分下配置允许导入 master-config.yaml 中的 registry,如下例所示。如果没有设置,则允许所有镜像,这是默认设置。

例 11.1. Registries 允许导入的配置示例

imagePolicyConfig:
  allowedRegistriesForImport:
  -
    domainName: registry.redhat.io 1
  -
    domainName: *.mydomain.com
    insecure: true 2
  -
    domainName: local.registry.corp:5000 3
1
允许来自指定安全 Registry 的任何镜像。
2
允许来自托管在 mydomain.com 的任何子域中的任何不安全 Registry 中的任何镜像。mydomain.com 未列入白名单。
3
允许来自给定 Registry 中指定端口的任何镜像。

每个规则由以下属性组成:

  • domainName :主机名是可选用: <port> 后缀终止的,该后缀可以识别特殊通配符 (?,*)。前者匹配包含任何长度的字符序列,而后面的字符恰好匹配一个字符。通配符字符可以在前后都存在 : 分隔符。通配符仅适用于分隔符之前或之后的部分,而不考虑分隔符的存在。
  • insecure: 是一个布尔值,用于决定在 domainName 中缺少 :<port> 部分时匹配哪些端口。如果为 true,domainName 将会匹配带有 :80 后缀或未指定端口的 registry,只要导入过程中使用了不安全的标志。如果为 false,则匹配带有 :443 后缀或未指定端口的 registry。

如果规则应当同时与同一域的安全和不安全端口匹配,则必须列出规则两次(安装后为 insecure=true,一次具有 insecure=false )。

在进行任何规则评估之前,非限定镜像引用是 docker.io 限定的。要将它们列入白名单,请使用 domainName: docker.io

domainname:* 规则与任何 registry 主机名匹配,但端口仍限制为 443。要在任意端口上匹配任意 registry 服务,请使用 domainName: *:*

根据 Registries 配置示例中为导入而 创建的规则:

  • oc tag --insecure reg.mydomain.com/app:v1 app:v1 会因为 mydomain.com 规则而列入白名单
  • oc import-image --from reg1.mydomain.com:80/foo foo:latest 也会列入白名单
  • oc tag local.registry.corp/bar bar:latest 将被拒绝,因为端口与第三个规则中的 5000 不匹配

被拒绝的镜像导入将生成类似以下文本的错误消息:

The ImageStream "bar" is invalid:
* spec.tags[latest].from.name: Forbidden: registry "local.registry.corp" not allowed by whitelist: "local.registry.corp:5000", "*.mydomain.com:80", "registry.redhat.io:443"
* status.tags[latest].items[0].dockerImageReference: Forbidden: registry "local.registry.corp" not allowed by whitelist: "local.registry.corp:5000", "*.mydomain.com:80", "registry.redhat.io:443"