保护 Red Hat Quay


Red Hat Quay 3.15

保护 Red Hat Quay

Red Hat OpenShift Documentation Team

摘要

保护 Red Hat Quay:SSL/TLS、证书和加密

前言

Red Hat Quay 可让管理员通过使用传输层安全(TLS)、证书管理和加密技术保护其存储库的通信和可信访问。正确配置 SSL/TLS 并实施自定义证书,可帮助保护数据、安全外部连接,以及保持 Red Hat Quay 和您选择的集成服务之间的信任。

涵盖了以下主题:

  • 为独立 Red Hat Quay 部署配置自定义 SSL/TLS 证书
  • 在 OpenShift Container Platform 中为 Red Hat Quay 配置自定义 SSL/TLS 证书
  • 在 Red Hat Quay 容器中添加额外的证书颁发机构
  • 在 OpenShift Container Platform 上的 Red Hat Quay 中添加额外的证书颁发机构

第 1 章 为 Red Hat Quay 配置 SSL 和 TLS

安全套接字层(SSL)协议最初使由 Netscape 公司开发的,以提供一种在互联网上进行安全通信的机制。因此,该协议被互联网工程任务组(IETF)采纳,并重命名为传输层安全(TLS)。

TLS(传输层安全)是用来保护网络通信的加密协议。在通过配置首选密钥交换协议、身份验证方法和加密算法来强化系统安全设置时,需要记住支持的客户端的范围越广,产生的安全性就越低。相反,严格的安全设置会导致与客户端的兼容性受限,这可能导致某些用户被锁定在系统之外。请确保以最严格的可用配置为目标,并且仅在出于兼容性原因需要时才放宽配置。

Red Hat Quay 可以配置为使用 SSL/TLS 证书来确保客户端和 Red Hat Quay 服务器之间的安全通信。此配置涉及使用有效的 SSL/TLS 证书,这些证书可以从可信证书颁发机构(CA)获得,或生成为内部使用自签名证书。

1.1. 创建证书颁发机构

使用以下步骤设置您自己的 CA,并使用它来为您的域发布服务器证书。这可让您使用自己的证书保护与 SSL/TLS 的通信。

流程

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

    $ openssl genrsa -out rootCA.key 2048
    Copy to Clipboard Toggle word wrap
  2. 输入以下命令生成 root CA 证书:

    $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap
  4. 输入以下命令生成服务器密钥:

    $ openssl genrsa -out ssl.key 2048
    Copy to Clipboard Toggle word wrap
  5. 输入以下命令生成签名请求:

    $ openssl req -new -key ssl.key -out ssl.csr
    Copy to Clipboard Toggle word wrap
  6. 输入要合并到证书请求中的信息,包括服务器主机名,例如:

    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
    Email Address []:
    Copy to Clipboard Toggle word wrap
  7. 创建配置文件 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
    Copy to Clipboard Toggle word wrap

  8. 使用配置文件生成证书 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
    Copy to Clipboard Toggle word wrap
  9. 输入以下命令确认您的创建证书和密钥:

    $ ls /path/to/certificates
    Copy to Clipboard Toggle word wrap

    输出示例

    rootCA.key ssl-bundle.cert ssl.key custom-ssl-config-bundle-secret.yaml rootCA.pem ssl.cert
    openssl.cnf rootCA.srl  ssl.csr
    Copy to Clipboard Toggle word wrap

1.2. 为独立 Red Hat Quay 部署配置 SSL/TLS

对于独立的 Red Hat Quay 部署,必须使用命令行界面和手动更新 config.yaml 文件来配置 SSL/TLS 证书。

1.2.1. 使用命令行界面配置自定义 SSL/TLS 证书

必须使用命令行界面(CLI)配置 SSL/TLS,并手动更新 config.yaml 文件。

先决条件

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

