第 3 章 高级 Red Hat Quay 部署

使用以下部分配置高级 Red Hat Quay 设置。

3.1. 使用 SSL/TLS

要使用 自签名证书 配置 Red Hat Quay,您必须创建一个证书颁发机构(CA),然后生成所需的密钥和证书文件。

注意

以下示例假设您已使用 DNS 或其他命名机制配置了服务器主机名 quay-server.example.com,如在 /etc/hosts 文件中添加条目:

$ cat /etc/hosts
...
192.168.1.112   quay-server.example.com

3.1.1. 创建证书颁发机构并签署证书

使用以下步骤创建证书文件和名为 ssl.certssl.key 的主密钥文件。

3.1.1.1. 创建证书颁发机构

使用以下步骤创建证书颁发机构(CA)

流程

  1. 输入以下命令生成 root CA 密钥:

    $ openssl genrsa -out rootCA.key 2048
  2. 输入以下命令生成 root CA 证书:

    $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
  3. 输入将合并到证书请求中的信息,包括服务器主机名,例如:

    Country Name (2 letter code) [XX]:IE
    State or Province Name (full name) []:GALWAY
    Locality Name (eg, city) [Default City]:GALWAY
    Organization Name (eg, company) [Default Company Ltd]:QUAY
    Organizational Unit Name (eg, section) []:DOCS
    Common Name (eg, your name or your server's hostname) []:quay-server.example.com

3.1.1.2. 签署证书

使用以下步骤为证书签名。

流程

  1. 输入以下命令生成服务器密钥:

    $ openssl genrsa -out ssl.key 2048
  2. 输入以下命令生成签名请求:

    $ openssl req -new -key ssl.key -out ssl.csr
  3. 输入将合并到证书请求中的信息,包括服务器主机名,例如:

    Country Name (2 letter code) [XX]:IE
    State or Province Name (full name) []:GALWAY
    Locality Name (eg, city) [Default City]:GALWAY
    Organization Name (eg, company) [Default Company Ltd]:QUAY
    Organizational Unit Name (eg, section) []:DOCS
    Common Name (eg, your name or your server's hostname) []:quay-server.example.com
  4. 创建配置文件 openssl.cnf,指定服务器主机名,例如:

    openssl.cnf

    [req]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = quay-server.example.com
    IP.1 = 192.168.1.112

  5. 使用配置文件生成证书 ssl.cert

    $ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf

3.1.2. 使用 Red Hat Quay UI 配置 SSL/TLS

使用以下步骤使用 Red Hat Quay UI 配置 SSL/TLS。

要使用命令行界面配置 SSL,请参阅"使用命令行界面配置 SSL/TLS"。

先决条件

  • 您已创建了证书颁发机构并签署证书。

流程

  1. 以配置模式启动 Quay 容器:

    $ sudo podman run --rm -it --name quay_config -p 80:8080 -p 443:8443 registry.redhat.io/quay/quay-rhel8:v3.9.0 config secret
  2. Server Configuration 部分中,选择 Red Hat Quay handle TLS for SSL/TLS。上传之前创建的证书文件和私钥文件,确保 Server Hostname 与创建证书时使用的值匹配。
  3. 验证并下载更新的配置。
  4. 输入以下命令停止 Quay 容器,然后重启 registry:

    $ sudo podman rm -f quay
    $ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
    --name=quay \
    -v $QUAY/config:/conf/stack:Z \
    -v $QUAY/storage:/datastorage:Z \
    registry.redhat.io/quay/quay-rhel8:v3.9.0

3.1.3. 使用命令行界面配置 SSL

使用以下步骤使用命令行界面配置 SSL/TLS。

先决条件

  • 您已创建了证书颁发机构并签署证书。

流程

  1. 将证书文件和主密钥文件复制到您的配置目录中,确保分别命名为 ssl.certssl.key

    cp ~/ssl.cert ~/ssl.key $QUAY/config
  2. 输入以下命令进入 $QUAY/config 目录:

    $ cd $QUAY/config
  3. 编辑 config.yaml 文件,并指定您希望 Red Hat Quay 处理 TLS/SSL:

    config.yaml

    ...
    SERVER_HOSTNAME: quay-server.example.com
    ...
    PREFERRED_URL_SCHEME: https
    ...

  4. 可选:输入以下命令将 rootCA.pem 文件的内容应用到 ssl.cert 文件的末尾:

    $ cat rootCA.pem >> ssl.cert
  5. 输入以下命令停止 Quay 容器:

    $ sudo podman stop quay
  6. 输入以下命令重启 registry:

    $ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
      --name=quay \
      -v $QUAY/config:/conf/stack:Z \
      -v $QUAY/storage:/datastorage:Z \
      registry.redhat.io/quay/quay-rhel8:v3.9.0

3.1.4. 使用命令行测试 SSL 配置

  • 使用 podman login 命令尝试登录到启用了 SSL 的 Quay registry:

    $ sudo podman login quay-server.example.com
    Username: quayadmin
    Password:
    
    Error: error authenticating creds for "quay-server.example.com": error pinging docker registry quay-server.example.com: Get "https://quay-server.example.com/v2/": x509: certificate signed by unknown authority
  • Podman 不信任自签名证书。作为临时解决方案,请使用 --tls-verify 选项:

    $ sudo podman login --tls-verify=false quay-server.example.com
    Username: quayadmin
    Password:
    
    Login Succeeded!

后续小节将 Podman 配置为信任 root 证书颁发机构(CA)。

3.1.5. 使用浏览器测试 SSL 配置

当您尝试访问 Quay registry 时,在这种情况下,浏览器会警告潜在的风险:https://quay-server.example.com

Potential risk

继续登录屏幕,浏览器会通知您连接不安全:

Connection not secure

以下部分介绍了将系统配置为信任 root 证书颁发机构(CA)。

3.1.6. 配置 podman 以信任证书颁发机构

Podman 使用两个路径来查找 CA 文件,即 /etc/containers/certs.d//etc/docker/certs.d/

  • 将 root CA 文件复制到这些位置之一,其准确路径由服务器主机名决定,并将文件命名为 ca.crt

    $ sudo cp rootCA.pem /etc/containers/certs.d/quay-server.example.com/ca.crt
  • 另外,如果您使用 Docker,您可以将 root CA 文件复制到等同的 Docker 目录中:

    $ sudo cp rootCA.pem /etc/docker/certs.d/quay-server.example.com/ca.crt

在登录到 registry 时,您应该不再需要使用 --tls-verify=false 选项:

$ sudo podman login quay-server.example.com

Username: quayadmin
Password:
Login Succeeded!

3.1.7. 将系统配置为信任证书颁发机构

使用以下步骤将系统配置为信任证书颁发机构。

流程

  1. 输入以下命令将 rootCA.pem 文件复制到整合的系统范围信任存储中:

    $ sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/
  2. 输入以下命令更新系统范围的信任存储配置:

    $ sudo update-ca-trust extract
  3. 可选。您可以使用 trust list 命令确保已配置了 Quay 服务器:

    $ trust list | grep quay
        label: quay-server.example.com

    现在,当您通过 https://quay-server.example.com 访问 registry 时,锁定图标会显示连接安全:

    Connection not secure

  4. 要从系统范围的信任中删除 rootCA.pem 文件,请删除该文件并更新配置:

    $ sudo rm /etc/pki/ca-trust/source/anchors/rootCA.pem
    $ sudo update-ca-trust extract
    $ trust list | grep quay

如需更多信息,请参阅 使用共享系统证书的 章节中的 RHEL 9 文档。