保护 Red Hat Quay


Red Hat Quay 3.15

保护 Red Hat Quay

摘要

保护 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
  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
  4. 输入以下命令生成服务器密钥:

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

    $ openssl req -new -key ssl.key -out ssl.csr
  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 []:
  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

  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
  9. 输入以下命令确认您的创建证书和密钥:

    $ ls /path/to/certificates

    输出示例

    rootCA.key ssl-bundle.cert ssl.key custom-ssl-config-bundle-secret.yaml rootCA.pem ssl.cert
    openssl.cnf rootCA.srl  ssl.csr

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
  2. 输入以下命令进入配置目录:

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

    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_container_name>
  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.4

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
  2. 在登录到 Red Hat Quay registry 时,验证您不再需要使用 the -tls-verify=false 选项:

    $ sudo podman login quay-server.example.com

    输出示例

    Login Succeeded!

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

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

流程

  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 文档。

当在 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
  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
      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

    输出示例

    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>

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

    $ oc create -n <namespace> -f custom-ssl-config-bundle-secret.yaml

    输出示例

    secret/custom-ssl-config-bundle-secret created

  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"}}'

    输出示例

    quayregistry.quay.redhat.com/example-registry patched

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

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

    输出示例

    quayregistry.quay.redhat.com/example-registry patched

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

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml

    输出示例

    # ...
      configBundleSecret: custom-ssl-config-bundle-secret
    # ...
    spec:
      components:
      - kind: tls
        managed: false
    # ...

验证

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

    $  openssl s_client -connect <quay-server.example.com>:443

    输出示例

    # ...
    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)
    
    # ...

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>"
  2. 在 Red Hat Quay 目录中,运行以下命令来创建一个新的 YAML 文件,如 quay-config-bundle.yaml

    $ touch quay-config-bundle.yaml
  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
    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
    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

    输出示例

    secret/quay-config-bundle created

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

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

    输出示例

    quayregistry.quay.redhat.com/example-registry patched

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

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml

    输出示例

    # ...
      configBundleSecret: quay-config-bundle
    # ...

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

    输出示例

    -----BEGIN CERTIFICATE-----
    MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV...
    -----END CERTIFICATE-----

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

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

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

    $ tree /path/to/quay_config_folder/extra_ca_certs

    输出示例

    /path/to/quay_config_folder/extra_ca_certs
    ├── storage.crt----

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

    $ podman ps

    输出示例

    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

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

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

    $ podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pem

    输出示例

    -----BEGIN CERTIFICATE-----
    MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV...
    -----END CERTIFICATE-----

在 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 修改配置文件

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

注意

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

先决条件

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

流程

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

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

    $ oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'
    {
        "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo="
    }
  3. 通过传递 >> config.yaml 标志,将数据 解码到当前目录中。例如:

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

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

    $ oc -n <namespace> create secret generic <secret_name> \
      --from-file=config.yaml=</path/to/config.yaml> \
      --dry-run=client -o yaml > <new_configBundleSecret_name>.yaml

    其中:

    </path/to/config.yaml>
    指定您的 base64 解码的 config.yaml 文件。
  7. 输入以下命令来创建 configBundleSecret 资源:

    $ oc create -n <namespace> -f <new_configBundleSecret_name>.yaml
    secret/config-bundle created
  8. 输入以下命令更新 QuayRegistry YAML 文件来引用新的 configBundleSecret 对象:

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"<new_configBundleSecret_name>"}}'
    quayregistry.quay.redhat.com/example-registry patched

验证

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

    $ oc describe quayregistry -n <quay_namespace>
    # ...
      Config Bundle Secret: <new_configBundleSecret_name>
    # ...

    修补 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
  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
      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

    输出示例

    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>

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

    $ oc create -n <namespace> -f extra-ca-certificate-config-bundle-secret.yaml

    输出示例

    secret/extra-ca-certificate-config-bundle-secret created

  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"}}'

    输出示例

    quayregistry.quay.redhat.com/example-registry patched

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

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml

    输出示例

    # ...
      configBundleSecret: extra-ca-certificate-config-bundle-secret
    # ...

要在 Kubernetes 上的 Red Hat Quay 部署中添加自定义 SSL/TLS 证书,您可以对证书进行 base64 编码,将其添加到 config secret 中,并重启 pod。此流程针对超级用户面板证书上传功能无法用于 Kubernetes 部署的限制。

先决条件

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

流程

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

    $ cat ca.crt | base64 -w 0

    输出示例

    ...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=

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

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

      custom-cert.crt:
    c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
  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

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

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部