流程

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

    cp ~/ssl.cert ~/ssl.key /path/to/configuration_directory
    Copy to Clipboard Toggle word wrap
  2. 输入以下命令进入配置目录:

    $ cd /path/to/configuration_directory
    Copy to Clipboard Toggle word wrap
  3. 编辑 config.yaml 文件并指定您希望 Red Hat Quay 处理 SSL/TLS:

    config.yaml 文件示例

    # ...
    SERVER_HOSTNAME: <quay-server.example.com>
    ...
    PREFERRED_URL_SCHEME: https
    # ...
    Copy to Clipboard Toggle word wrap

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

    $ cat rootCA.pem >> ssl.cert
    Copy to Clipboard Toggle word wrap
  5. 输入以下命令停止 Quay 容器:

    $ sudo podman stop <quay_container_name>
    Copy to Clipboard Toggle word wrap
  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.15.1
    Copy to Clipboard Toggle word wrap

1.2.2. 配置 Podman 以信任证书颁发机构

Podman 使用两个路径来查找证书颁发机构(CA)文件: /etc/containers/certs.d//etc/docker/certs.d/。使用以下步骤将 Podman 配置为信任 CA。

流程

  1. 将 root CA 文件复制到 /etc/containers/certs.d//etc/docker/certs.d/ 之一。使用服务器主机名决定的确切路径,并将文件命名为 ca.crt

    $ sudo cp rootCA.pem /etc/containers/certs.d/quay-server.example.com/ca.crt
    Copy to Clipboard Toggle word wrap
  2. 在登录到 Red Hat Quay registry 时,验证您不再需要使用 the -tls-verify=false 选项:

    $ sudo podman login quay-server.example.com
    Copy to Clipboard Toggle word wrap

    输出示例

    Login Succeeded!
    Copy to Clipboard Toggle word wrap

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

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

流程

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

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

    $ sudo update-ca-trust extract
    Copy to Clipboard Toggle word wrap
  3. 可选。您可以使用 trust list 命令来确保 Quay 服务器已配置:

    $ trust list | grep quay
        label: quay-server.example.com
    Copy to Clipboard Toggle word wrap

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

    Connection not secure

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

    $ sudo rm /etc/pki/ca-trust/source/anchors/rootCA.pem
    Copy to Clipboard Toggle word wrap
    $ sudo update-ca-trust extract
    Copy to Clipboard Toggle word wrap
    $ trust list | grep quay
    Copy to Clipboard Toggle word wrap

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

当在 OpenShift Container Platform 上部署 Red Hat Quay 时,QuayRegistry 自定义资源定义(CRD)的 tls 组件会被默认设置为 managed因此,OpenShift Container Platform 的证书颁发机构用于创建 HTTPS 端点并轮转 SSL/TLS 证书。

您可以在 OpenShift Container Platform 上的 Red Hat Quay 初始部署前或之后配置自定义 SSL/TLS 证书。这个过程涉及在 QuayRegistry YAML 文件中创建或更新 configBundleSecret 资源,以集成您的自定义证书,并将 tls 组件设置为 unmanaged

重要

为 Red Hat Quay 配置自定义 SSL/TLS 证书时,管理员负责证书轮转。

以下流程允许您应用自定义 SSL/TLS 证书,以确保安全通信,并满足 OpenShift Container Platform 部署中的 Red Hat Quay 的特定安全要求。这些步骤假设您已创建了证书颁发机构(CA)捆绑包或 ssl.key,以及 ssl.cert。然后,流程演示了如何将这些文件集成到 OpenShift Container Platform 部署的 Red Hat Quay 中,以确保 registry 使用指定的安全设置,并符合机构的 SSL/TLS 策略。

注意
  • 以下流程用于使用 HTTPS 证书保护 Red Hat Quay。请注意,这与管理证书颁发机构信任捆绑包不同。CA Trust Bundles 由 Quay 容器中的系统进程用来根据可信 CA 验证证书,并确保 LDAP、存储后端和 OIDC 连接等服务是可信的。
  • 如果要将证书添加到现有部署中,则必须在新配置捆绑包 secret 中包含现有 config.yaml 文件,即使您没有进行任何配置更改。

1.3.1. 创建自定义 SSL/TLS configBundleSecret 资源

在创建自定义 SSL/TLS 证书后,您可以在 OpenShift Container Platform 上为 Red Hat Quay 创建自定义 configBundleSecret 资源,允许您上传 ssl.certssl.key 文件。

