部署 Red Hat Quay for 概念验证(非生产)目的

Red Hat Quay 3.8

部署 Red Hat Quay

Red Hat OpenShift Documentation Team

摘要

Red Hat Quay 入门

前言

Red Hat Quay 是一个企业级的 registry,用于构建、保护和提供容器镜像。此流程描述了如何为概念验证(非生产)目的部署 Red Hat Quay。

第 1 章 概述

Red Hat Quay 包括以下功能:

  • 高可用性
  • geo-replication
  • 存储库镜像
  • Docker v2,模式 2 (多架构)支持
  • 持续集成
  • 使用 Clair 进行安全扫描
  • 自定义日志轮转
  • 零停机时间垃圾回收
  • 24/7 支持

Red Hat Quay 对以下提供支持:

  • 多种身份验证和访问方法
  • 多个存储后端
  • Quay、Clair 和存储后端的自定义证书
  • 应用程序 registry
  • 不同的容器镜像类型

1.1. 架构

Red Hat Quay 包含多个核心组件,包括内部和外部组件。

1.1.1. 内部组件

Red Hat Quay 包括以下内部组件:

  • Quay (容器 registry)。将 Quay 容器作为服务运行,由容器集中的多个组件组成。
  • Clair.扫描容器镜像以获取漏洞,并建议进行修复。

1.1.2. 外部组件

Red Hat Quay 包括以下外部组件:

  • 数据库.Red Hat Quay 用作其主要元数据存储。请注意,这不适用于镜像存储。
  • redis (密钥值存储).存储实时构建器镜像和 Red Hat Quay 指南。还包括垃圾回收所需的锁定机制。
  • 云存储.对于支持的部署,必须使用以下存储类型之一:

    • 公有云存储.在公有云中,您应该使用云供应商的对象存储,如 Amazon Web Services 的 Amazon S3 或 Google Cloud 的 Google Cloud Storage。
    • 私有云存储.在私有云中,需要兼容 S3 或 Swift 的对象存储,如 Ceph RADOS 或 OpenStack Swift。
警告

对于任何生产环境的配置,不要使用"本地挂载的目录"存储引擎。不支持挂载的 NFS 卷。本地存储用于 Red Hat Quay 测试安装。

第 2 章 Red Hat Quay 入门

Red Hat Quay registry 可以在一台物理机或虚拟机上为非生产目的部署。

2.1. 前提条件

  • Red Hat Enterprise Linux (RHEL) 8

  • 一个有效的红帽订阅
  • 两个或多个虚拟 CPU
  • 4 GB 或更多 RAM
  • 测试系统中大约 30 GB 磁盘空间,可按如下方式中断:

    • Red Hat Enterprise Linux (RHEL)操作系统大约需要 10 GB 磁盘空间。
    • 运行三个容器的 Docker 存储大约需要 10 GB 磁盘空间。
    • Red Hat Quay 本地存储大约 10 GB 磁盘空间。

      注意

      CEPH 或其他本地存储可能需要更多内存。

      有关大小大小的更多信息,请参阅 Quay 3.x 重新定义 Guid 行

注意

对于 Red Hat Quay 3.8 的高可用性、生产质量部署,建议使用 Red Hat Enterprise Linux (RHEL) 8。RHEL 7 尚未使用 Red Hat Quay 3.8 进行测试,并将在以后的发行版本中删除。

2.1.1. 使用 Podman

本文档使用 Podman 来创建和部署容器。有关 Podman 和相关技术的更多信息,请参阅在 Red Hat Enterprise Linux 8 上构建、运行和管理 Linux 容器

重要

如果您的系统中没有安装 Podman,则可能会使用等同的 Docker 命令,但不建议这样做。Docker 尚未使用 Red Hat Quay 3.8 进行测试,并将在以后的发行版本中删除。对于 Red Hat Quay 3.8 的生产环境质量部署,建议使用 podman。

2.2. 为 Red Hat Enterprise Linux 准备 Red Hat Quay 概念验证部署

使用以下步骤为 Red Hat Quay 概念部署配置 Red Hat Enterprise Linux (RHEL)。

2.2.1. 安装并注册 RHEL 服务器

使用以下步骤为 Red Hat Quay 概念部署配置 Red Hat Enterprise Linux (RHEL)服务器。

流程

  1. 安装最新的 RHEL 8 服务器。如果需要桌面,您可以进行最少的 shell 访问安装,或者 Server 和 GUI。
  2. 注册并订阅 RHEL 服务器系统,如 如何使用 Red Hat Subscription-Manager 在红帽客户门户网站中注册和订阅 RHEL 系统
  3. 输入以下命令注册您的系统并列出可用的订阅。选择可用的 RHEL 服务器订阅,附加到其池 ID,并升级到最新版本:

    # subscription-manager register --username=<user_name> --password=<password>
    # subscription-manager refresh
    # subscription-manager list --available
    # subscription-manager attach --pool=<pool_id>
    # yum update -y

2.2.2. 安装 Podman

使用以下步骤安装 Podman。

流程

  • 输入以下命令安装 Podman:

    $ sudo yum install -y podman
  • 另外,您可以安装 container-tools 模块,该模块拉取到完整的容器软件包集合:

    $ sudo yum module install -y container-tools

