2.2. 创建镜像 registry

创建 registry 来托管安装 OpenShift Container Platform 所需的镜像内容。

注意

以下流程创建一个简单的 registry,它可在 /opt/registry 文件夹中保存数据并在 podman 容器中运行。您可以使用不同的 registry 解决方案,例如 Red Hat Quay。检查以下流程以确保 registry 可以正常工作。

先决条件

  • 网络上有一个 Red Hat Enterprise Linux (RHEL) 服务器充当 registry 主机。
  • registry 主机可以访问互联网。

流程

  1. 安装所需的软件包:

    # yum -y install podman httpd-tools

    podman 软件包提供容器软件包,用于运行 registry。httpd-tools 软件包提供 htpasswd 实用程序,用于创建用户。

  2. 为 registry 创建文件夹:

    # mkdir -p /opt/registry/{auth,certs,data}

    这些文件夹挂载到 registry 容器中。

  3. 为 registry 提供证书。如果您没有现有的可信证书颁发机构,您可以生成自签名证书:

    $ cd /opt/registry/certs
    # openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt

    在提示符处,为证书提供所需的值:

    国家/地区名称(双字母代码)

    指定您所在位置的双字母 ISO 国家/地区代码。请参见 ISO 3166 国家/地区代码标准。

    州或省名称(完整名称)

    输入您的州或省的完整名称。

    本地名称(例如,城市)

    输入您的城市名称。

    机构名称(例如,公司)

    输入公司的名称。

    组织单元名称(例如,部门)

    输入您的部门名称。

    通用名称(例如,您的名字或服务器主机名)

    输入 registry 主机的主机名。确保您的主机名在 DNS 中,并且解析为预期的 IP 地址。

    电子邮件地址

    输入您的电子邮件地址。如需了解更多信息,请参阅 OpenSSL 文档中的 req 说明。

  4. 为 registry 生成使用 bcrpt 格式的用户名和密码:

    # htpasswd -bBc /opt/registry/auth/htpasswd <user_name> <password> 1
    1
    <user_name><password> 替换为用户名和密码。
  5. 创建 mirror-registry 容器以托管 registry:

    # podman run --name mirror-registry -p <local_registry_host_port>:5000 \ 1
         -v /opt/registry/data:/var/lib/registry:z \
         -v /opt/registry/auth:/auth:z \
         -e "REGISTRY_AUTH=htpasswd" \
         -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
         -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
         -v /opt/registry/certs:/certs:z \
         -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
         -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
         -e REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED=true \
         -d docker.io/library/registry:2
    1
    对于 <local_registry_host_port>,请指定您的镜像 registry 用于提供内容的端口。
  6. 为 registry 打开所需的端口:

    # firewall-cmd --add-port=<local_registry_host_port>/tcp --zone=internal --permanent 1
    # firewall-cmd --add-port=<local_registry_host_port>/tcp --zone=public   --permanent 2
    # firewall-cmd --reload
    1 2
    对于 <local_registry_host_port>,请指定您的镜像 registry 用于提供内容的端口。
  7. 将自签名证书添加到您的可信证书列表中:

    # cp /opt/registry/certs/domain.crt /etc/pki/ca-trust/source/anchors/
    # update-ca-trust

    您必须信任您的证书,才能在镜像过程中登录到 registry。

  8. 确认 registry 可用:

    $ curl -u <user_name>:<password> -k https://<local_registry_host_name>:<local_registry_host_port>/v2/_catalog 1
    
    {"repositories":[]}
    1
    对于 <user_name><password>,指定 registry 的用户名和密码。对于 <local_registry_host_name>,请指定在您的证书中指定的 registry 域名,如 registry.example.com。对于 <local_registry_host_port>,请指定您的镜像 registry 用于提供内容的端口。

    如果命令输出显示一个空存储库,则您的 registry 已经可用。