先决条件

  • 您有 base64 将原始配置捆绑包解码为一个 config.yaml 文件。如需更多信息 ,请参阅下载现有配置
  • 您已生成了自定义 SSL 证书和密钥。

流程

  1. 创建新的 YAML 文件,如 custom-ssl-config-bundle-secret.yaml

    $ touch custom-ssl-config-bundle-secret.yaml
    Copy to Clipboard Toggle word wrap
  2. 创建 custom-ssl-config-bundle-secret 资源。

    1. 运行以下命令来创建资源:

      $ oc -n <namespace> create secret generic custom-ssl-config-bundle-secret \
        --from-file=config.yaml=</path/to/config.yaml> \ 
      1
      
        --from-file=ssl.cert=</path/to/ssl.cert> \ 
      2
      
        --from-file=extra_ca_cert_<name-of-certificate>.crt=ca-certificate-bundle.crt
       \ 
      3
      
        --from-file=ssl.key=</path/to/ssl.key> \ 
      4
      
        --dry-run=client -o yaml > custom-ssl-config-bundle-secret.yaml
      Copy to Clipboard Toggle word wrap
      1
      其中 <config.yaml& gt; 是您的 base64 解码config.yaml 文件。
      2
      其中 <ssl.cert& gt; 是您的 ssl.cert 文件。
      3
      可选。--from-file=extra_ca_cert_<name-of-certificate>.crt=ca-certificate-bundle.crt 字段允许 Red Hat Quay 识别自定义证书颁发机构(CA)文件。如果您使用使用自定义 CA 的 LDAP、OIDC 或者其它服务,您必须通过 extra_ca_cert 路径添加它们。如需更多信息,请参阅"在 OpenShift Container Platform 上向 Red Hat Quay 添加其他证书颁发机构"。
      4
      其中 <ssl.key& gt; 是您的 ssl.key 文件。
  3. 可选。您可以输入以下命令来检查 custom-ssl-config-bundle-secret.yaml 文件的内容:

    $ cat custom-ssl-config-bundle-secret.yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    apiVersion: v1
    data:
      config.yaml: QUxMT1dfUFVMTFNfV0lUSE9VVF9TVFJJQ1RfTE9HR0lORzogZmFsc2UKQVVUSEVOVElDQVRJT05fVFlQRTogRGF0YWJhc2UKREVGQVVMVF9UQUdfRVhQSVJBVElPTjogMncKRElTVFJJQlVURURfU1R...
      ssl.cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVYakNDQTBhZ0F3SUJBZ0lVTUFBRk1YVWlWVHNoMGxNTWI3U1l0eFV5eTJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZZ3hDekFKQmdOVkJBWVR...
      extra_ca_cert_<name-of-certificate>:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVYakNDQTBhZ0F3SUJBZ0lVTUFBRk1YVWlWVHNoMGxNTWI3U1l0eFV5eTJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZZ3hDe...
      ssl.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRQ2c0VWxZOVV1SVJPY1oKcFhpZk9MVEdqaS9neUxQMlpiMXQ...
    kind: Secret
    metadata:
      creationTimestamp: null
      name: custom-ssl-config-bundle-secret
      namespace: <namespace>
    Copy to Clipboard Toggle word wrap

  4. 输入以下命令来创建 configBundleSecret 资源:

    $ oc create -n <namespace> -f custom-ssl-config-bundle-secret.yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    secret/custom-ssl-config-bundle-secret created
    Copy to Clipboard Toggle word wrap

  5. 输入以下命令更新 QuayRegistry YAML 文件来引用 custom-ssl-config-bundle-secret 对象:

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"custom-ssl-config-bundle-secret"}}'
    Copy to Clipboard Toggle word wrap

    输出示例

    quayregistry.quay.redhat.com/example-registry patched
    Copy to Clipboard Toggle word wrap

  6. 输入以下命令将 QuayRegistry YAML 的 tls 组件设置为 False

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"components":[{"kind":"tls","managed":false}]}}'
    Copy to Clipboard Toggle word wrap

    输出示例

    quayregistry.quay.redhat.com/example-registry patched
    Copy to Clipboard Toggle word wrap

  7. 输入以下命令来确保 QuayRegistry YAML 文件已更新为使用自定义 SSL configBundleSecret 资源,并且您的 和 tls 资源已设置为 False

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    # ...
      configBundleSecret: custom-ssl-config-bundle-secret
    # ...
    spec:
      components:
      - kind: tls
        managed: false
    # ...
    Copy to Clipboard Toggle word wrap

