附录 C. 完整的磁盘镜像

主要的 overcloud 镜像是一个平面分区镜像。这表示镜像本身不包含分区信息或引导加载程序。director 在引导时使用单独的内核和 ramdisk,在将 overcloud 镜像写入磁盘时创建一个基本的分区布局。但是,您可以创建包含分区布局、引导加载程序和强化安全防护的完整磁盘镜像。

重要

以下过程会使用 director 的镜像构建功能。红帽只支持按照本节中所含的准则来构建的镜像。未按这些规范构建的自定义镜像不受支持。

安全强化型镜像会为注重安全性的 Red Hat OpenStack Platform 部署额外采取必要的安全措施。以下是与安全镜像有关的一些建议:

  • /tmp 目录会挂载到独立的卷或分区上,并包含 rwnosuidnodevnoexecrelatime 标志
  • /var/var/log/var/log/audit 目录会挂载到独立的卷或分区上,并包含 rwrelatime 标志
  • /home 目录会挂载到独立的分区或卷上,并包含 rwnodevrelatime 标志
  • GRUB_CMDLINE_LINUX 设置做出以下更改:

    • 通过添加 audit=1 纳入额外的内核引导标志,以启用审计
    • 通过添加 nousb,禁用对于使用引导加载程序配置的 USB 的内核支持
    • 通过设置 crashkernel=auto,删除不安全的引导标志
  • 将不安全的模块(usb-storagecramfsfreevxfsjffs2hfshfsplussquashfsudfvfat)加入黑名单,并阻止它们加载。
  • 在不安全的软件包(由 kexec-tools 安装的 kdump 以及 telnet)完成默认安装后,将其从镜像中全部删除
  • 添加新的 screen 软件包,以确保安全性

要构建安全强化型镜像,您需要:

  1. 下载基础 Red Hat Enterprise Linux 7 镜像
  2. 设置专门用于注册的环境变量
  3. 通过修改分区的模式和大小来自定义镜像
  4. 创建镜像
  5. 将其上传到您的部署中

以下几节详细介绍了用于归档这些任务的操作过程。

C.1. 下载基础云镜像

在构建完整的磁盘镜像之前,需要先下载 Red Hat Enterprise Linux 的现有云镜像,以作为基础。请前往红帽客户门户网站,然后选择要下载的 KVM 客户机镜像。例如,可在以下页面上找到最新 Red Hat Enterprise Linux 的 KVM 客户机镜像:

C.2. 设置环境变量

在构建完整磁盘镜像的过程中,director 需要基础镜像和注册详情,以获取新 overcloud 镜像的软件包。您可以使用 Linux 环境变量来进行相关的定义。

注意

镜像构建过程会利用红帽订阅暂时注册镜像,并在完成构建后取消注册系统。

要构建安全强化型完整磁盘镜像,请根据您的环境和要求来设置 Linux 环境变量:

DIB_LOCAL_IMAGE
设置本地镜像,以将其用作基础。
REG_ACTIVATION_KEY
在注册过程中使用激活密钥。
REG_AUTO_ATTACH
定义是否自动附加兼容性最高的订阅。
REG_BASE_URL
用于获取软件包的内容交付服务器的基本 URL。默认的客户门户网站订阅管理(Subscription Management)会使用 https://cdn.redhat.com。如果使用的是 Red Hat Satellite 6 服务器,这个参数则应使用 Satellite 服务器的基本 URL。
REG_ENVIRONMENT
注册到机构的内部环境中。
REG_METHOD
设置注册方法。使用 portal 可将系统注册到红帽客户门户网站。使用 satellite 可将系统注册到 Red Hat Satellite 6。
REG_ORG
要注册镜像的机构。
REG_POOL_ID
产品订阅信息的池 ID。
REG_PASSWORD
注册镜像的用户帐户的密码。
REG_REPOS

一个由软件仓库名称组成的字符串,使用逗号分隔(不含空格)。这个字符串中的各个软件仓库会通过 subscription-manager 启用。对于安全强化型完整磁盘镜像,请使用以下软件仓库:

  • rhel-7-server-rpms
  • rhel-7-server-extras-rpms
  • rhel-ha-for-rhel-7-server-rpms
  • rhel-7-server-optional-rpms
  • rhel-7-server-openstack-13-rpms
REG_SERVER_URL
指定要使用的订阅服务的主机名。默认值是红帽客户门户网站(其网址为 subscription.rhn.redhat.com)。如果使用的是 Red Hat Satellite 6 服务器,则该参数应使用 Satellite 服务器的主机名。
REG_USER
为注册镜像的帐户指定用户名。

以下是一些用于导出一组环境变量以将本地 QCOW2 镜像暂时注册到红帽客户门户网站的命令示例。

$ export DIB_LOCAL_IMAGE=./rhel-server-7.5-x86_64-kvm.qcow2
$ export REG_METHOD=portal
$ export REG_USER="[your username]"
$ export REG_PASSWORD="[your password]"
$ export REG_REPOS="rhel-7-server-rpms \
    rhel-7-server-extras-rpms \
    rhel-ha-for-rhel-7-server-rpms \
    rhel-7-server-optional-rpms \
    rhel-7-server-openstack-13-rpms"

C.3. 自定义磁盘布局

安全强化型镜像的默认大小为 20G,并会使用预定义的分区大小。但是,为了可以使其适用于 overcloud 容器镜像,需要对分区布局进行一些修改:

分区原有大小现有大小

/

6G

8G

/tmp

1G

1G

/var

7G

10G

/var/log

5G

5G