2.2.3. registry 身份验证

使用以下步骤验证您的 registry 以获取 Red Hat Quay 概念验证。

流程

  1. 按照 Red Hat Container Registry 身份验证流程,将身份验证设置为 registry.redhat.io。通过设置身份验证,您可以拉取 Quay 容器。

    注意

    这与早期版本的 Red Hat Quay 不同,当镜像托管在 Quay.io 上时。

  2. 输入以下命令登录到 registry:

    $ sudo podman login registry.redhat.io

    您会被会提示输入您的用户名密码

2.2.4. 防火墙配置

如果您的系统上运行了防火墙,可能需要添加允许访问 Red Hat Quay 的规则。使用以下步骤为概念验证部署配置防火墙。

流程

  • 所需的命令取决于您系统中映射的端口,例如:

    $ firewall-cmd --permanent --add-port=80/tcp
    $ firewall-cmd --permanent --add-port=443/tcp
    $ firewall-cmd --permanent --add-port=5432/tcp
    $ firewall-cmd --permanent --add-port=5433/tcp
    $ firewall-cmd --permanent --add-port=6379/tcp
    $ firewall-cmd --reload

2.2.5. IP 地址和命名服务

在 Red Hat Quay 中配置组件容器有几种方法,以便它们可以相互通信,例如:

  • 将 IP 地址用于容器。您可以使用 podman inspect 确定容器的 IP 地址,然后在指定连接字符串时使用配置工具中的值,例如:

    $ sudo podman inspect -f "{{.NetworkSettings.IPAddress}}" postgresql-quay

    此方法容易重新启动,因为容器的 IP 地址将在重新启动后发生更改。

  • 使用命名服务。如果您希望部署在容器重启后保留(通常会导致 IP 地址更改),您可以实施命名服务。例如,可以使用 dnsname 插件用于允许容器按名称相互解析。
  • 使用主机网络。您可以使用 podman run 命令和 --net=host 选项,然后在配置中指定地址时使用主机上的容器端口。当两个容器希望使用相同的端口时,这个选项容易受到端口冲突的影响。不建议使用这个方法。
  • 配置端口映射。您可以使用端口映射来公开主机上的端口,然后将这些端口与主机 IP 地址或主机名结合使用。

本文档使用端口映射并假定主机系统的静态 IP 地址。在整个部署中,quay-sever.example.com192.168.1.112 IP 地址一同使用。此信息在 /etc/hosts 文件中建立,例如:

$ cat /etc/hosts

输出示例:

192.168.1.112   quay-server.example.com

表 2.1. 概念端口映射示例

组件端口映射地址

Quy

-p 80:8080 -p 443:8443

http://quay-server.example.com

Postgres for Quay

-p 5432:5432

quay-server.example.com:5432

Redis

-p 6379:6379

quay-server.example.com:6379

Clair V4 的 Postgres

-p 5433:5432

quay-server.example.com:5433

Clair V4

-p 8081:8080

http://quay-server.example.com:8081

2.3. 配置数据库

Red Hat Quay 需要数据库来存储元数据。Postgres 在整个文档中使用,我们推荐在高可用性配置中使用。或者,您也可以通过类似配置的方法使用 MySQL,如下所述。

2.3.1. 设置 Postgres

对于 Red Hat Quay 概念验证,使用本地文件系统上的目录来持久保留数据库数据。

流程

  1. 在安装文件夹中,由 $QUAY 变量表示,请输入以下命令为数据库数据创建一个目录:

    $ mkdir -p $QUAY/postgres-quay
  2. 输入以下命令设置适当的权限:

    $ setfacl -m u:26:-wx $QUAY/postgres-quay
  3. 启动 Postgres 容器,使用数据库数据的卷定义指定用户名、密码和数据库名称和端口:

    $ sudo podman run -d --rm --name postgresql-quay \
      -e POSTGRESQL_USER=quayuser \
      -e POSTGRESQL_PASSWORD=quaypass \
      -e POSTGRESQL_DATABASE=quay \
      -e POSTGRESQL_ADMIN_PASSWORD=adminpass \
      -p 5432:5432 \
      -v $QUAY/postgres-quay:/var/lib/pgsql/data:Z \
      registry.redhat.io/rhel8/postgresql-13:1-109
  4. 运行以下命令,确保已安装 Postgres pg_trgm 模块:

    $ sudo podman exec -it postgresql-quay /bin/bash -c 'echo "CREATE EXTENSION IF NOT EXISTS pg_trgm" | psql -d quay -U postgres'
    注意

    Quay 容器需要 pg_trgm 模块。

2.4. 配置 Redis

Redis ia 是一个键值存储,供 Red Hat Quay 用于实时构建器日志和 Red Hat Quay 指南。

2.4.1. 设置 Redis

使用以下步骤为 Red Hat Quay 概念部署 Redis 容器。

流程

  • 输入以下命令启动 Redis 容器,指定端口和密码:

    $ sudo podman run -d --rm --name redis \
      -p 6379:6379 \
      -e REDIS_PASSWORD=strongpassword \
      registry.redhat.io/rhel8/redis-6:1-110

2.5. 配置 Red Hat Quay