验证

  • 输入以下命令确认到服务器和端口的 TLS 连接:

    $  openssl s_client -connect <quay-server.example.com>:443
    Copy to Clipboard Toggle word wrap

    输出示例

    # ...
    SSL-Session:
        Protocol  : TLSv1.3
        Cipher    : TLS_AES_256_GCM_SHA384
        Session-ID: 0E995850DC3A8EB1A838E2FF06CE56DBA81BD8443E7FA05895FBD6FBDE9FE737
        Session-ID-ctx:
        Resumption PSK: 1EA68F33C65A0F0FA2655BF9C1FE906152C6E3FEEE3AEB6B1B99BA7C41F06077989352C58E07CD2FBDC363FA8A542975
        PSK identity: None
        PSK identity hint: None
        SRP username: None
        TLS session ticket lifetime hint: 7200 (seconds)
    
    # ...
    Copy to Clipboard Toggle word wrap

Red Hat Quay 管理员可以通过为客户端侧验证提供自己的 SSL/TLS 证书,在 Red Hat Quay 和 SQL (PostgreSQL 和 GCP CloudSQL)之间配置基于证书的身份验证。这提供了增强的安全性,并可更轻松地对 Red Hat Quay registry 的自动化。

以下小节演示了如何在 Red Hat Quay 和 PostgreSQL 和 Red Hat Quay 和 CloudSQL 之间配置基于证书的身份验证。

2.1. 使用 SQL 配置基于证书的身份验证

以下流程演示了如何使用安全客户端证书将 Red Hat Quay 与 SQL 数据库连接。此方法确保通过证书信任验证功能和验证,因为它会根据可信证书颁发机构(CA)验证 SQL 服务器的证书。这提高了 Red Hat Quay 和 SQL 服务器之间的连接安全性,同时简化部署的自动化。虽然示例使用 Google Cloud Platform 的 CloudSQL,但该流程也适用于 PostgreSQL 和其他支持的数据库。

先决条件

  • 您生成了自定义证书颁发机构(CA)和 SSL/TLS 证书和密钥,可以使用 PEM 格式,用于生成带有 CloudSQL 数据库的 SSL 连接。如需更多信息,请参阅 Red Hat Quay 的 SSL 和 TLS
  • 您有 base64 将原始配置捆绑包解码 为一个 config.yaml 文件。如需更多信息 ,请参阅下载现有配置
  • 您使用外部管理的 PostgreSQL 或 CloudSQL 数据库。如需更多信息,请参阅使用带有 DB_URI 变量集的和现有的 PostgreSQL 数据库
  • 为 SSL/TLS 配置外部管理的 PostgreSQL 或 CloudSQL 数据库。
  • QuayRegistry CRD 的 postgres 组件被设置为 managed: false,您的 CloudSQL 数据库使用 DB_URI 配置变量设置。以下流程使用 postgresql://<cloudsql_username>:<dbpassword>@<database_host>:<port>/<database_name>