/var/log/audit

900M

900M

/home

100M

100M

总计

20G

25G

这会将镜像大小增加至 25G。您还可以根据自身需求,进一步修改分区布局和磁盘大小。

要修改分区布局和磁盘大小,请按照以下步骤操作:

  • 使用 DIB_BLOCK_DEVICE_CONFIG 环境变量修改分区模式。
  • 通过更新 DIB_IMAGE_SIZE 环境变量,来修改镜像的整体大小。

C.3.1. 修改分区模式

您可以修改分区模式,以更改分区大小、创建新分区或删除现有分区。您可以使用以下环境变量来定义新的分区模式:

$ export DIB_BLOCK_DEVICE_CONFIG='<yaml_schema_with_partitions>'

以下 YAML 结构展示了修改后的分区布局,该布局拥有足够的空间,可拉取 overcloud 容器镜像:

export DIB_BLOCK_DEVICE_CONFIG='''
- local_loop:
    name: image0
- partitioning:
    base: image0
    label: mbr
    partitions:
      - name: root
        flags: [ boot,primary ]
        size: 8G
        mkfs:
            type: xfs
            label: "img-rootfs"
            mount:
                mount_point: /
                fstab:
                    options: "rw,relatime"
                    fck-passno: 1
      - name: tmp
        size: 1G
        mkfs:
            type: xfs
            mount:
                mount_point: /tmp
                fstab:
                    options: "rw,nosuid,nodev,noexec,relatime"
      - name: var
        size: 10G
        mkfs:
            type: xfs
            mount:
                mount_point: /var
                fstab:
                    options: "rw,relatime"
      - name: log
        size: 5G
        mkfs:
            type: xfs
            mount:
                mount_point: /var/log
                fstab:
                    options: "rw,relatime"
      - name: audit
        size: 900M
        mkfs:
            type: xfs
            mount:
                mount_point: /var/log/audit
                fstab:
                    options: "rw,relatime"
      - name: home
        size: 100M
        mkfs:
            type: xfs
            mount:
                mount_point: /home
                fstab:
                    options: "rw,nodev,relatime"
'''

请基于这个 YAML 内容来修改您的镜像分区模式,并根据您的自身需求来修改分区的大小和布局。

注意

请为镜像定义适合的分区大小,因为完成部署后无法再调整分区大小。

C.3.2. 修改镜像大小

修改后的分区模式的空间总量可能会超出默认的磁盘大小 (20G)。在这种情况下,您可能需要修改镜像的大小。要修改镜像大小,请编辑用于创建镜像的配置文件。

/usr/share/openstack-tripleo-common/image-yaml/overcloud-hardened-images.yaml 创建一个副本:

# cp /usr/share/openstack-tripleo-common/image-yaml/overcloud-hardened-images.yaml \
/home/stack/overcloud-hardened-images-custom.yaml

编辑配置文件中的 DIB_IMAGE_SIZE,以便按需调整相应的值:

...

environment:
DIB_PYTHON_VERSION: '2'
DIB_MODPROBE_BLACKLIST: 'usb-storage cramfs freevxfs jffs2 hfs hfsplus squashfs udf vfat bluetooth'
DIB_BOOTLOADER_DEFAULT_CMDLINE: 'nofb nomodeset vga=normal console=tty0 console=ttyS0,115200 audit=1 nousb'
DIB_IMAGE_SIZE: '25' 1
COMPRESS_IMAGE: '1'
1
将该值调整为新的磁盘空间总量。

保存这个文件。

重要

director 在部署 overcloud 时会为 overcloud 镜像创建一个 RAW 版本。这意味着,您的 undercloud 必须拥有一定的可用空间,以容纳这个 RAW 镜像。例如,如果您将安全强化型镜像大小增加到 40G,则 undercloud 的硬盘上必须拥有 40G 的可用空间。

C.4. 创建安全强化型完整磁盘镜像

在完成环境变量设置和镜像自定义后,请使用 openstack overcloud image build 命令创建镜像:

# openstack overcloud image build \
--image-name overcloud-hardened-full \
--config-file /home/stack/overcloud-hardened-images-custom.yaml \ 1
--config-file /usr/share/openstack-tripleo-common/image-yaml/overcloud-hardened-images-rhel7.yaml
1
这是一个自定义配置文件,采用了第 C.3.2 节 “修改镜像大小”中确定的新磁盘大小。如果您将磁盘大小自定义为其他值,请改用原来的 /usr/share/openstack-tripleo-common/image-yaml/overcloud-hardened-images.yaml 文件。

这会创建一个名为 overcloud-hardened-full.qcow2 的镜像,其中包含所有必要的安全功能。

C.5. 上传安全强化型完整磁盘镜像

将镜像上传至 OpenStack Image (glance) 服务,并通过 Red Hat OpenStack Platform director 开始使用该镜像。要上传安全强化型镜像,请按照以下步骤操作:

  1. 重命名新生成的镜像,并将其移到您的镜像目录中:

    # mv overcloud-hardened-full.qcow2 ~/images/overcloud-full.qcow2
  2. 删除所有旧的 overcloud 镜像:

    # openstack image delete overcloud-full
    # openstack image delete overcloud-full-initrd
    # openstack image delete overcloud-full-vmlinuz
  3. 上传新的 overcloud 镜像:

    # openstack overcloud image upload --image-path /home/stack/images --whole-disk

如果您想将某个现有镜像替换成安全强化型镜像,请使用 --update-existing 标志。这样,原有的 overcloud-full 镜像就会被新生成的安全强化型镜像覆盖。