使用以下步骤生成详细说明所有组件的配置文件,包括 registry 设置、数据库和 Redis 连接参数。

流程

  1. 若要生成一个配置文件,请输入以下命令以 config 模式运行 Quay 容器:您必须指定一个密码,例如,字符串 secret

    $ sudo podman run --rm -it --name quay_config -p 80:8080 -p 443:8443 registry.redhat.io/quay/quay-rhel8:v3.8.7 config secret
  2. 使用浏览器访问 http://quay-server.example.com 的配置工具的用户界面。

    注意

    本文档假设您已在 /etc/hosts 文件中配置了 quay-server.example.com 主机名。

  3. 使用指定的用户名和密码登录
  4. 使用您在配置 Red Hat Quay 的步骤 1 中设置的用户名和密码登录。

    注意

    如果您遵循此步骤,则用户名为 quayconfig,密码是 secret

2.5.1. Red Hat Quay setup

在 Red Hat Quay 配置编辑器中,您必须输入以下凭证:

  • 基本配置
  • 服务器配置
  • 数据库
  • Redis

2.5.1.1. 基本配置

Basic Configuration 下,填充 Registry 标题和 Registry title Short 字段。如果填充了默认值,可以使用默认值。

2.5.1.2. 服务器配置

Server Hostname 下,为可通过网络访问 registry 的位置指定 HTTP 主机和端口。

如果您遵循本文档中的说明,请输入 quay-server.example.com

2.5.1.3. 数据库

Database 部分中,指定 Red Hat Quay 用来存储元数据的数据库的连接详情。

如果您遵循本文档中用于部署概念验证系统的说明,请输入以下值:

  • 数据库类型: Postgres
  • 数据库服务器: quay-server.example.com:5432
  • Username: quayuser
  • Password: quaypass
  • 数据库名称: quay

2.5.1.4. Redis

Redis 键值存储用于存储实时事件和构建日志。

如果您遵循本文档中的说明来部署概念验证系统,请在 Redis 部分下输入以下凭证:

  • Redis Hostname: quay-server.example.com
  • Redis 端口: 6379 (默认)
  • Redis password: strongpassword

2.5.2. 验证并下载配置

设定了所有必填字段后,点 Validate Configuration Changes 来验证您的设置。如果报告任何错误,请继续编辑配置,直到设置有效,Red Hat Quay 可以连接到您的数据库和 Redis 服务器。

验证后,下载 配置文件。停止运行配置编辑器的 Quay 容器。

2.6. 部署 Red Hat Quay

2.6.1. 前提条件

  • Red Hat Quay 数据库正在运行。
  • Redis 服务器正在运行。
  • 您已生成了有效的配置文件。
  • 您已停止运行配置编辑器的 Quay 容器。

2.6.2. 准备配置文件夹

使用以下步骤准备您的 Red Hat Quay 配置文件夹。

流程

  1. 创建目录以将 Red Hat Quay 配置捆绑包复制到:

    $ mkdir $QUAY/config
  2. 将生成的 Red Hat Quay 配置捆绑包复制到目录中:

    $ cp ~/Downloads/quay-config.tar.gz ~/config
  3. 进入该目录:

    $ cd $QUAY/config
  4. 解包 Red Hat Quay 配置捆绑包:

    $ tar xvf quay-config.tar.gz

2.6.3. 为镜像数据准备本地存储

使用以下步骤设置本地文件系统以存储 registry 镜像。

流程

  1. 输入以下命令创建用于存储 registry 镜像的本地目录:

    $ mkdir $QUAY/storage
  2. 设置用于存储 registry 镜像的目录:

    $ setfacl -m u:1001:-wx $QUAY/storage

2.6.4. 部署 Red Hat Quay registry

  1. 按照以下步骤部署 Quay registry 容器。
  2. 输入以下命令启动 Quay 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.8.7

2.7. 使用 Red Hat Quay

以下步骤允许您使用 界面并创建新的组织和存储库,并搜索和浏览现有存储库。执行以下步骤 3,您可以使用 命令行界面与注册表交互,以及推送和拉取镜像。

  1. 使用您的浏览器访问位于 http://quay-server.example.com 的 Red Hat Quay registry 的用户界面,假设已在 /etc/hosts 文件中配置了 quay-server.example.com 作为您的主机名。
  2. 单击 Create Account,再添加一个用户,如 quayadmin密码为
  3. 在命令行中登录 registry:

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