流程

  1. 在为您的 CloudSQL 数据库生成 CA 和 SSL/TLS 证书和密钥后,并确保它们采用 .pem 格式,测试到 CloudSQL 服务器的 SSL 连接:

    1. 输入以下命令启动到 CloudSQL 服务器的连接:

      $ psql "sslmode=verify-ca sslrootcert=<ssl_server_certificate_authority>.pem sslcert=<ssl_client_certificate>.pem sslkey=<ssl_client_key>.pem hostaddr=<database_host> port=<5432> user=<cloudsql_username> dbname=<cloudsql_database_name>"
      Copy to Clipboard Toggle word wrap
  2. 在 Red Hat Quay 目录中,运行以下命令来创建一个新的 YAML 文件,如 quay-config-bundle.yaml

    $ touch quay-config-bundle.yaml
    Copy to Clipboard Toggle word wrap
  3. 输入以下命令来创建 postgresql-client-certs 资源:

    $ oc -n <quay_namespace> create secret generic postgresql-client-certs \
    --from-file config.yaml=<path/to/config.yaml> 
    1
    
    --from-file=tls.crt=<path/to/ssl_client_certificate.pem> 
    2
    
    --from-file=tls.key=<path/to/ssl_client_key.pem> 
    3
    
    --from-file=ca.crt=<path/to/ssl_server_certificate.pem> 
    4
    Copy to Clipboard Toggle word wrap
    1
    其中' <config.yaml>' 是您的 base64 解码config.yaml 文件。
    2
    其中 ssl_client_certificate.pem 是您的 SSL 证书,格式为 .pem
    3
    其中 ssl_client_key.pem 是您的 SSL 密钥,格式为 .pem
    4
    其中 ssl_server_certificate.pem 是您的 SSL root CA,格式为 .pem
  4. 编辑 'quay-config-bundle.yaml 文件,使其包含以下数据库连接设置:

    重要
    • DB_CONNECTION_ARGS 变量中包含的信息,如 sslmode,sslrootcert,sslcert, 和 sslkey 必须与 附加到 DB_URI 变量的信息匹配。不匹配可能会导致连接失败。
    • 您不能指定自定义文件名或路径。sslrootcertsslcertsslkey 的证书文件路径是硬编码的默认值,并挂载到 Kubernetes secret 中的 Quay pod 中。您必须遵循以下命名约定,否则将导致连接失败。
    DB_CONNECTION_ARGS:
        autorollback: true
        sslmode: verify-ca 
    1
    
        sslrootcert: /.postgresql/root.crt 
    2
    
        sslcert: /.postgresql/postgresql.crt 
    3
    
        sslkey: /.postgresql/postgresql.key 
    4
    
        threadlocals: true 
    5
    
    DB_URI: postgresql://<dbusername>:<dbpassword>@<database_host>:<port>/<database_name>?sslmode=verify-full&sslrootcert=/.postgresql/root.crt&sslcert=/.postgresql/postgresql.crt&sslkey=/.postgresql/postgresql.key 
    6
    Copy to Clipboard Toggle word wrap
    1
    使用 verify-ca 可确保数据库连接使用 SSL/TLS,并根据可信 CA 验证服务器证书。这可与可信 CA 和自签名 CA 证书一起使用。但是,此模式不会验证服务器的主机名。如需完整的主机名和证书验证,请使用 verify-full。有关可用选项的更多信息,请参阅 PostgreSQL SSL/TLS 连接参数
    2
    root.crt 文件包含用来验证与 CloudSQL 数据库的 SSL/TLS 连接的根证书。此文件挂载到来自 Kubernetes secret 的 Quay pod 中。
    3
    postgresql.crt 文件包含用于验证与 CloudSQL 数据库连接的客户端证书。此文件挂载到来自 Kubernetes secret 的 Quay pod 中。
    4
    postgresql.key 文件包含与客户端证书关联的私钥。此文件挂载到来自 Kubernetes secret 的 Quay pod 中。
    5
    为连接启用自动滚动。
    6
    访问 CloudSQL 数据库的 URI。必须使用 sslmode 类型、root.crtpostgresql.crtpostgresql.key 文件附加。DB_URI 中包含的 SSL/TLS 信息必须与 DB_CONNECTION_ARGS 中提供的信息匹配。如果使用 CloudSQL,则必须在此变量中包含数据库用户名和密码。
  5. 输入以下命令来创建 configBundleSecret 资源:

    $ oc create -n <namespace> -f quay-config-bundle.yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    secret/quay-config-bundle created
    Copy to Clipboard Toggle word wrap

  6. 输入以下命令更新 QuayRegistry YAML 文件来引用 quay-config-bundle 对象:

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"quay-config-bundle"}}'
    Copy to Clipboard Toggle word wrap

    输出示例

    quayregistry.quay.redhat.com/example-registry patched
    Copy to Clipboard Toggle word wrap

  7. 输入以下命令来确保 QuayRegistry YAML 文件已更新为使用额外的 CA 证书 configBundleSecret 资源:

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    # ...
      configBundleSecret: quay-config-bundle
    # ...
    Copy to Clipboard Toggle word wrap

