Red Hat Training
A Red Hat training course is available for Red Hat OpenStack Platform
附录 C. 完整的磁盘镜像
主要的 overcloud 镜像是一个平面分区镜像。这表示镜像本身不包含分区信息或引导加载程序。director 在引导时使用单独的内核和 ramdisk,在将 overcloud 镜像写入磁盘时创建一个基本的分区布局。但是,您可以创建包含分区布局、引导加载程序和强化安全防护的完整磁盘镜像。
以下过程会使用 director 的镜像构建功能。红帽只支持按照本节中所含的准则来构建的镜像。未按这些规范构建的自定义镜像不受支持。
安全强化型镜像会为注重安全性的 Red Hat OpenStack Platform 部署额外采取必要的安全措施。以下是与安全镜像有关的一些建议:
-
/tmp
目录会挂载到独立的卷或分区上,并包含rw
、nosuid
、nodev
、noexec
和relatime
标志 -
/var
、/var/log
和/var/log/audit
目录会挂载到独立的卷或分区上,并包含rw
、relatime
标志 -
/home
目录会挂载到独立的分区或卷上,并包含rw
、nodev
、relatime
标志 对
GRUB_CMDLINE_LINUX
设置做出以下更改:-
通过添加
audit=1
纳入额外的内核引导标志,以启用审计 -
通过添加
nousb
,禁用对于使用引导加载程序配置的 USB 的内核支持 -
通过设置
crashkernel=auto
,删除不安全的引导标志
-
通过添加
-
将不安全的模块(
usb-storage
、cramfs
、freevxfs
、jffs2
、hfs
、hfsplus
、squashfs
、udf
、vfat
)加入黑名单,并阻止它们加载。 -
在不安全的软件包(由
kexec-tools
安装的kdump
以及telnet
)完成默认安装后,将其从镜像中全部删除 -
添加新的
screen
软件包,以确保安全性
要构建安全强化型镜像,您需要:
- 下载基础 Red Hat Enterprise Linux 7 镜像
- 设置专门用于注册的环境变量
- 通过修改分区的模式和大小来自定义镜像
- 创建镜像
- 将其上传到您的部署中
以下几节详细介绍了用于归档这些任务的操作过程。
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 |
|
1G |
1G |
|
7G |
10G |
|
5G |
5G |
|
900M |
900M |
|
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 开始使用该镜像。要上传安全强化型镜像,请按照以下步骤操作:
重命名新生成的镜像,并将其移到您的镜像目录中:
# mv overcloud-hardened-full.qcow2 ~/images/overcloud-full.qcow2
删除所有旧的 overcloud 镜像:
# openstack image delete overcloud-full # openstack image delete overcloud-full-initrd # openstack image delete overcloud-full-vmlinuz
上传新的 overcloud 镜像:
# openstack overcloud image upload --image-path /home/stack/images --whole-disk
如果您想将某个现有镜像替换成安全强化型镜像,请使用 --update-existing
标志。这样,原有的 overcloud-full
镜像就会被新生成的安全强化型镜像覆盖。