2.7.1. 推送和拉取镜像

  1. 要测试从 Red Hat Quay registry 中推送和拉取镜像,首先从外部注册表中提取示例镜像:

    $ sudo podman pull busybox
    Trying to pull docker.io/library/busybox...
    Getting image source signatures
    Copying blob 4c892f00285e done
    Copying config 22667f5368 done
    Writing manifest to image destination
    Storing signatures
    22667f53682a2920948d19c7133ab1c9c3f745805c14125859d20cede07f11f9
  2. 使用 podman images 命令查看本地副本:

    $ sudo podman images
    REPOSITORY                          TAG      IMAGE ID       CREATED         SIZE
    docker.io/library/busybox           latest   22667f53682a   14 hours ago    1.45 MB
    ...
  3. 标记此镜像,以准备将其推送到 Red Hat Quay registry:

    $ sudo podman tag docker.io/library/busybox quay-server.example.com/quayadmin/busybox:test
  4. 接下来,将镜像推送到 Red Hat Quay registry。此步骤后,您可以使用浏览器查看存储库中标记的镜像。

    $ sudo podman push --tls-verify=false quay-server.example.com/quayadmin/busybox:test
    Getting image source signatures
    Copying blob 6b245f040973 done
    Copying config 22667f5368 done
    Writing manifest to image destination
    Storing signatures
  5. 要从命令行测试对镜像的访问,首先删除镜像的本地副本:

    $ sudo podman rmi quay-server.example.com/quayadmin/busybox:test
    Untagged: quay-server.example.com/quayadmin/busybox:test
  6. 再次从 Red Hat Quay registry 中拉取(pull)镜像:

    $ sudo podman pull --tls-verify=false quay-server.example.com/quayadmin/busybox:test
    Trying to pull quay-server.example.com/quayadmin/busybox:test...
    Getting image source signatures
    Copying blob 6ef22a7134ba [--------------------------------------] 0.0b / 0.0b
    Copying config 22667f5368 done
    Writing manifest to image destination
    Storing signatures
    22667f53682a2920948d19c7133ab1c9c3f745805c14125859d20cede07f11f9

第 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.8.7 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.8.7

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.8.7

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 配置为信任根证书颁发机构(CA)。

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

当您尝试访问 Quay registry 时,本例中为 https://quay-server.example.com,浏览器会警告潜在的风险:

Potential risk

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

Connection not secure