Red Hat Quay 使用证书颁发机构(CA)验证与外部服务的 SSL/TLS 连接,如 ODIC 供应商、LDAP 供应商、存储供应商等。

以下小节提供有关根据您的部署类型将额外 CA 上传到 Red Hat Quay 的信息。

extra_ca_certs 目录是可以存储其他证书颁发机构(CA)的目录,以扩展可信证书集合。Red Hat Quay 使用这些证书来验证与外部服务的 SSL/TLS 连接。在部署 Red Hat Quay 时,您可以将所需的 CA 放在这个目录中,以确保到 LDAP、OIDC 和存储系统等服务的连接会被正确保护并验证。

对于独立 Red Hat Quay 部署,您必须创建这个目录,并将额外的 CA 证书复制到那个目录中。

先决条件

  • 有用于所需服务的 CA。

流程

  1. 输入以下命令查看要添加到容器中的证书:

    $ cat storage.crt
    Copy to Clipboard Toggle word wrap

    输出示例

    -----BEGIN CERTIFICATE-----
    MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV...
    -----END CERTIFICATE-----
    Copy to Clipboard Toggle word wrap

  2. 输入以下命令,在 Red Hat Quay 目录的 /config 文件夹中创建 extra_ca_certs

    $ mkdir -p /path/to/quay_config_folder/extra_ca_certs
    Copy to Clipboard Toggle word wrap
  3. 将 CA 文件复制到 extra_ca_certs 文件夹。例如:

    $ cp storage.crt /path/to/quay_config_folder/extra_ca_certs/
    Copy to Clipboard Toggle word wrap
  4. 输入以下命令,确保 storage.crt 文件存在于 extra_ca_certs 文件夹中:

    $ tree /path/to/quay_config_folder/extra_ca_certs
    Copy to Clipboard Toggle word wrap

    输出示例

    /path/to/quay_config_folder/extra_ca_certs
    ├── storage.crt----
    Copy to Clipboard Toggle word wrap

  5. 输入以下命令来获取 QuayCONTAINER ID

    $ podman ps
    Copy to Clipboard Toggle word wrap

    输出示例

    CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS
    5a3e82c4a75f        <registry>/<repo>/quay:{productminv} "/sbin/my_init"          24 hours ago        Up 18 hours         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 443/tcp   grave_keller
    Copy to Clipboard Toggle word wrap

  6. 输入以下命令重启容器

    $ podman restart 5a3e82c4a75f
    Copy to Clipboard Toggle word wrap
  7. 运行以下命令确认证书已复制到容器命名空间中:

    $ podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pem
    Copy to Clipboard Toggle word wrap

    输出示例

    -----BEGIN CERTIFICATE-----
    MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV...
    -----END CERTIFICATE-----
    Copy to Clipboard Toggle word wrap

在 OpenShift Container Platform 上的 Red Hat Quay 中,使用 extra_ca_certs 配置字段将额外证书颁发机构(CA)填充到 CA 目录中,然后将 CA 添加到系统信任捆绑包中。Red Hat Quay 使用这些证书来验证与 LDAP、OIDC 和存储系统等外部服务的 SSL/TLS 连接。

在 OpenShift Container Platform 上部署或重新部署 Red Hat Quay 时,您可以将一个或多个 CA 添加到 CA 目录中,以确保外部服务被正确保护并验证。在 OpenShift Container Platform 部署的 Red Hat Quay 中,您必须手动将 extra_ca_certs 配置字段添加到 config.yaml 文件中,并将 config.yaml 重新上传到 OpenShift Container Platform。

以下流程演示了如何下载现有配置文件,将额外的 CA 添加到 OpenShift Container Platform 部署的 Red Hat Quay 中,然后重新上传配置文件。

3.2.1. 使用 CLI 修改配置文件

您可以使用 CLI 下载现有配置来修改 configBundleSecret 存储的 config.yaml 文件。进行更改后,您可以重新上传 configBundleSecret 资源,以更改 Red Hat Quay registry。

注意

修改 configBundleSecret 资源存储的 config.yaml 文件是一个多步骤,需要 base64 解码现有配置文件,然后上传更改。在大多数情况下,使用 OpenShift Container Platform Web 控制台对 config.yaml 文件进行更改更为简单。

先决条件

  • 以具有 admin 权限的用户身份登录 OpenShift Container Platform 集群。

流程

  1. 输入以下命令描述 QuayRegistry 资源:

    $ oc describe quayregistry -n <quay_namespace>
    Copy to Clipboard Toggle word wrap
    # ...
      Config Bundle Secret:  example-registry-config-bundle-v123x
    # ...
    Copy to Clipboard Toggle word wrap
  2. 输入以下命令来获取 secret 数据:

    $ oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'
    Copy to Clipboard Toggle word wrap

    输出示例

    {
        "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo="
    }
    Copy to Clipboard Toggle word wrap

  3. 通过传递 >> config.yaml 标志,将数据 解码到当前目录中。例如:

    $ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yaml
    Copy to Clipboard Toggle word wrap
  4. config.yaml 文件进行所需的更改,然后将该文件保存为 config.yaml
  5. 输入以下命令创建新的 configBundleSecret YAML。

    $ touch <new_configBundleSecret_name>.yaml
    Copy to Clipboard Toggle word wrap
  6. 输入以下命令来创建新的 configBundleSecret 资源,传递 config.yaml 文件':

    $ oc -n <namespace> create secret generic <secret_name> \
      --from-file=config.yaml=</path/to/config.yaml> \ 
    1
    
      --dry-run=client -o yaml > <new_configBundleSecret_name>.yaml
    Copy to Clipboard Toggle word wrap
    1
    其中 <config.yaml& gt; 是您的 base64 解码config.yaml 文件。
  7. 输入以下命令来创建 configBundleSecret 资源:

    $ oc create -n <namespace> -f <new_configBundleSecret_name>.yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    secret/config-bundle created
    Copy to Clipboard Toggle word wrap

  8. 输入以下命令更新 QuayRegistry YAML 文件来引用新的 configBundleSecret 对象:

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"<new_configBundleSecret_name>"}}'
    Copy to Clipboard Toggle word wrap

    输出示例

    quayregistry.quay.redhat.com/example-registry patched
    Copy to Clipboard Toggle word wrap

验证

  1. 验证 QuayRegistry CR 已使用新的 configBundleSecret 更新:

    $ oc describe quayregistry -n <quay_namespace>
    Copy to Clipboard Toggle word wrap

    输出示例

    # ...
      Config Bundle Secret: <new_configBundleSecret_name>
    # ...
    Copy to Clipboard Toggle word wrap

    修补 registry 后,Red Hat Quay Operator 会自动协调更改。

以下示例演示了如何在 OpenShift Container Platform 部署的 Red Hat Quay 中添加额外的证书颁发机构。

先决条件

  • 您有 base64 将原始配置捆绑包解码为一个 config.yaml 文件。如需更多信息 ,请参阅下载现有配置
  • 您有一个证书颁发机构(CA)文件或文件。