后续小节中介绍了如何将系统配置为信任根证书颁发机构(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. 将 root CA 文件复制到合并系统范围的信任存储中:

    $ 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. 要从系统范围的信任中删除 root CA,请删除该文件并更新配置:

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

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

3.2. Red Hat Quay 超级用户

超级用户 是已扩展权限的 Quay 用户帐户,包括:

  • 管理用户
  • 管理机构
  • 管理服务密钥
  • 查看更改日志
  • 查询用量日志
  • 创建全局可见的用户信息

3.2.1. 使用 UI 将超级用户添加到 Quay

本节介绍如何使用 Quay UI 添加超级用户。要使用命令行界面添加超级用户,请查看以下部分。

  1. 以配置模式启动 Quay 容器,将现有配置载入为卷:

    $ sudo podman run --rm -it --name quay_config \
      -p 8080:8080 \
      -p 443:8443 \
      -v $QUAY/config:/conf/stack:Z \
      registry.redhat.io/quay/quay-rhel8:v3.8.7 config secret
  2. 在 UI 的 Access Settings 部分下,在 Super Users 字段中输入用户(本例中为 quayadmin)的名称,然后单击 Add
  3. 验证并下载 配置文件,然后终止在配置模式下运行的 Quay 容器。将 config.yaml 文件提取到配置目录,并在 registry 模式中重启 Quay 容器:

    $ 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.8.7

3.2.2. 编辑 config.yaml 文件以添加超级用户

您还可以通过直接编辑 config.yaml 文件来添加超级用户。超级用户帐户列表作为数组存储在 SUPER_USERS 中。

  • 如果容器 registry 正在运行,请将 SUPER_USERS 数组添加到 config.yaml 文件中:

    SERVER_HOSTNAME: quay-server.example.com
    SETUP_COMPLETE: true
    SUPER_USERS:
      - quayadmin
    ...

3.2.3. 访问超级用户 admin 面板

  1. 重启 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.8.7
  2. 点击 UI 右上角的当前用户名或 avatar 来访问 Super User Admin Panel。如果用户已添加为超级用户,则将在名为 Super User Admin Panel 的下拉列表中显示一个额外的项。

    Super User Admin Panel

3.2.3.1. 创建全局可见的用户信息

使用 Superuser Admin Panel,您可以为您的机构创建 NormalWarningError 信息。

  1. 在 UI 右上角点击您的用户名。选择 Super User Admin Panel
  2. 在 Red Hat Quay Management 页面中,单击左侧面板上的 全局可见用户信息
  3. 点击 Create Message 以显示一个包含 NormalWarningError 消息类型的下拉菜单:

    Creating a new messsage

  4. 选择 Click to set message 以进入消息,然后单击 Create Message

可以通过单击 Options 来删除消息,然后删除 消息

3.3. 存储库镜像

3.3.1. 存储库镜像

Red Hat Quay 存储库镜像可让您将来自外部容器 registry 或其他本地 registry 的镜像镜像到 Red Hat Quay 集群中。使用存储库镜像功能,您可以根据存储库名称和标签将镜像同步到 Red Hat Quay。

在启用了存储库镜像的 Red Hat Quay 集群中,您可以执行以下操作:

  • 从外部 registry 中选择要镜像的存储库
  • 添加凭证以访问外部 registry
  • 识别要同步的特定容器镜像仓库名称和标签
  • 设置存储库同步的间隔
  • 检查同步的当前状态

要使用镜像功能,您需要执行以下操作:

  • 在 Red Hat Quay 配置文件中启用存储库镜像
  • 运行存储库镜像 worker
  • 创建已镜像的软件仓库

所有存储库镜像配置均可使用配置工具 UI 或 Red Hat Quay API 执行。

3.3.2. 镜像配置 UI

  1. 以配置模式启动 Quay 容器,再选择 Enable Repository mirror 复选框。如果您要在镜像过程中需要 HTTPS 通信并验证证书,请选择 HTTPS 和证书验证复选框。

    Enable mirroring and require HTTPS and verified certificates

  2. 验证并下载 配置文件,然后使用更新的 配置文件在 registry 模式中重启 Quay。

3.3.3. 镜像 worker

使用以下步骤启动存储库镜像 worker。

流程

  • 如果您还没有使用 /root/ca.crt 证书配置 TLS 通信,请输入以下命令来使用 repomirror 选项启动 Quay pod:

    $ sudo podman run -d --name mirroring-worker \
      -v $QUAY/config:/conf/stack:Z \
      registry.redhat.io/quay/quay-rhel8:v3.8.7 repomirror
  • 如果您使用 /root/ca.crt 证书配置了 TLS 通信,请输入以下命令启动存储库镜像 worker:

    $ sudo podman run -d --name mirroring-worker \
      -v $QUAY/config:/conf/stack:Z \
      -v /root/ca.crt:/etc/pki/ca-trust/source/anchors/ca.crt:Z \
      registry.redhat.io/quay/quay-rhel8:v3.8.7 repomirror

3.3.4. 创建已镜像的存储库

从外部容器 registry 镜像存储库时,您必须创建一个新的私有存储库。通常,名称与目标存储库相同,如 quay-rhel8

Create new Red Hat Quay repo

3.3.4.1. 存储库镜像设置

使用以下步骤调整已镜像存储库的设置。

前提条件

  • 您已在 Red Hat Quay 配置文件中启用了存储库镜像。
  • 您已部署了镜像 worker。

流程

  1. 在 Settings 选项卡中,将 Repository State 设置为 Mirror

    Create a new Red Hat Quay repo mirror

  2. 在 Mirror 选项卡中,输入连接到外部 registry 的详情,以及标签、调度和访问信息:

    Repository mirroring

  3. 在以下字段中输入所需详情:

    • registry Location: 您要镜像的外部存储库,如 registry.redhat.io/quay/quay-rhel8
    • tags: 此字段是必需的。您可以输入以逗号分隔的单个标签或标签模式列表。(请参阅 标签模式 部分了解详细信息。)
    • 开始日期: 镜像开始的日期。默认使用当前的日期和时间。
    • 同步间隔: 默认每隔 24 小时同步一次。您可以按小时或天更改它。
    • 机器人用户: 创建新的机器人帐户或选择一个现有的机器人帐户来开展镜像。
    • Username: 用于访问包含您要镜像存储库的外部 registry 的用户名。
    • Password: 与 Username 关联的密码。请注意,密码不能包含需要转义字符(\)的字符。

3.3.4.2. 高级设置

Advanced Settings 部分中,您可以使用以下选项配置 SSL/TLS 和代理:

  • 验证 TLS: 如果您需要 HTTPS,并在与目标远程 registry 通信时验证证书,请选择这个选项。
  • 接受未签名的镜像 : 选择这个选项允许镜像未签名的镜像。
  • HTTP Proxy: 如果您需要 HTTPS,并在与目标远程 registry 通信时验证证书,请选择这个选项。
  • https PROXY: 如果需要代理服务器,请识别访问远程站点所需的 HTTPS 代理服务器。
  • 无代理: 不需要代理的位置列表。

3.3.4.3. 现在同步

使用以下步骤启动镜像操作。

流程

  • 要执行即时镜像操作,请按存储库镜像选项卡上的 Sync Now 按钮。日志位于 Usage Logs 选项卡上:

    Usage logs

    镜像完成后,镜像将显示在 Tags 选项卡中:

    Repository mirroring tags

    以下是完成的存储库镜像屏幕的示例:

    Repository mirroring details

3.3.5. 镜像标签模式

必须至少输入一个标签。下表引用了可能的镜像标签模式。

3.3.5.1. 模式语法

pattern

Description

*

匹配所有字符

?

匹配任何单个字符

[seq]

匹配 seq中的任何字符

[!seq]

匹配不属于 seq的任何字符

3.3.5.2. 标签模式示例

Pattern 示例

匹配示例

v3*

v32, v3.1, v3.2, v3.2-4beta, v3.3

v3.*

v3.1, v3.2, v3.2-4beta

v3.?

v3.1, v3.2, v3.3

v3.[12]

v3.1, v3.2

v3.[12]*

v3.1, v3.2, v3.2-4beta

v3.[!1]*

v3.2, v3.2-4beta, v3.3

3.4. Clair for Red Hat Quay

Clair v4 (Clair)是一个开源应用程序,它利用静态代码分析来解析镜像内容和报告影响内容的漏洞。Clair 与 Red Hat Quay 打包,并可用于独立和 Operator 部署。它可以在高度可扩展的配置中运行,其中组件可根据企业环境单独扩展。

3.4.1. 在独立的 Red Hat Quay 部署上设置 Clair

对于独立的 Red Hat Quay 部署,您可以手动设置 Clair。

流程

  1. 在 Red Hat Quay 安装目录中,为 Clair 数据库数据创建新目录:

    $ mkdir /home/<user-name>/quay-poc/postgres-clairv4
  2. 输入以下命令为 postgres-clairv4 文件设置适当的权限:

    $ setfacl -m u:26:-wx /home/<user-name>/quay-poc/postgres-clairv4
  3. 输入以下命令部署 Clair Postgres 数据库:

    $ sudo podman run -d --name postgresql-clairv4 \
      -e POSTGRESQL_USER=clairuser \
      -e POSTGRESQL_PASSWORD=clairpass \
      -e POSTGRESQL_DATABASE=clair \
      -e POSTGRESQL_ADMIN_PASSWORD=adminpass \
      -p 5433:5433 \
      -v /home/<user-name>/quay-poc/postgres-clairv4:/var/lib/pgsql/data:Z \
      registry.redhat.io/rhel8/postgresql-13:1-109
  4. 为您的 Clair 部署安装 Postgres uuid-ossp 模块:

    $ podman exec -it postgresql-clairv4 /bin/bash -c 'echo "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\"" | psql -d clair -U postgres'

    输出示例

    CREATE EXTENSION

    注意

    Clair 需要将 uuid-ossp 扩展添加到其 Postgres 数据库中。对于具有适当权限的用户,Clair 将自动添加扩展。如果用户没有正确的权限,则必须在启动 Clair 前添加扩展。

    如果没有扩展,当 Clair 尝试启动时会显示以下错误: ERROR: Please load the "uuid-ossp" 扩展。(SQLSTATE 42501).

  5. 如果 Quay 容器正在运行,并在配置模式中重启它,将现有配置载入为卷:

    $ sudo podman run --rm -it --name quay_config \
      -p 80:8080 -p 443:8443 \
      -v $QUAY/config:/conf/stack:Z \
      registry.redhat.io/quay/quay-rhel8:v3.8.2 config secret
  6. 登录到配置工具,再单击 UI 的 Security Scanner 部分中的 Enable Security Scanning
  7. 使用 quay-server 系统上尚未使用的端口设置 Clair 的 HTTP 端点,例如 8081
  8. 使用 Generate PSK 按钮创建预共享密钥(PSK)。

    安全扫描器 UI

    Security Scanner

  9. 验证并下载 Red Hat Quay 的 config.yaml 文件,然后停止运行配置编辑器的 Quay 容器。
  10. 将新配置捆绑包提取到 Red Hat Quay 安装目录中,例如:

    $ tar xvf quay-config.tar.gz -d /home/<user-name>/quay-poc/
  11. 为您的 Clair 配置文件创建一个文件夹,例如:

    $ mkdir /etc/opt/clairv4/config/
  12. 进入 Clair 配置文件夹:

    $ cd /etc/opt/clairv4/config/
  13. 创建 Clair 配置文件,例如:

    http_listen_addr: :8081
    introspection_addr: :8088
    log_level: debug
    indexer:
      connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable
      scanlock_retry: 10
      layer_scan_concurrency: 5
      migrations: true
    matcher:
      connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable
      max_conn_pool: 100
      run: ""
      migrations: true
      indexer_addr: clair-indexer
    notifier:
      connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable
      delivery_interval: 1m
      poll_interval: 5m
      migrations: true
    auth:
      psk:
        key: "MTU5YzA4Y2ZkNzJoMQ=="
        iss: ["quay"]
    # tracing and metrics
    trace:
      name: "jaeger"
      probability: 1
      jaeger:
        agent_endpoint: "localhost:6831"
        service_name: "clair"
    metrics:
      name: "prometheus"

    有关 Clair 的配置格式的更多信息,请参阅 Clair 配置参考

  14. 使用容器镜像启动 Clair,从您创建的文件中挂载在配置中:

    $ sudo podman run -d --name clairv4 \
    -p 8081:8081 -p 8088:8088 \
    -e CLAIR_CONF=/clair/config.yaml \
    -e CLAIR_MODE=combo \
    -v /etc/opt/clairv4/config:/clair:Z \
    registry.redhat.io/quay/clair-rhel8:v3.8.7
    注意

    也有可能运行多个 Clair 容器,但对于单一容器以外的部署场景,我们强烈建议使用 Kubernetes 或 OpenShift Container Platform 等容器编配器。

3.4.2. 测试 Clair

使用以下步骤在一个独立 Red Hat Quay 部署或基于 OpenShift Container Platform Operator 的部署中测试 Clair。

前提条件

  • 您已部署了 Clair 容器镜像。

流程

  1. 输入以下命令拉取示例镜像:

    $ podman pull ubuntu:20.04
  2. 输入以下命令将镜像标记到 registry:

    $ sudo podman tag docker.io/library/ubuntu:20.04 <quay-server.example.com>/<user-name>/ubuntu:20.04
  3. 输入以下命令将镜像推送到 Red Hat Quay registry:

    $ sudo podman push --tls-verify=false quay-server.example.com/quayadmin/ubuntu:20.04
  4. 通过 UI 登录您的 Red Hat Quay 部署。
  5. 单击存储库名称,如 quayadmin/ubuntu
  6. 在导航窗格中,点 Tags

    报告概述

    Security scan information appears for scanned repository images

  7. 点镜像报告(如 45 个介质 )以显示更详细的报告:

    报告详情

    See all vulnerabilities or only those that are fixable

3.4.3. CVE 国家漏洞数据库中的评级

从 Clair v4.2 开始,Red Hat Quay UI 现在可以查看通用漏洞评分系统(CVSS)增强数据。另外,Clair v4.2 从国家漏洞数据库中添加 CVSS 分数。

在这个版本中,如果漏洞在发布分数的 2 级内有一个 CVSS 分数,Red Hat Quay UI 默认会给出发行版的分数。例如:

Clair v4.2 data display

这与前面的接口不同,后者只显示以下信息:

Clair v4 data display

3.5. 重启容器

因为 podman 不支持 --restart 选项,所以您可以将 podman 配置为 systemd 服务,如使用 Podman 将容器移植到 systemd中所述

3.5.1. 使用带有 Podman 的 systemd 单元文件

默认情况下,Podman 为现有容器或 pod 生成一个单元文件。您可以使用 podman generate systemd --new 命令生成更多可移植的 systemd 单元文件。--new 标志指示 Podman 生成创建、启动和删除容器的单元文件。

  1. 从正在运行的 Red Hat Quay registry 创建 systemd 单元文件,如下所示:

    $ sudo podman generate systemd --new --files --name redis
    $ sudo podman generate systemd --new --files --name postgresql-quay
    $ sudo podman generate systemd --new --files --name quay
    $ sudo podman generate systemd --new --files --name postgresql-clairv4
    $ sudo podman generate systemd --new --files --name clairv4
  2. 将单元文件复制到 /usr/lib/systemd/system,以 root 用户身份安装它们:

    $ sudo cp -Z container-redis.service /usr/lib/systemd/system
    $ sudo cp -Z container-postgresql-quay.service /usr/lib/systemd/system
    $ sudo cp -Z container-quay.service /usr/lib/systemd/system
    $ sudo cp -Z container-postgresql-clairv4.service /usr/lib/systemd/system
    $ sudo cp -Z container-clairv4.service /usr/lib/systemd/system
  3. 重新载入 systemd Manager 配置:

    $ sudo systemctl daemon-reload
  4. 在引导时启用服务并启动它们:

    $ sudo systemctl enable --now container-redis.service
    $ sudo systemctl enable --now container-postgresql-quay.service
    $ sudo systemctl enable --now container-quay.service
    $ sudo systemctl enable --now container-postgresql-clairv4.service
    $ sudo systemctl enable --now container-clairv4.service

3.5.2. 启动、停止和检查服务的状态

  1. 检查 Quay 组件的状态:

    $ sudo systemctl status container-redis.service
    $ sudo systemctl status container-postgresql-quay.service
    $ sudo systemctl status container-quay.service
    $ sudo systemctl status container-postgresql-clairv4.service
    $ sudo systemctl status container-clairv4.service
  2. 停止 Quay 组件服务:

    $ sudo systemctl stop container-redis.service
    $ sudo systemctl stop container-postgresql-quay.service
    $ sudo systemctl stop container-quay.service
    $ sudo systemctl stop container-postgresql-clairv4.service
    $ sudo systemctl stop container-clairv4.service
  3. 启动 Quay 组件服务:

    $ sudo systemctl start container-redis.service
    $ sudo systemctl start container-postgresql-quay.service
    $ sudo systemctl start container-quay.service
    $ sudo systemctl start container-postgresql-clairv4.service
    $ sudo systemctl start container-clairv4.service

3.5.3. 在重启后测试重启

配置并启用服务后,重新引导系统。系统重新启动后,使用 podman ps 检查 Quay 组件的所有容器是否已重启:

$ sudo podman ps -a
CONTAINER ID  IMAGE                                       COMMAND         CREATED         STATUS             PORTS                   NAMES
4e87c7889246  registry.redhat.io/rhel8/postgresql-13:1-109    run-postgresql  19 seconds ago  Up 18 seconds ago  0.0.0.0:5432->5432/tcp  postgresql-quay
b8fbac1920d4  registry.redhat.io/rhel8/redis-6:1-110)          run-redis       19 seconds ago  Up 18 seconds ago  0.0.0.0:6379->6379/tcp  redis
d959d5bf7a24  registry.redhat.io/rhel8/postgresql-13:1-109    run-postgresql  18 seconds ago  Up 18 seconds ago  0.0.0.0:5433->5432/tcp  postgresql-clairv4
e75ff8651dbd  registry.redhat.io/quay/clair-rhel8:v3.4.0                  18 seconds ago  Up 17 seconds ago  0.0.0.0:8081->8080/tcp  clairv4

在本实例中,Quay 容器本身无法启动。这是因为,在 Quay 中启用了安全扫描时,它会尝试在启动时尝试连接 Clair。但是,Clair 尚未完成初始化过程,因此 Quay 会立即终止连接。若要克服此问题,您需要配置 Quay 服务,使其依赖于 Clair 的服务,如以下部分所示。

3.5.4. 配置 Quay 对 Clair 的依赖项

在 Quay 的 systemd 服务文件中,通过设置 After=container-clairv4.service[Unit] 部分中设置 Clair 服务的依赖项。要让 Clair 容器时间进行初始化,请在 [Service] 部分添加一个延迟,如 RestartSec=30。在对 Clair 配置依赖关系后,以下是修改后的 Quay 文件的示例:

/usr/lib/systemd/system/container-quay.service

# container-quay.service
# autogenerated by Podman 2.0.5
# Tue Feb 16 17:02:26 GMT 2021

[Unit]
Description=Podman container-quay.service
Documentation=man:podman-generate-systemd(1)
Wants=network.target
After=container-clairv4.service

[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure
RestartSec=30
ExecStartPre=/bin/rm -f %t/container-quay.pid %t/container-quay.ctr-id
ExecStart=/usr/bin/podman run --conmon-pidfile %t/container-quay.pid --cidfile %t/container-quay.ctr-id --cgroups=no-conmon -d --rm -p 8080:8080 --name=quay -v /home/user1/quay/config:/conf/stack:Z -v /home/user1/quay/storage:/datastorage:Z registry.redhat.io/quay/quay-rhel8:v3.4.0
ExecStop=/usr/bin/podman stop --ignore --cidfile %t/container-quay.ctr-id -t 10
ExecStopPost=/usr/bin/podman rm --ignore -f --cidfile %t/container-quay.ctr-id
PIDFile=%t/container-quay.pid
KillMode=none
Type=forking

[Install]
WantedBy=multi-user.target default.target

更新 Quay 服务配置后,重新引导服务器并立即运行 podman ps

$ sudo podman ps -a
CONTAINER ID  IMAGE                                       COMMAND         CREATED         STATUS             PORTS                   NAMES
4e87c7889246  registry.redhat.io/rhel8/postgresql-13:1-109    run-postgresql  29 seconds ago  Up 28 seconds ago  0.0.0.0:5432->5432/tcp  postgresql-quay
b8fbac1920d4  registry.redhat.io/rhel8/redis-6:1-110)          run-redis       29 seconds ago  Up 28 seconds ago  0.0.0.0:6379->6379/tcp  redis
d959d5bf7a24  registry.redhat.io/rhel8/postgresql-13:1-109    run-postgresql  28 seconds ago  Up 28 seconds ago  0.0.0.0:5433->5432/tcp  postgresql-clairv4
e75ff8651dbd  registry.redhat.io/quay/clair-rhel8:v3.4.0                  28 seconds ago  Up 27 seconds ago  0.0.0.0:8081->8080/tcp  clairv4