流程

  1. 创建新的 YAML 文件,如 extra-ca-certificate-config-bundle-secret.yaml

    $ touch extra-ca-certificate-config-bundle-secret.yaml
    Copy to Clipboard Toggle word wrap
  2. 创建 extra-ca-certificate-config-bundle-secret 资源。

    1. 运行以下命令来创建资源:

      $ oc -n <namespace> create secret generic extra-ca-certificate-config-bundle-secret \
        --from-file=config.yaml=</path/to/config.yaml> \ 
      1
      
        --from-file=extra_ca_cert_<name-of-certificate-one>=<path/to/certificate_one> \ 
      2
      
        --from-file=extra_ca_cert_<name-of-certificate-two>=<path/to/certificate_two> \ 
      3
      
        --from-file=extra_ca_cert_<name-of-certificate-three>=<path/to/certificate_three> \ 
      4
      
        --dry-run=client -o yaml > extra-ca-certificate-config-bundle-secret.yaml
      Copy to Clipboard Toggle word wrap
      1
      其中 <config.yaml& gt; 是您的 base64 解码config.yaml 文件。
      2
      要添加到系统信任捆绑包中的额外 CA 文件。
      3
      可选。要添加到系统信任捆绑包中的第二个 CA 文件。
      4
      可选。要添加到系统信任捆绑包中的第三个 CA 文件。
  3. 可选。您可以输入以下命令来检查 extra-ca-certificate-config-bundle-secret.yaml 文件的内容:

    $ cat extra-ca-certificate-config-bundle-secret.yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    apiVersion: v1
    data:
      config.yaml: QUxMT1dfUFVMTFNfV0lUSE9VVF9TVFJJQ1RfTE9HR0lORzogZmFsc2UKQVVUSEVOVElDQVRJT05fVFlQRTogRGF0YWJhc2UKREVGQVVMVF9UQUdfRVhQSVJBVElPTjogMncKUFJFRkVSU...
      extra_ca_cert_certificate-one: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQyVENDQXNHZ0F3SUJBZ0lVS2xOai90VUJBZHBkNURjYkdRQUo4anRuKzd3d0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZERUxNQWtHQ...
      extra_ca_cert_certificate-three: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ0ekNDQXN1Z0F3SUJBZ0lVQmJpTXNUeExjM0s4ODNWby9GTThsWXlOS2lFd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZERUxNQWtHQ...
      extra_ca_cert_certificate-two: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ0ekNDQXN1Z0F3SUJBZ0lVVFVPTXZ2YVdFOFRYV3djYTNoWlBCTnV2QjYwd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZERUxNQWtHQ...
    kind: Secret
    metadata:
      creationTimestamp: null
      name: custom-ssl-config-bundle-secret
      namespace: <namespace>
    Copy to Clipboard Toggle word wrap

  4. 输入以下命令来创建 configBundleSecret 资源:

    $ oc create -n <namespace> -f extra-ca-certificate-config-bundle-secret.yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    secret/extra-ca-certificate-config-bundle-secret created
    Copy to Clipboard Toggle word wrap

  5. 输入以下命令更新 QuayRegistry YAML 文件,以引用 extra-ca-certificate-config-bundle-secret 对象:

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"extra-ca-certificate-config-bundle-secret"}}'
    Copy to Clipboard Toggle word wrap

    输出示例

    quayregistry.quay.redhat.com/example-registry patched
    Copy to Clipboard Toggle word wrap

  6. 输入以下命令来确保 QuayRegistry YAML 文件已更新为使用额外的 CA 证书 configBundleSecret 资源:

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    # ...
      configBundleSecret: extra-ca-certificate-config-bundle-secret
    # ...
    Copy to Clipboard Toggle word wrap

在 Kubernetes 上部署时,Red Hat Quay 将 secret 中的挂载为卷来存储配置资产。目前,这会破坏超级用户面板的上传证书功能。

作为临时解决方案,在部署 Red Hat Quay base64 编码证书可以添加到 secret 中。

当在 Kubernetes 上部署 Red Hat Quay 时,请使用以下步骤添加自定义 SSL/TLS 证书。

先决条件

  • 已部署 Red Hat Quay。
  • 您有一个自定义 ca.crt 文件。

流程

  1. 输入以下命令对 SSL/TLS 证书的内容进行 Base64 编码:

    $ cat ca.crt | base64 -w 0
    Copy to Clipboard Toggle word wrap

    输出示例

    ...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
    Copy to Clipboard Toggle word wrap

  2. 输入以下 kubectl 命令来编辑 quay-enterprise-config-secret 文件:

    $ kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secret
    Copy to Clipboard Toggle word wrap
  3. 为证书添加一个条目,并粘贴条目下的完整 base64 编码字符串er。例如:

      custom-cert.crt:
    c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
    Copy to Clipboard Toggle word wrap
  4. 使用 kubectl delete 命令删除所有 Red Hat Quay pod。例如:

    $ kubectl delete pod quay-operator.v3.7.1-6f9d859bd-p5ftc quayregistry-clair-postgres-7487f5bd86-xnxpr quayregistry-quay-app-upgrade-xq2v6  quayregistry-quay-database-859d5445ff-cqthr quayregistry-quay-redis-84f888776f-hhgms
    Copy to Clipboard Toggle word wrap

    之后,Red Hat Quay 部署会自动将 pod 替换为新证书数据。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部