最初,Quay 容器将不可用,但一旦 RestartSec delay 到期,它应当会启动:

$ sudo podman ps -a
CONTAINER ID  IMAGE                                       COMMAND         CREATED         STATUS             PORTS                   NAMES
4e87c7889246  registry.redhat.io/rhel8/postgresql-13:1-109    run-postgresql  35 seconds ago  Up 34 seconds ago  0.0.0.0:5432->5432/tcp  postgresql-quay
ab9f0e6ad7c3  registry.redhat.io/quay/quay-rhel8:v3.4.0   registry        3 seconds ago   Up 2 seconds ago   0.0.0.0:8080->8080/tcp  quay
b8fbac1920d4  registry.redhat.io/rhel8/redis-6:1-110)          run-redis       35 seconds ago  Up 34 seconds ago  0.0.0.0:6379->6379/tcp  redis
d959d5bf7a24  registry.redhat.io/rhel8/postgresql-13:1-109    run-postgresql  34 seconds ago  Up 34 seconds ago  0.0.0.0:5433->5432/tcp  postgresql-clairv4
e75ff8651dbd  registry.redhat.io/quay/clair-rhel8:v3.4.0                  34 seconds ago  Up 33 seconds ago  0.0.0.0:8081->8080/tcp  clairv4

Quay 容器的 CREATED 字段显示创建时间中的 30 秒差异,如服务定义中所配置。

登录到 quay-server.example.com 上的 Red Hat Quay registry,并确保一切已正确完成。

3.6. 联邦信息处理标准(FIPS)就绪和合规性

由国家标准与技术(NIST)开发的联邦信息处理标准(FIPS)被认为是保护和加密敏感数据的高度关注,特别是在美国、企业和公共领域。Red Hat Enterprise Linux (RHEL)和 OpenShift Container Platform 通过提供 FIPS 模式 来支持 FIPS 标准,其中系统只允许使用特定的 FIPS 验证加密模块,如 openssl。这样可确保 FIPS 合规性。

从 Red Hat Quay 版本 3.5.0 开始,Red Hat Quay 支持在启用了 FIPS 的 RHEL 和 OpenShift Container Platform 环境中运行。

第 4 章 后续步骤

本文档演示了如何配置和部署 Red Hat Quay 概念验证版本。有关部署到生产环境的更多信息,请参阅"部署 Red Hat Quay - High Availability"。

"使用 Red Hat Quay" 指南演示了如何:

  • 添加用户和软件仓库
  • 使用标签
  • 使用构建 worker 自动构建 Dockerfile
  • 设置构建触发器
  • 为存储库事件添加通知

"管理 Red Hat Quay" 指南演示了如何:

  • 使用 SSL 和 TLS
  • 使用 Clair 启用安全扫描
  • 使用存储库镜像
  • 配置 LDAP 身份验证
  • 使用存储的异地复制

法律通告

Copyright © 2023 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.