在 Amazon Web Services 上部署 RHEL 9
获取 RHEL 系统镜像并在 AWS 上创建 RHEL 实例
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 在顶部导航栏中点 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 公有云平台上的 RHEL 简介 复制链接链接已复制到粘贴板!
公有云平台提供计算资源即服务。您可以运行您的 IT 工作负载,包括 Red Hat Enterprise Linux (RHEL)系统,作为公共云实例,而不是使用内部硬件。
1.1. 在公有云中使用 RHEL 的好处 复制链接链接已复制到粘贴板!
RHEL 作为公共云平台上的云实例与内部物理系统或虚拟机(VM)的 RHEL 相比有以下优点:
灵活精细地分配资源
RHEL 的云实例作为虚拟机在云平台上运行,这通常意味着由云服务提供商维护远程服务器集群。因此,给实例分配硬件资源(如特定类型的 CPU 或存储)发生在软件层面上,可轻松自定义。
与本地 RHEL 系统相比,您也不会受物理主机功能的限制。相反,您可以根据云提供商提供的选择,从各种功能中进行选择。
空间及成本效率
您不需要拥有任何内部服务器来托管您的云工作负载。这可避免与物理硬件关联的空间、电源和维护要求。
相反,在公有云平台上,您可以直接向云提供商支付使用云实例的费用。成本通常基于分配给实例的硬件以及您使用的时间。因此,您可以根据要求优化成本。
软件控制的配置
云实例的整个配置都作为数据保存在云平台上,并由软件控制。因此,您可以轻松地创建、删除、克隆或迁移实例。云实例也在云提供商控制台中远程操作,默认连接到远程存储。
另外,您可以随时将云实例的当前状态备份为快照。之后,您可以加载快照,将实例恢复到保存的状态。
与主机分离和软件兼容性
与本地虚拟机类似,云实例上的 RHEL 客户机操作系统运行在虚拟化内核上。这个内核与主机操作系统以及用来连接实例的 客户端 系统分开。
因此,任何操作系统都可以安装在云实例上。这意味着,在 RHEL 公有云实例中,您可以运行无法在本地操作系统上使用的特定于 RHEL 的应用程序。
另外,即使实例的操作系统变得不稳定或被破坏,您的客户端系统也不会受到任何影响。
1.2. RHEL 的公有云用例 复制链接链接已复制到粘贴板!
在公有云上部署会带来许多好处,但可能并非是每种场景中最有效的解决方案。如果您要评估是否将 RHEL 部署迁移到公共云,请考虑您的用例是否将从公共云的好处中受益。
有益的用例
部署公有云实例对于灵活地增加和减少部署的活跃计算能力(也称为 扩展 和 缩减)非常有效。因此,在以下情况下,建议在公有云上使用 RHEL:
- 具有高峰值工作负载和一般性能要求的集群。在资源成本方面,根据您的需求扩展和缩减可能非常高效。
- 快速设置或扩展集群。这可避免设置本地服务器的高前期成本。
- 云实例不受本地环境中发生的情况的影响。因此,您可以使用它们进行备份和恢复。
有潜在问题的用例
- 您正在运行一个无法调整的现有环境。与您当前的主机平台相比,自定义云实例以适应现有部署的特定需求可能并不划算。
- 您有预算方面的硬限制。在本地数据中心中维护您的部署通常具有更大的灵活性,但与公有云相比,您对最大资源成本有更多的控制。
后续步骤
1.3. 迁移到公有云时的常见关注 复制链接链接已复制到粘贴板!
将 RHEL 工作负载从本地环境移到公有云平台可能会带来有关涉及的变化的担忧。以下是最常见的问题。
作为云实例,我的 RHEL 是否与本地虚拟机工作不同?
在大部分方面,公有云平台上的 RHEL 实例的工作方式与本地主机上的 RHEL 虚拟机相同,如内部服务器。主要例外包括:
- 公有云实例使用特定于提供商的控制台接口,而不是私有编排接口,来管理云资源。
- 某些功能(如嵌套虚拟化)可能无法正常工作。如果特定功能对部署至关重要,请提前检查该功能与您选择的公有云提供商的兼容性。
与本地服务器相比,我的数据在公有云中是否保持安全?
RHEL 云实例中的数据归您所有,您的公共云提供商对齐没有任何访问权限。此外,主要的云提供商支持传输中的数据加密,这提高了将虚拟机迁移到公共云时数据的安全性。
RHEL 公共云实例的一般安全性如下:
- 您的公有云供应商负责云 hypervisor 的安全性
- 红帽在您的实例中提供 RHEL 客户机操作系统的安全功能
- 您可以在云基础架构中管理特定的安全设置和实践
我的地理区域对 RHEL 公有云实例的功能有何影响?
无论您所在的地理位置如何,您都可以在公有云平台上使用 RHEL 实例。因此,您可以在与内部服务器相同的区域中运行实例。
但是,在物理上较远的区域中托管您的实例可能会在操作它们时造成高延迟。此外,取决于公有云提供商,某些区域可能会提供额外的功能或更具成本效益。在创建 RHEL 实例前,请查看您选择的云提供商提供的托管区域的属性。
1.4. 为公有云部署获取 RHEL 复制链接链接已复制到粘贴板!
要在公有云环境中部署 RHEL 系统,您需要:
根据您的需求和当前市场提供的,为您的使用案例选择最佳云提供商。
当前认证的运行 RHEL 实例的云提供商有:
- Amazon Web Services (AWS)
- Google Cloud Platform (GCP)
- 注意
本文档专门讨论在 AWS 上部署 RHEL。
- 在您选择的云平台上创建 RHEL 云实例。如需更多信息,请参阅 创建 RHEL 云实例的方法。
- 要让您的 RHEL 部署保持最新状态,请使用 红帽更新基础设施 (RHUI)。
1.5. 创建 RHEL 云实例的方法 复制链接链接已复制到粘贴板!
要在公有云平台上部署 RHEL 实例,您可以使用以下方法之一:
| 创建 RHEL 的系统镜像,并将其导入到云平台。
|
| 直接从云提供商市场购买 RHEL 实例。
|
有关使用各种方法在 Amazon Web Services 上部署 RHEL 实例的详细信息,请参阅本文档中的以下章节。
第 2 章 创建并上传 AWS AMI 镜像 复制链接链接已复制到粘贴板!
要在 Amazon Web Services (AWS)云中使用自定义的 RHEL 系统镜像,请使用相应的输出类型,使用镜像构建器创建系统镜像,配置您的系统以上传镜像,并将镜像上传到 AWS 帐户。
2.1. 准备手动上传 AWS AMI 镜像 复制链接链接已复制到粘贴板!
在上传 AWS AMI 镜像前,您必须配置系统来上传镜像。
先决条件
- 您必须在 AWS IAM account manager 中配置了一个 Access Key ID。
- 您必须准备一个可写的 S3 存储桶。请参阅 创建 S3 存储桶。
流程
安装 Python 3 和
pip工具:# dnf install python3 python3-pip使用
pip安装 AWS 命令行工具 :# pip3 install awscli设置您的配置文件。终端提示您提供凭证、地区和输出格式:
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:为存储桶定义名称并创建一个存储桶:
$ BUCKET=bucketname $ aws s3 mb s3://$BUCKET使用实际的存储桶名称替换
bucketname。它必须是全局唯一的名称。因此,您的存储桶会被创建。要授予访问 S3 存储桶的权限,如果您还没有这样做,请在 AWS Identity and Access Management (IAM) 中创建一个
vmimportS3 角色:创建一个 JSON 格式的带有信任策略配置的
trust-policy.json文件。例如:{ "Version": "2022-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:Externalid": "vmimport" } } }] }创建一个 JSON 格式的带有角色策略配置的
role-policy.json文件。例如:{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket"], "Resource": ["arn:aws:s3:::%s", "arn:aws:s3:::%s/"] }, { "Effect": "Allow", "Action": ["ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe"], "Resource": "*" }] } $BUCKET $BUCKET使用
trust-policy.json文件为您的 Amazon Web Services 帐户创建一个角色:$ aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json使用
role-policy.json文件嵌入一个内联策略文档:$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
2.2. 使用 CLI 手动将 AMI 镜像上传到 AWS 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器构建 ami 镜像,并使用 CLI 手动将它们上传到 Amazon AWS Cloud 服务提供商。
流程
使用文本编辑器,使用以下内容创建配置文件:
provider = "aws" [settings] accessKeyID = "AWS_ACCESS_KEY_ID" secretAccessKey = "AWS_SECRET_ACCESS_KEY" bucket = "AWS_BUCKET" region = "AWS_REGION" key = "IMAGE_KEY"将字段中的值替换为您的
accessKeyID、secretAccessKey、bucket和region的凭证。IMAGE_KEY值是要上传到 EC2 的虚拟机镜像的名称。- 将文件保存为 CONFIGURATION-FILE.toml,然后关闭文本编辑器。
启动 compose 来将其上传到 AWS:
# composer-cli compose start blueprint-name image-type image-key configuration-file.toml替换:
- 使用您创建的蓝图名称替换 blueprint-name
-
使用
ami镜像类型替换 image-type。 - 使用要上传到 EC2 的虚拟机镜像的名称替换 image-key。
带有云提供商的配置文件名称的 configuration-file.toml 。
注意您必须有要将自定义镜像发送到的存储桶的正确 AWS 身份和访问管理(IAM)设置。在将镜像上传到存储桶前,您必须对存储桶设置策略。
检查镜像构建的状态:
# composer-cli compose status完成镜像上传过程后,您可以看到"FINISHED"状态。
验证
要确认镜像上传成功:
-
访问菜单中的 EC2,并在 AWS 控制台中选择正确的区域。镜像必须具有
available状态,以指示它已被成功上传。 - 在仪表盘上,选择您的镜像并点击 。
2.3. 创建镜像并将其自动将上传到 AWS Cloud AMI 复制链接链接已复制到粘贴板!
您可以使用 RHEL 镜像构建器创建 (.raw) 镜像,并选择 Upload to AWS 复选框,来自动将您创建的结果镜像直接推送到 Amazon AWS Cloud AMI 服务提供商。
先决条件
-
您必须有访问系统的
root或wheel组用户权限。 - 您已在浏览器中打开了 RHEL web 控制台的 RHEL 镜像构建器界面。
- 您已创建了一个蓝图。请参阅 在 web 控制台界面中创建一个蓝图。
- 您必须在 AWS IAM account manager 中配置了一个 Access Key ID。
- 您必须具有一个可写的 S3 存储桶。
流程
- 在 RHEL 镜像构建器仪表盘中,点之前创建的 blueprint name。
- 选择选项卡 。
点 创建自定义镜像。
Create Image 窗口打开。
-
在 Type 下拉菜单中选择
Amazon Machine Image Disk (.raw)。 - 选中 Upload to AWS 复选框,来将您的镜像上传到 AWS 云,然后点 。
要验证您是否可以访问 AWS ,请在对应的字段中输入您的
"AWS access key ID"和"AWS secret access key"。点击 。注意您只能在创建新 Access Key ID 时查看 AWS secret access key 。如果您不知道您的 Secret Key,请生成一个新的 Access Key ID。
-
在
Image name字段中输入镜像名称,在Amazon S3 bucket name字段中输入 Amazon bucket 名称,并为您要添加自定义镜像的存储桶输入AWS region字段。点击 。 查看信息并点 。
可选,点 来修改任何不正确的详情。
注意您必须具有要发送自定义镜像的存储桶的正确 IAM 设置。此流程使用 IAM 导入和导出,因此您必须在将镜像上传到存储桶前为存储桶设置 策略。如需更多信息,请参阅 IAM 用户所需的权限。
-
在 Type 下拉菜单中选择
右上角的弹出窗口告诉您保存的进度。它还告知镜像创建过程、创建此镜像的过程以及后续的上传到 AWS Cloud。
完成这个过程后,您可以看到 镜像构建完成状态。
在浏览器中,访问 Service→EC2。
-
在 AWS 控制台仪表盘菜单中,选择 correct region。镜像必须具有
Available状态,以指示它已被上传。 - 在 AWS 仪表盘上,选择您的镜像并点 。
-
在 AWS 控制台仪表盘菜单中,选择 correct region。镜像必须具有
- 此时会打开一个新窗口。根据启动镜像所需的资源选择实例类型。点击 。
- 查看您的实例启动详情。如果需要进行任何更改,您可以编辑任何部分。点
在启动实例之前,选择一个访问它的公钥。
您可以使用您已有的密钥对,也可以创建一个新的密钥对。
按照以下步骤在 EC2 中创建新的密钥对,并将它连接到新实例。
- 在下拉菜单中选择 "Create a new key pair"。
- 输入新密钥对名称。它生成一个新的密钥对。
- 点 "下载密钥对" 在您的本地系统中保存新密钥对。
然后,您可以点 来启动您的实例。
您可以检查实例的状态,它显示为 Initializing。
- 实例状态变为 running 后,按钮将变为可用。
点 。此时会出现一个窗口,其中包含有关如何使用 SSH 进行连接的说明。
- 选择 A standalone SSH client 作为首选连接方法并打开终端。
在您存储私钥的位置,确保您的密钥是公开可见的,以便 SSH 可以正常工作。要做到这一点,请运行以下命令:
$ chmod 400 <_your-instance-name.pem_>使用其公共 DNS 连接到您的实例:
$ ssh -i <_your-instance-name.pem_> ec2-user@<_your-instance-IP-address_>键入
yes以确认您要继续连接。因此,您通过 SSH 连接到您的实例。
验证
- 检查在使用 SSH 连接到您的实例的过程中是否能够执行任何操作。
要在 Amazon Web Services (AWS)上设置 RHEL 的高可用性(HA)部署,您可以将 RHEL 的 EC2 实例部署到 AWS 上的集群中。
虽然您可以从 ISO 镜像创建自定义虚拟机,但红帽建议您使用 Red Hat Image Builder 产品来创建自定义镜像,以便用于特定的云供应商。使用 Image Builder,您可以创建并上传 ami 格式的 Amazon Machine Image(AMI)。如需更多信息,请参阅 制作自定义 RHEL 系统镜像。
如需可以在 AWS 上安全使用的红帽产品列表,请参阅 Amazon Web Services。
先决条件
- 注册一个红帽客户门户网站(Red Hat Customer Portal) 帐户。
- 注册 AWS 并设置 AWS 资源。如需更多信息,请参阅使用 Amazon EC2 设置。
3.1. AWS 上的 Red Hat Enterprise Linux 镜像选项 复制链接链接已复制到粘贴板!
下表列出了镜像的不同选择并记录镜像选项的不同。
| 镜像选项 | 订阅 | 示例情境 | 注意事项 |
|---|---|---|---|
| 部署红帽黄金镜像。 | 使用您现有的红帽订阅。 | 在 AWS 上选择红帽黄金镜像。有关黄金镜像以及如何在 Azure 上访问它们的详情,请参阅 红帽云访问参考指南。 | 订阅包括红帽产品成本 ; 您可以为 Amazon 提供所有其他实例成本。红帽直接为 Cloud Access 镜像提供支持。 |
| 部署已移至 AWS 的自定义镜像。 | 使用您现有的红帽订阅。 | 上传自定义镜像,并附加您的订阅。 | 订阅包括红帽产品成本 ; 您可以为 Amazon 提供所有其他实例成本。红帽直接为自定义 RHEL 镜像提供支持。 |
| 部署包含 RHEL 的现有 Amazon 镜像。 | AWS EC2 镜像包括红帽产品。 | 根据 随用随付 模式按小时向 Amazon 付费。这样的镜像称为 "on-demand" 镜像。Amazon 支持 on-demand 镜像。 红帽提供了镜像的更新。AWS 通过红帽更新基础架构(RHUI)提供更新。 |
您可以使用红帽镜像构建器为 AWS 创建一个自定义镜像。如需更多信息,请参阅 生成自定义 RHEL 系统镜像。
您不能将按需实例转换为自定义 RHEL 实例。从按需镜像改为自定义 RHEL 自带订阅 (BYOS)镜像:
- 创建新的自定义 RHEL 实例,并从您的按需实例迁移数据。
- 在迁移数据后取消您的 on-demand 实例以避免出现重复账单。
3.2. 理解基础镜像 复制链接链接已复制到粘贴板!
要从 ISO 镜像创建基础虚拟机,您可以使用预配置的基础镜像及其配置设置。
3.2.1. 使用自定义基础镜像 复制链接链接已复制到粘贴板!
要手动配置虚拟机(VM),首先创建一个基础(起步)虚拟机镜像。然后,您可以修改配置设置,并添加 VM 在云上操作所需的软件包。您可在上传镜像后为特定应用程序进行额外的配置更改。
3.2.2. 虚拟机配置设置 复制链接链接已复制到粘贴板!
云虚拟机必须具有以下配置设置。
| 设置 | 建议 |
|---|---|
| ssh | 必须启用 SSH 来提供虚拟机的远程访问。 |
| dhcp | 应该为 dhcp 配置主虚拟适配器。 |
3.3. 从 ISO 镜像创建基本虚拟机 复制链接链接已复制到粘贴板!
要从 ISO 镜像创建 RHEL 9 基础镜像,请启用主机虚拟化,并创建一个 RHEL 虚拟机(VM)。
先决条件
- 虚拟化已在您的主机上启用。
-
您已 从红帽客户门户网站 下载了最新的 Red Hat Enterprise Linux ISO 镜像,并将镜像移至
/var/lib/libvirt/images。
3.3.1. 从 RHEL ISO 镜像创建虚拟机 复制链接链接已复制到粘贴板!
流程
- 确保已为虚拟化启用主机机器。有关信息和流程,请参阅在 RHEL 9 中启用虚拟化。
创建并启动基本 Red Hat Enterprise Linux 虚拟机。具体步骤请参阅 创建虚拟机。
如果使用命令行创建虚拟机,请确保将默认内存和 CPU 设置为您所需的容量。将您的虚拟网络接口设置为 virtio。
例如,以下命令使用
/home/username/Downloads/rhel9.iso镜像创建一个kvmtest虚拟机:# virt-install \ --name kvmtest --memory 2048 --vcpus 2 \ --cdrom /home/username/Downloads/rhel9.iso,bus=virtio \ --os-variant=rhel9.0如果使用 web 控制台创建虚拟机,请按照 使用 web 控制台创建虚拟机 中的流程操作,请注意以下几个方面:
- 不要选择 Immediately Start VM。
- 将 Memory 大小更改为你希望的设置。
- 在开始安装前,请确保将 Virtual Network Interface Settings 中的 Model 更改为 virtio,并将您的 vCPU 更改为您想要的虚拟机容量设置。
3.3.2. 完成 RHEL 安装 复制链接链接已复制到粘贴板!
要完成要在 Amazon Web Services (AWS)上部署的 RHEL 系统的安装,请自定义 Installation Summary 视图,开始安装,并在虚拟机启动后启用 root 访问。
流程
- 选择您要在安装过程中使用的语言。
在 Installation Summary 视图中:
- 点 Software Selection,选择 Minimal Install。
- 点 Done。
点击 Installation Destination 并检查 Storage Configuration 中的 Custom。
-
验证
/boot至少 500 MB。将剩余空间用于根/。 - 建议使用标准分区,但您可以使用逻辑卷管理器(LVM)。
- 您可以将 xfs、ext4 或者 ext3 用于文件系统。
- 完成更改后点 Done。
-
验证
- 点 Begin Installation。
- 设置 Root 密码。根据情况创建其他用户。
-
重新启动虚拟机,并在安装完成后以
root身份登录。 配置镜像。
注册虚拟机并启用 Red Hat Enterprise Linux 9 软件仓库。
# subscription-manager register --auto-attach确保已安装并启用了
cloud-init软件包。# dnf install cloud-init # systemctl enable --now cloud-init.service
重要:此步骤只适用于您要上传到 AWS 的虚拟机。
对于 AMD64 或 Intel 64(x86_64)VM,安装
nvme,xen-netfront和xen-blkfront驱动程序。# dracut -f --add-drivers "nvme xen-netfront xen-blkfront"对于 ARM 64(aarch64)虚拟机,安装
nvme驱动程序。# dracut -f --add-drivers "nvme"包括这些驱动程序会删除 dracut 超时的可能性。
或者,您可以将驱动程序添加到
/etc/dracut.conf.d/,然后输入dracut -f来覆盖现有的initramfs文件。
- 关闭虚拟机。
3.4. 将 Red Hat Enterprise Linux 镜像上传到 AWS 复制链接链接已复制到粘贴板!
要在 Amazon Web Services (AWS)上运行 RHEL 实例,您必须首先将 RHEL 镜像上传到 AWS。
3.4.1. 安装 AWS CLI 复制链接链接已复制到粘贴板!
在 AWS 中使用 AWS CLI 管理 HA 集群需要许多流程。
先决条件
- 您已创建了一个 AWS 访问密钥 ID 和 AWS Secret 访问密钥,并可以访问它们。具体说明和详情请参考 快速配置 AWS CLI。
流程
使用
dnf命令安装 AWS 命令行工具。# dnf install awscli使用
aws --version命令验证您是否安装了 AWS CLI。$ aws --version aws-cli/1.19.77 Python/3.6.15 Linux/5.14.16-201.fc34.x86_64 botocore/1.20.77根据 AWS 访问详情配置 AWS 命令行客户端。
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
3.4.2. 创建 S3 存储桶 复制链接链接已复制到粘贴板!
导入到 AWS 需要 Amazon S3 存储桶。Amazon S3 存储桶是一个 Amazon 资源用于存储对象。作为上传镜像过程的一部分,您需要创建一个 S3 存储桶,然后将您的镜像移到存储桶。
流程
- 启动 Amazon S3 控制台。
- 点 Create Bucket。此时会出现 Create Bucket 对话框。
在 Name and region 视图中:
- 输入 Bucket name。
- 输入 Region 。
- 点 Next。
- 在 Configure options 视图中,选择所需的选项,然后单击 Next。
- 在 Set permissions 视图中,更改或者接受默认选项并点 Next。
- 查看存储桶配置。
点 Create bucket。
注意另外,您可以使用 AWS CLI 创建存储桶。例如,
aws s3 mb s3://my-new-bucket命令会创建一个名为my-new-bucket的 S3 存储桶。有关mb命令的更多信息,请参阅 AWS CLI 命令参考。
3.4.3. 创建 vmimport 角色 复制链接链接已复制到粘贴板!
为了可以使用 VM Import 服务将 RHEL 虚拟机(VM)导入到 Amazon Web Services (AWS),您需要创建 vmimport 角色。
如需更多信息,请参阅 Amazon 文档中的使用 VM Import/Export 将虚拟机导入为镜像。
流程
创建名为
trust-policy.json的文件,并包含以下策略:在您的系统中保存该文件并记录其位置。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals":{ "sts:Externalid": "vmimport" } } } ] }使用
create role命令创建vmimport角色。指定trust-policy.json文件所在位置的完整路径。为该路径加上前缀file://。例如:$ aws iam create-role --role-name vmimport --assume-role-policy-document file:///home/sample/ImportService/trust-policy.json创建名为
role-policy.json的文件,并包含以下策略:将s3-bucket-name替换为 S3 存储桶的名称。{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::s3-bucket-name", "arn:aws:s3:::s3-bucket-name/*" ] }, { "Effect":"Allow", "Action":[ "ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe*" ], "Resource":"*" } ] }使用
put-role-policy命令将策略附加到您所创建的角色。指定role-policy.json文件的完整路径。例如:$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file:///home/sample/ImportService/role-policy.json
3.4.4. 将镜像转换为 S3 复制链接链接已复制到粘贴板!
通过使用 qemu-img 命令,您可以转换您的镜像,以便您可以将其推送到 S3。示例具有代表性;它们将格式为 qcow2 文件格式的镜像转换为 raw 格式的文件。Amazon 接受 OVA、VHD、VHDX、VMDK 和 raw 格式的镜像。如需有关 Amazon 接受的镜像格式的更多信息,请参阅 VM 导入/导出是如何工作的。
流程
运行
qemu-img命令来转换您的镜像。例如:# qemu-img convert -f qcow2 -O raw rhel-9.0-sample.qcow2 rhel-9.0-sample.raw将镜像推送到 S3。
$ aws s3 cp rhel-9.0-sample.raw s3://s3-bucket-name注意这个过程可能需要几分钟时间。完成后,您可以使用 AWS S3 控制台 检查您的镜像是否成功上传到 S3 存储桶。
3.4.5. 将您的镜像导入为快照 复制链接链接已复制到粘贴板!
要在 Amazon Elastic Cloud Compute (EC2)服务中启动 RHEL 实例,您需要 Amazon Machine Image (AMI)。要创建系统的 AMI,您必须首先将 RHEL 系统镜像的快照上传到 EC2。
流程
创建文件来指定镜像的存储桶和路径。将文件命名为
containers.json。在下面的示例中,将s3-bucket-name替换为您 的存储桶名称,将s3-key替换为您的密钥。您可以使用 Amazon S3 控制台获取镜像的密钥。{ "Description": "rhel-9.0-sample.raw", "Format": "raw", "UserBucket": { "S3Bucket": "s3-bucket-name", "S3Key": "s3-key" } }将镜像导入为快照。本例使用公有 Amazon S3 文件;您可以使用 Amazon S3 控制台 来更改存储桶的权限设置。
$ aws ec2 import-snapshot --disk-container file://containers.json终端会显示如下信息。注意消息中的
ImportTaskID。{ "SnapshotTaskDetail": { "Status": "active", "Format": "RAW", "DiskImageSize": 0.0, "UserBucket": { "S3Bucket": "s3-bucket-name", "S3Key": "rhel-9.0-sample.raw" }, "Progress": "3", "StatusMessage": "pending" }, "ImportTaskId": "import-snap-06cea01fa0f1166a8" }使用
describe-import-snapshot-tasks命令跟踪导入的进度。包含ImportTaskID。$ aws ec2 describe-import-snapshot-tasks --import-task-ids import-snap-06cea01fa0f1166a8返回的消息显示任务的当前状态。完成后,
Status显示为completed。在状态中记录快照 ID。
3.4.6. 从上传的快照创建 AMI 复制链接链接已复制到粘贴板!
要在 Amazon Elastic Cloud Compute (EC2)服务中启动 RHEL 实例,您需要 Amazon Machine Image (AMI)。要创建系统的 AMI,您可以使用之前上传的 RHEL 系统快照。
流程
- 进入 AWS EC2 仪表板。
- 在 Elastic Block Store 下,选择 Snapshots。
-
搜索快照 ID(例如,
snap-0e718930bd72bcda0)。 - 右键点击快照并选择 Create image。
- 为您的镜像命名。
- 在 Virtualization type 中,选择 Hardware-assisted virtualization。
- 点 Create。在关于镜像创建的备注中,有一个到您镜像的链接。
点击镜像链接。您的镜像显示在 Images>AMIs 下。
注意另外,您可以使用 AWS CLI
register-image命令来从快照创建 AMI。如需更多信息,请参阅 register-image。下面是一个示例。$ aws ec2 register-image \ --name "myimagename" --description "myimagedescription" --architecture x86_64 \ --virtualization-type hvm --root-device-name "/dev/sda1" --ena-support \ --block-device-mappings "{\"DeviceName\": \"/dev/sda1\",\"Ebs\": {\"SnapshotId\": \"snap-0ce7f009b69ab274d\"}}"您必须将根设备卷
/dev/sda1指定为root-device-name。有关 AWS 的设备映射的概念信息,请参阅 块设备映射示例。
3.4.7. 从 AMI 启动实例 复制链接链接已复制到粘贴板!
要启动并配置 Amazon Elastic Compute Cloud (EC2)实例,请使用 Amazon Machine Image (AMI)。
流程
- 在 AWS EC2 Dashboard 中选择 Images,然后选择 AMI。
- 右键点击您的镜像并选择 Launch。
选择一个满足或超过工作负载要求的 Instance Type。
有关实例类型的信息,请参阅 Amazon EC2 实例类型。
点 Next: Configure Instance Details。
- 输入您要创建的实例数量。
- 对于 Network,选择您在设置 AWS 环境时创建的 VPC。为实例选择子网或创建新子网。
为 Auto-assign Public IP 选择 Enable。
注意这些是创建基本实例所需的最小配置选项。根据您的应用程序要求查看其他选项。
- 点击 Next: Add Storage。验证默认存储是否足够。
点击 Next: Add Tags。
注意标签可帮助您管理 AWS 资源。有关标记的信息,请参阅 标记您的 Amazon EC2 资源。
- 点击 Next: Configure Security Group。选择设置 AWS 环境时创建的安全组。
- 点 Review and Launch。验证您的选择。
点 Launch。此时会提示您选择现有密钥对或创建新密钥对。选择设置 AWS 环境时创建的密钥对。
注意验证您的私钥权限是否正确。如有必要,使用命令选项
chmod 400 <keyname>.pem来更改权限。- 点 Launch Instances。
点 View Instances。您可以命名实例。
现在,您可以通过选择一个实例并单击 Connect 来启动与实例的 SSH 会话。使用为 独立的 SSH 客户端 提供的示例。
注意另外,您可以使用 AWS CLI 启动实例。如需更多信息,请参阅 Amazon 文档中的启动、列出和终止 Amazon EC2 实例。
3.4.8. 附加红帽订阅 复制链接链接已复制到粘贴板!
使用 subscription-manager 命令,您可以注册并附加红帽订阅到 RHEL 实例。
先决条件
- 您必须已启用您的订阅。
流程
注册您的系统。
# subscription-manager register --auto-attach附加您的订阅。
- 您可以使用激活码来附加订阅。如需更多信息,请参阅创建红帽客户门户网站激活码。
- 或者,您可以使用订阅池(池 ID)的 ID 手动附加订阅。请参阅 将基于主机的订阅附加到 hypervisor。
可选: 要在 Red Hat Hybrid Cloud Console 中收集有关实例的各种系统指标,您可以使用 Red Hat Insights 注册实例。
# insights-client register --display-name <display-name-value>有关 Red Hat Insights 进一步配置的详情,请参考 Red Hat Insights 的客户端配置指南。
3.4.9. 对 AWS 黄金镜像设置自动注册 复制链接链接已复制到粘贴板!
要在 Amazon Web Services (AWS)上更快、更适地部署 RHEL 9 虚拟机,您可以将 RHEL 9 的黄金镜像设置为自动注册到 Red Hat Subscription Manager (RHSM)。
先决条件
您已下载了 AWS 的最新 RHEL 9 黄金镜像。具体步骤请参阅在 AWS 上使用黄金镜像。
注意一个 AWS 帐户一次只能附加到一个红帽帐户。因此,在将其附加到您的红帽帐户之前,请确保其他用户不需要访问 AWS 帐户。
步骤
- 将黄金镜像上传到 AWS。具体步骤请参阅将 Red Hat Enterprise Linux 镜像上传到 AWS。
- 使用上传的镜像创建虚拟机。他们将自动订阅 RHSM。
验证
在使用上述说明创建的 RHEL 9 虚拟机中,通过执行
subscription-manager identity命令来验证系统是否已注册到 RHSM。在成功注册的系统上,这会显示系统的 UUID。例如:# subscription-manager identity system identity: fdc46662-c536-43fb-a18a-bbcb283102b7 name: 192.168.122.222 org name: 6340056 org ID: 6340056
第 4 章 在 AWS 上配置红帽高可用性集群 复制链接链接已复制到粘贴板!
要创建集群,当节点出现故障时,RHEL 节点会自动重新分发其工作负载,请使用 Red Hat High Availability Add-On。此类高可用性(HA)集群也可以托管在公有云平台上,包括 AWS。在 AWS 上创建 RHEL HA 集群与在非云环境中创建 HA 集群类似。
要使用 EC2 实例作为集群节点在 Amazon Web Services (AWS)上配置 Red Hat HA 集群,请参阅以下部分。请注意,您有多个选项可用来获取用于集群的 Red Hat Enterprise Linux(RHEL)镜像。有关 AWS 镜像选项的详情,请查看 AWS 的 Red Hat Enterprise Linux 镜像选项。
先决条件
- 注册一个红帽客户门户网站(Red Hat Customer Portal) 帐户。
- 注册 AWS 并设置 AWS 资源。如需更多信息,请参阅使用 Amazon EC2 设置。
4.1. 在公有云平台上使用高可用性集群的好处 复制链接链接已复制到粘贴板!
高可用性(HA)集群是一组链接在一起的计算机(称为 节点),以运行特定的工作负载。HA 集群的目的是在出现硬件或软件故障时提供冗余。如果 HA 集群中的节点失败,Pacemaker 集群资源管理器会将工作负载分发到其他节点,且在集群中运行的服务中不会出现显著的停机时间。
您还可以在公有云平台上运行 HA 集群。在这种情况下,您要将云中的虚拟机(VM)实例用作单独的集群节点。在公有云平台上使用 HA 集群有以下优点:
- 改进了可用性:如果出现虚拟机故障,工作负载会快速地重新分发到其他节点,因此运行的服务不会中断。
- 可扩展性:在需求高时可以启动其他节点,在需求低时停止其它节点。
- 节约成本:采用现收现付定价时,您只需为正在运行的节点支付费用。
- 简化管理:有些公共云平台提供管理界面,以便更轻松地配置 HA 集群。
要在 Red Hat Enterprise Linux (RHEL)系统上启用 HA,红帽提供了一个高可用性附加组件。高可用性附加组件提供了在 RHEL 系统上创建 HA 集群的所有必要组件。这些组件包括高可用性服务管理和集群管理工具。
4.2. 创建 AWS 访问密钥和 AWS Secret 访问密钥 复制链接链接已复制到粘贴板!
在安装 AWS CLI 前,您需要创建一个 AWS 访问密钥和 AWS Secret 访问密钥。隔离和资源代理 API 使用 AWS 访问密钥和 Secret 访问密钥连接到集群中的每个节点。
先决条件
- 您的 IAM 用户帐户必须具有 Programmatic 访问权限。如需更多信息,请参阅设置 AWS 环境。
流程
- 启动 AWS 控制台。
- 点击您的 AWS 帐户 ID 来显示下拉菜单,并选择 My Security Credentials。
- 点 Users。
- 选择用户并打开 Summary 屏幕。
- 点 Security credentials 选项卡。
- 点 Create access key。
-
下载
.csv文件(或保存这两个密钥)。创建隔离设备时需要输入这些密钥。
4.3. 安装 AWS CLI 复制链接链接已复制到粘贴板!
在 AWS 中使用 AWS CLI 管理 HA 集群需要许多流程。
先决条件
- 您已创建了 AWS Access Key ID 和 AWS Secret Access Key,并可以访问它们。具体说明和详情,请参考 快速配置 AWS CLI。
步骤
使用
dnf命令安装 AWS 命令行工具。# dnf install awscli使用
aws --version命令验证您是否安装了 AWS CLI。$ aws --version aws-cli/1.19.77 Python/3.6.15 Linux/5.14.16-201.fc34.x86_64 botocore/1.20.77根据 AWS 访问详情配置 AWS 命令行客户端。
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
4.4. 创建 HA EC2 实例 复制链接链接已复制到粘贴板!
完成以下步骤以创建用作 HA 集群节点的实例。请注意,您有几个选项可用于获取用于集群的 RHEL 镜像。有关 AWS 的镜像选项的信息,请参阅 AWS 上的 Red Hat Enterprise Linux 镜像选项。
您可以创建和上传用于集群节点的自定义镜像,也可以使用黄金镜像或按需镜像。
先决条件
- 您已设置了一个 AWS 环境。如需更多信息,请参阅使用 Amazon EC2 设置。
流程
- 在 AWS EC2 Dashboard 中选择 Images,然后选择 AMI。
- 右键点击您的镜像并选择 Launch。
选择一个满足或超过工作负载要求的 Instance Type。根据您的 HA 应用,每个实例可能需要具有更高的容量。
有关实例类型的信息,请参阅 Amazon EC2 实例类型。
点 Next: Configure Instance Details。
输入您要为集群创建的 Number of instances。这个示例流程使用三个集群节点。
注意不要启动自动缩放组。
- 对于 Network,请选择您在 Set up AWS environment 中创建的 VPC。选择实例子网以创建新子网。
为 Auto-assign Public IP 选择 Enable。以下是 Configure Instance Details 所需的最小选择。根据您的特定 HA 应用,您可能需要进行其他选择。
注意这些是创建基本实例所需的最小配置选项。根据您的 HA 应用程序要求查看其他选项。
- 单击 Next: Add Storage ,并验证默认存储是否足够。除非您的 HA 应用程序需要其他存储选项,您不需要修改这些设置。
点击 Next: Add Tags。
注意标签可帮助您管理 AWS 资源。有关标记的信息,请参阅 标记您的 Amazon EC2 资源。
- 点击 Next: Configure Security Group。选择在 Setting the AWS environment 中创建的现有安全组。
- 点击 Review and Launch ,并验证您的选择。
- 点击 Launch。此时会提示您选择现有密钥对或创建新密钥对。选择在 Setting up the AWS environment 时创建的密钥对。
- 点击 Launch Instances。
点 View Instances。您可以命名实例。
注意另外,您可以使用 AWS CLI 启动实例。如需更多信息,请参阅 Amazon 文档中的启动、列出和终止 Amazon EC2 实例。
4.5. 配置私钥 复制链接链接已复制到粘贴板!
在 SSH 会话中使用私有 SSH 密钥文件(.pem)之前,请完成以下配置任务来使用该文件。
步骤
-
将密钥文件从
Downloads目录移到您的主目录或~/.ssh 目录。 更改密钥文件的权限,以便只有 root 用户可以读取它。
# chmod 400 KeyName.pem
4.6. 连接到 EC2 实例 复制链接链接已复制到粘贴板!
使用 所有节点上的 AWS 控制台,您可以连接到 EC2 实例。
步骤
- 启动 AWS Console ,并选择 EC2 实例。
- 点击 Connect ,并选择 A standalone SSH client。
-
在 SSH 终端会话中,使用弹出窗口中提供的 AWS 示例连接到实例。如果示例中没有显示路径,请为您的
KeyName.pem文件添加正确的路径。
4.7. 安装高可用性软件包和代理 复制链接链接已复制到粘贴板!
在每个节点上,您需要安装高可用性软件包和代理,以便在 AWS 上配置红帽高可用性集群。
步骤
删除 AWS Red Hat Update Infrastructure (RHUI)客户端。
$ sudo -i # dnf -y remove rh-amazon-rhui-client*在红帽注册虚拟机。
# subscription-manager register --auto-attach禁用所有软件仓库。
# subscription-manager repos --disable=*启用 RHEL 9 服务器 HA 软件仓库。
# subscription-manager repos --enable=rhel-9-for-x86_64-highavailability-rpms更新 RHEL AWS 实例。
# dnf update -y安装红帽高可用性附加组件软件包,以及来自高可用性频道的 AWS 隔离代理。
# dnf install pcs pacemaker fence-agents-aws在上一步中的
pcs和pacemaker安装过程中,创建了用户hacluster。在所有群集节点上为hacluster创建密码。所有节点都使用相同的密码。# passwd hacluster如果安装了
firewalld.service,请在 RHEL Firewall 中添加high availability服务。# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reload启动
pcs服务,并使其在引导时启动。# systemctl start pcsd.service # systemctl enable pcsd.service-
编辑
/etc/hosts,并添加 RHEL 主机名和内部 IP 地址。如需更多信息,请参阅红帽知识库解决方案 如何在 RHEL 集群节点上设置 /etc/hosts 文件?
验证
确保
pcs服务正在运行。# systemctl status pcsd.service pcsd.service - PCS GUI and remote configuration interface Loaded: loaded (/usr/lib/systemd/system/pcsd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2018-03-01 14:53:28 UTC; 28min ago Docs: man:pcsd(8) man:pcs(8) Main PID: 5437 (pcsd) CGroup: /system.slice/pcsd.service └─5437 /usr/bin/ruby /usr/lib/pcsd/pcsd > /dev/null & Mar 01 14:53:27 ip-10-0-0-48.ec2.internal systemd[1]: Starting PCS GUI and remote configuration interface… Mar 01 14:53:28 ip-10-0-0-48.ec2.internal systemd[1]: Started PCS GUI and remote configuration interface.
4.8. 创建集群 复制链接链接已复制到粘贴板!
完成以下步骤以创建节点集群。
流程
在其中一个节点上,输入以下命令来验证 pcs 用户
hacluster。在该命令中,指定集群中的每个节点的名称。# pcs host auth <hostname1> <hostname2> <hostname3>Example:
[root@node01 clouduser]# pcs host auth node01 node02 node03 Username: hacluster Password: node01: Authorized node02: Authorized node03: Authorized创建集群。
# pcs cluster setup <cluster_name> <hostname1> <hostname2> <hostname3>Example:
[root@node01 clouduser]# pcs cluster setup new_cluster node01 node02 node03 [...] Synchronizing pcsd certificates on nodes node01, node02, node03... node02: Success node03: Success node01: Success Restarting pcsd on the nodes in order to reload the certificates... node02: Success node03: Success node01: Success
验证
启用集群。
[root@node01 clouduser]# pcs cluster enable --all node02: Cluster Enabled node03: Cluster Enabled node01: Cluster Enabled启动集群。
[root@node01 clouduser]# pcs cluster start --all node02: Starting Cluster... node03: Starting Cluster... node01: Starting Cluster...
4.9. 配置隔离 复制链接链接已复制到粘贴板!
隔离配置可确保 AWS 集群上的故障节点被自动隔离,这样可防止节点消耗集群的资源或影响集群的功能。
要在 AWS 集群上配置隔离,您可以使用多种方法:
- 默认配置的标准过程。
- 另一种配置过程,用于更高级的配置,专注于自动化。
先决条件
-
您必须使用
fence_aws隔离代理。要获取fence_aws,请在集群中安装resource-agents软件包。
标准流程
输入以下 AWS 元数据查询以获取每个节点的实例 ID。您需要这些 ID 来配置隔离设备。如需更多信息,请参阅实例元数据和用户数据。
# echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id)例如:
[root@ip-10-0-0-48 ~]# echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id) i-07f1ac63af0ec0ac6输入以下命令配置隔离设备。使用
pcmk_host_map命令将 RHEL 主机名映射到实例 ID。使用您之前设置的 AWS 访问密钥和 AWS Secret 访问密钥。# pcs stonith \ create <name> fence_aws access_key=access-key secret_key=<secret-access-key> \ region=<region> pcmk_host_map="rhel-hostname-1:Instance-ID-1;rhel-hostname-2:Instance-ID-2;rhel-hostname-3:Instance-ID-3" \ power_timeout=240 pcmk_reboot_timeout=480 pcmk_reboot_retries=4Example:
[root@ip-10-0-0-48 ~]# pcs stonith \ create clusterfence fence_aws access_key=AKIAI123456MRMJA secret_key=a75EYIG4RVL3hdsdAslK7koQ8dzaDyn5yoIZ/ \ region=us-east-1 pcmk_host_map="ip-10-0-0-48:i-07f1ac63af0ec0ac6;ip-10-0-0-46:i-063fc5fe93b4167b2;ip-10-0-0-58:i-08bd39eb03a6fd2c7" \ power_timeout=240 pcmk_reboot_timeout=480 pcmk_reboot_retries=4- 要确保即时和完全的隔离,请在所有群集节点上禁用 ACPI Soft-Off。有关禁用 ACPI Soft-Off 的详情,请参考 禁用 ACPI 以用于集成的隔离设备。
备用流程
获取集群的 VPC ID。
# aws ec2 describe-vpcs --output text --filters "Name=tag:Name,Values=<clustername>-vpc" --query 'Vpcs[*].VpcId' vpc-06bc10ac8f6006664通过使用集群的 VPC ID,获取 VPC 实例。
$ aws ec2 describe-instances --output text --filters "Name=vpc-id,Values=vpc-06bc10ac8f6006664" --query 'Reservations[*].Instances[*].{Name:Tags[? Key==Name]|[0].Value,Instance:InstanceId}' | grep "\-node[a-c]" i-0b02af8927a895137 <clustername>-nodea-vm i-0cceb4ba8ab743b69 <clustername>-nodeb-vm i-0502291ab38c762a5 <clustername>-nodec-vm使用获取的实例 ID 来对群集上的每个节点配置隔离。例如,要在集群中的所有节点上配置隔离设备:
[root@nodea ~]# CLUSTER=<clustername> && pcs stonith create fence${CLUSTER} fence_aws access_key=XXXXXXXXXXXXXXXXXXXX pcmk_host_map=$(for NODE \ in node{a..c}; do ssh ${NODE} "echo -n \${HOSTNAME}:\$(curl -s http://169.254.169.254/latest/meta-data/instance-id)\;"; done) \ pcmk_reboot_retries=4 pcmk_reboot_timeout=480 power_timeout=240 region=xx-xxxx-x secret_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX有关创建隔离设备的特定参数的详情,请参考
fence_awsman page 或 配置和管理高可用性集群 指南。- 要确保即时和完全的隔离,请在所有群集节点上禁用 ACPI Soft-Off。有关禁用 ACPI Soft-Off 的详情,请参考 禁用 ACPI 以用于集成的隔离设备。
验证
显示节点上配置的隔离设备及其参数:
[root@nodea ~]# pcs stonith config fence${CLUSTER} Resource: <clustername> (class=stonith type=fence_aws) Attributes: access_key=XXXXXXXXXXXXXXXXXXXX pcmk_host_map=nodea:i-0b02af8927a895137;nodeb:i-0cceb4ba8ab743b69;nodec:i-0502291ab38c762a5; pcmk_reboot_retries=4 pcmk_reboot_timeout=480 power_timeout=240 region=xx-xxxx-x secret_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Operations: monitor interval=60s (<clustername>-monitor-interval-60s)测试其中一个集群节点的隔离代理。
# pcs stonith fence <awsnodename>注意这个命令的响应可能需要几分钟时间来显示。如果您监视节点被隔离的活跃终端会话,您会在进入 fence 命令后马上终止终端连接。
Example:
[root@ip-10-0-0-48 ~]# pcs stonith fence ip-10-0-0-58 Node: ip-10-0-0-58 fenced检查状态以验证该节点是否已隔离。
# pcs status例如:
[root@ip-10-0-0-48 ~]# pcs status Cluster name: newcluster Stack: corosync Current DC: ip-10-0-0-46 (version 1.1.18-11.el7-2b07d5c5a9) - partition with quorum Last updated: Fri Mar 2 19:55:41 2018 Last change: Fri Mar 2 19:24:59 2018 by root via cibadmin on ip-10-0-0-46 3 nodes configured 1 resource configured Online: [ ip-10-0-0-46 ip-10-0-0-48 ] OFFLINE: [ ip-10-0-0-58 ] Full list of resources: clusterfence (stonith:fence_aws): Started ip-10-0-0-46 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled启动上一步中隔离的节点。
# pcs cluster start <awshostname>检查状态以验证节点已启动。
# pcs status例如:
[root@ip-10-0-0-48 ~]# pcs status Cluster name: newcluster Stack: corosync Current DC: ip-10-0-0-46 (version 1.1.18-11.el7-2b07d5c5a9) - partition with quorum Last updated: Fri Mar 2 20:01:31 2018 Last change: Fri Mar 2 19:24:59 2018 by root via cibadmin on ip-10-0-0-48 3 nodes configured 1 resource configured Online: [ ip-10-0-0-46 ip-10-0-0-48 ip-10-0-0-58 ] Full list of resources: clusterfence (stonith:fence_aws): Started ip-10-0-0-46 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
4.10. 在集群节点上安装 AWS CLI 复制链接链接已复制到粘贴板!
在以前的版本中,您在主机系统中安装了 AWS CLI。在配置网络资源代理前,您需要在集群节点上安装 AWS CLI。
在每个集群节点上完成以下步骤。
先决条件
- 您必须已创建了 AWS Access Key 和 AWS Secret 访问密钥。如需更多信息,请参阅创建 AWS 访问密钥和 AWS Secret 访问密钥。
流程
- 安装 AWS CLI。具体说明请参阅 安装 AWS CLI。
验证 AWS CLI 是否已正确配置。应该会显示实例 ID 和实例名称。
Example:
[root@ip-10-0-0-48 ~]# aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,Tags[?Key==Name].Value]' i-07f1ac63af0ec0ac6 ip-10-0-0-48 i-063fc5fe93b4167b2 ip-10-0-0-46 i-08bd39eb03a6fd2c7 ip-10-0-0-58
4.11. 在 AWS 中设置 IP 地址资源 复制链接链接已复制到粘贴板!
为确保使用 IP 地址访问由集群管理的资源的客户端在发生故障转移时可以访问资源,集群必须包含 IP 地址资源 (使用特定的网络资源代理)。
RHEL HA 附加组件提供了一组资源代理,它们创建 IP 地址资源来管理 AWS 上的各种 IP 地址。要决定要配置哪些资源代理,请考虑您希望 HA 集群管理的 AWS IP 地址类型:
-
如果您需要管理互联网公开的 IP 地址,请使用
awseip网络资源。 -
如果您需要管理限制为单个 AWS 可用区(AZ)的专用 IP 地址,请使用
awsvip和IPaddr2网络资源。 -
如果您需要管理在同一 AWS 区域内的多个 AWS AZ 移动的 IP 地址,请使用
aws-vpc-move-ip网络资源。
如果 HA 集群不管理任何 IP 地址,则不需要在 AWS 上管理虚拟 IP 地址的资源代理。如果需要进一步指导您的特定部署,请咨询您的 AWS 供应商。
4.11.1. 创建 IP 地址资源以管理公开给互联网的 IP 地址 复制链接链接已复制到粘贴板!
为确保高可用性(HA)客户端可以访问使用面向公共的互联网连接的 RHEL 9 节点,请将 AWS Secondary Elastic IP 地址 (awseip)资源配置为使用弹性 IP 地址。
先决条件
- 您已配置了集群。
- 您的集群节点必须有权访问 RHEL HA 软件仓库。如需更多信息,请参阅 安装高可用性软件包和代理。
- 您已设置 AWS CLI。具体步骤请参阅安装 AWS CLI。
流程
安装
resource-agents-cloud软件包。# dnf install resource-agents-cloud使用 AWS 命令行界面(CLI),创建一个弹性 IP 地址。
[root@ip-10-0-0-48 ~]# aws ec2 allocate-address --domain vpc --output text eipalloc-4c4a2c45 vpc 35.169.153.122可选:显示
awseip的描述。这显示了这个代理的选项和默认操作。# pcs resource describe awseip创建 Secondary Elastic IP 地址资源,它使用之前使用 AWS CLI 指定的分配的 IP 地址。此外,创建二级 Elastic IP 地址将属于的资源组。
# pcs resource create <resource-id> awseip elastic_ip=<Elastic-IP-Address> allocation_id=<Elastic-IP-Association-ID> --group networking-groupExample:
# pcs resource create elastic awseip elastic_ip=35.169.153.122 allocation_id=eipalloc-4c4a2c45 --group networking-group
验证
显示集群的状态以验证所需资源是否正在运行。
# pcs status以下输出显示了一个运行的集群示例,其中
vip和elastic资源已作为networking-group资源组的一部分启动:[root@ip-10-0-0-58 ~]# pcs status Cluster name: newcluster Stack: corosync Current DC: ip-10-0-0-58 (version 1.1.18-11.el7-2b07d5c5a9) - partition with quorum Last updated: Mon Mar 5 16:27:55 2018 Last change: Mon Mar 5 15:57:51 2018 by root via cibadmin on ip-10-0-0-46 3 nodes configured 4 resources configured Online: [ ip-10-0-0-46 ip-10-0-0-48 ip-10-0-0-58 ] Full list of resources: clusterfence (stonith:fence_aws): Started ip-10-0-0-46 Resource Group: networking-group vip (ocf::heartbeat:IPaddr2): Started ip-10-0-0-48 elastic (ocf::heartbeat:awseip): Started ip-10-0-0-48 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled从本地工作站启动 SSH 会话到之前创建的弹性 IP 地址。
$ ssh -l <user-name> -i ~/.ssh/<KeyName>.pem <elastic-IP>Example:
$ ssh -l ec2-user -i ~/.ssh/cluster-admin.pem 35.169.153.122- 验证通过 SSH 连接到的主机是否与创建的弹性资源关联。
4.11.2. 创建 IP 地址资源来管理私有 IP 地址仅限于单个 AWS 可用区 复制链接链接已复制到粘贴板!
为确保 AWS 上的高可用性(HA)客户端可以访问使用只能在单个 AWS Availability Zone (AZ)中移动的专用 IP 地址的 RHEL 9 节点,请配置 AWS Secondary Private IP 地址 (awsvip)资源来使用虚拟 IP 地址。
您可以在集群中的任何节点上完成以下步骤。
先决条件
- 您已配置了集群。
- 您的集群节点有权访问 RHEL HA 软件仓库。如需更多信息,请参阅 安装高可用性软件包和代理。
- 您已设置 AWS CLI。具体步骤请参阅安装 AWS CLI。
流程
安装
resource-agents-cloud软件包。# dnf install resource-agents-cloud可选:查看
awsvip描述。这显示了这个代理的选项和默认操作。# pcs resource describe awsvip使用
VPC CIDR块中未使用的私有 IP 地址创建二级私有 IP 地址。此外,创建次私有 IP 地址将属于的资源组。# pcs resource create <resource-id> awsvip secondary_private_ip=<Unused-IP-Address> --group <group-name>Example:
[root@ip-10-0-0-48 ~]# pcs resource create privip awsvip secondary_private_ip=10.0.0.68 --group networking-group创建虚拟 IP 资源。这是一个 VPC IP 地址,可以从隔离的节点快速迁移到故障切换节点,从而使子网中隔离的节点失败。确保虚拟 IP 属于与您在上一步中创建的 Secondary Private IP 地址相同的资源组。
# pcs resource create <resource-id> IPaddr2 ip=<secondary-private-IP> --group <group-name>Example:
root@ip-10-0-0-48 ~]# pcs resource create vip IPaddr2 ip=10.0.0.68 --group networking-group
验证
显示集群的状态以验证所需资源是否正在运行。
# pcs status以下输出显示了一个运行的集群示例,其中
vip和privip资源已作为networking-group资源组的一部分启动:[root@ip-10-0-0-48 ~]# pcs status Cluster name: newcluster Stack: corosync Current DC: ip-10-0-0-46 (version 1.1.18-11.el7-2b07d5c5a9) - partition with quorum Last updated: Fri Mar 2 22:34:24 2018 Last change: Fri Mar 2 22:14:58 2018 by root via cibadmin on ip-10-0-0-46 3 nodes configured 3 resources configured Online: [ ip-10-0-0-46 ip-10-0-0-48 ip-10-0-0-58 ] Full list of resources: clusterfence (stonith:fence_aws): Started ip-10-0-0-46 Resource Group: networking-group privip (ocf::heartbeat:awsvip): Started ip-10-0-0-48 vip (ocf::heartbeat:IPaddr2): Started ip-10-0-0-58 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
4.11.3. 创建 IP 地址资源来管理可在多个 AWS 可用区间移动的 IP 地址 复制链接链接已复制到粘贴板!
为确保 AWS 上的高可用性(HA)客户端可以访问可在同一 AWS 区域中的多个 AWS 可用区间移动的 RHEL 9 节点,请配置一个 aws-vpc-move-ip 资源以使用弹性 IP 地址。
先决条件
- 您已配置了集群。
- 您的集群节点有权访问 RHEL HA 软件仓库。如需更多信息,请参阅 安装高可用性软件包和代理。
- 您已设置 AWS CLI。具体步骤请参阅安装 AWS CLI。
在集群中配置了 Identity and Access Management (IAM)用户,并具有以下权限:
- 修改路由表
- 创建安全组
- 创建 IAM 策略和角色
流程
安装
resource-agents-cloud软件包。# dnf install resource-agents-cloud可选:查看
aws-vpc-move-ip描述。这显示了这个代理的选项和默认操作。# pcs resource describe aws-vpc-move-ip为 IAM 用户设置
OverlayIPAgentIAM 策略。-
在 AWS 控制台中,导航到 Services → IAM → Policies → Create
OverlayIPAgentPolicy 输入以下配置,并将 < region>、& lt ;account-id> 和 <ClusterRouteTableID > 值更改为与您的集群对应。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1424870324000", "Effect": "Allow", "Action": "ec2:DescribeRouteTables", "Resource": "*" }, { "Sid": "Stmt1424860166260", "Action": [ "ec2:CreateRoute", "ec2:ReplaceRoute" ], "Effect": "Allow", "Resource": "arn:aws:ec2:<region>:<account-id>:route-table/<ClusterRouteTableID>" } ] }
-
在 AWS 控制台中,导航到 Services → IAM → Policies → Create
在 AWS 控制台中,在集群中的所有节点中禁用
Source/Destination Check功能。为此,请右键单击每个节点 → Networking → Change Source/Destination Checks。在出现的弹出消息中,单击 Yes, Disable。
为集群创建路由表。要做到这一点,在集群的一个节点上使用以下命令:
# aws ec2 create-route --route-table-id <ClusterRouteTableID> --destination-cidr-block <NewCIDRblockIP/NetMask> --instance-id <ClusterNodeID>在命令中,按如下所示替换值:
-
ClusterRouteTableID:现有集群 VPC 路由表的路由表 ID。 -
NewCIDRblockIP/NetMask:VPC 无类别域间路由(CIDR)块之外的新 IP 地址和子网掩码。例如,如果 VPC CIDR 块是172.31.0.0/16,新的 IP 地址/子网掩码可以是192.168.0.15/32。 -
ClusterNodeID: 集群中另一节点的实例 ID。
-
在集群的一个节点上创建一个
aws-vpc-move-ip资源,它使用客户端可访问的空闲 IP 地址。以下示例创建一个名为vpcip的资源,它使用 IP192.168.0.15。# pcs resource create vpcip aws-vpc-move-ip ip=192.168.0.15 interface=eth0 routing_table=<ClusterRouteTableID>在集群的所有节点上,编辑
/etc/hosts/文件,并使用新创建的资源的 IP 地址添加一行。例如:192.168.0.15 vpcip
验证
测试新的
aws-vpc-move-ip资源的故障转移功能:# pcs resource move vpcip如果故障转移成功,请在
vpcip资源移动后删除自动创建的约束:# pcs resource clear vpcip
第 5 章 在公共云平台上为 RHEL 配置 OpenTelemetry 收集器 复制链接链接已复制到粘贴板!
在 Amazon Web Services (AWS)上运行 RHEL 时,您可以使用 OpenTelemetry (OTel)框架来维护和调试 RHEL 实例。
RHEL 包含 OTel Collector 服务,可用于管理日志。OTel Collector 收集、处理、转换和从不同格式和外部后端导出或导入到其中的日志。您还可以使用 OTel Collector 聚合收集的数据,并生成对分析服务有用的指标。
5.1. OpenTelemetry Collector 的工作原理 复制链接链接已复制到粘贴板!
对于 AWS 上的 RHEL,您可以将 OTel Collector 服务配置为在 RHEL 实例和 AWS 遥测分析服务间接收、处理和导出日志,以自动管理 RHEL 实例上的遥测数据。OTel Collector 是 OTel 生态系统的一个组件,在其工作流中有三个阶段:接收器、处理器和导出器。
您可以根据具体用例在 YAML 文件中为这些组件配置工作流。通常,OTel Collector 可以正常工作:
- 接收器 从数据源(如应用程序和服务)收集遥测数据。
- 在接收器数据后,它会进入处理阶段,在其中定义一个 处理器 链来转换数据。
- 导出器 将遥测数据发送到所需的目的地。
5.2. OpenTelemetry 与 AWS CloudWatch Logs 集成 复制链接链接已复制到粘贴板!
将 OTel 与 Amazon Web Services (AWS)集成,用于日志管理涉及将 OTel Collector 配置为使用 AWS 上的 RHEL 作为日志的导出器。它的工作方式如下:
- 为 OTel Collector 配置导出器
- 启用日志连接
- 将数据从 RHEL 实例导出到 AWS CloudWatch 日志。
因此,您可以在单个位置从各种源收集日志数据,以便有效地管理日志分析。
在 AWS CloudWatch 的可用功能中,RHEL 实例目前仅支持日志记录。详情请查看 AWS Cloudwatch Logs exporter。
5.3. 为 journald 日志记录配置 OpenTelemetry 收集器 复制链接链接已复制到粘贴板!
要配置 OpenTelemetry (OTel) Collector,您需要修改 filelog 接收器的默认配置,以捕获 journald 服务日志。此配置涉及定义文件路径、日志格式和解析规则。在这个版本中,收集器处理日志并将其导出到服务,如 AWS CloudWatch 日志,以改进系统组件的可观察性和指标分析。
流程
在 RHEL 实例上安装
opentelemetry-collector软件包:# dnf install -y opentelemetry-collector启用并启动服务,将日志从 RHEL 实例传送到 AWS CloudWatch Logs:
# systemctl enable --now opentelemetry-collector.service要将 OTel Collector 配置为转发来自 RHEL 实例的
journald日志,请创建和编辑/etc/opentelemetry-collector/configs/10-cloudwatch-exporter.yaml文件:... exporters: awscloudwatchlogs: log_group_name: testing-logs-emf log_stream_name: testing-integrations-stream-emf raw_log: true region: us-east-1 endpoint: logs.us-east-1.amazonaws.com log_retention: 365 tags: sampleKey: sampleValue service: pipelines: logs: receivers: - journald exporters: - awscloudwatchlogs ...重启 OTel Collector 服务:
# systemctl restart opentelemetry-collector.service- 从 AWS 控制台为 AWS CloudWatch 代理创建 IAM 角色。具体步骤,请参阅创建 IAM 角色和用户,以用于 CloudWatch 代理。
- 通过 AWS 控制台将角色附加到 RHEL 实例。具体步骤,请参阅将 IAM 角色附加到实例。
- 从 AWS 控制台重启 RHEL 实例,以自动启用日志导出。
可选:如果您不再需要导出日志,请停止从 RHEL 实例传输日志:
# systemctl stop opentelemetry-collector.service可选:如果您不再需要这个服务,请永久禁用日志传输:
# systemctl disable opentelemetry-collector.service
5.4. OTel Collector 的接收器 复制链接链接已复制到粘贴板!
根据配置,接收器从单个位置的不同设备和服务收集基于遥测的数据,如日志和软件使用模式,以改进可观察性。
journald 接收器
OTel Collector 中的 journald 接收器从 journald 服务捕获日志。此接收器接受来自系统和应用程序服务的日志,如内核、用户和应用程序的日志,以提供改进的可观察性。您可以将 journald 日志记录用于二进制存储等属性,以更快地索引、基于用户的权限和日志大小管理。
详情请查看 Journald Receiver 中的配置选项。
5.5. OTel Collector 的处理器 复制链接链接已复制到粘贴板!
处理器在 接收器 和导出器之间充当中介,并通过添加、过滤、删除或转换字段来操作数据。处理器的选择和顺序取决于信号类型。
AWS 环境的资源检测
资源检测处理器收集处理器列表,并检测有关受管环境的信息。它在导出前管理遥测数据的详细信息。
有关代码片段,请参阅 AWS EC2 配置。
5.6. OTel Collector 的导出器 复制链接链接已复制到粘贴板!
导出器会根据配置和信号类型将处理的数据传输到指定的设备或服务,如 AWS CloudWatch Logs 和 Debug exporter。导出器可确保与目标服务兼容并促进与各种系统的集成。
AWS Cloudwatch Logs exporter
请注意,给定的配置目前只支持日志类型信号。通常,它的工作方式如下:
- 接收器将日志发送到 OTel Collector。
- 处理器在修改或增强导出方面处理日志。
-
awscloudwatchlogs配置将已处理的遥测发送到 AWS CloudWatch Logs。
详情请查看:
另外,Collector 提供扩展和处理器来过滤敏感数据,限制内存用量,并在连接丢失时将遥测数据保留在磁盘上。
Debug exporter
Debug Exporter 将 trace 和 metrics 打印到标准输出。请注意,这个导出器支持所有信号类型。您可以修改 OTel Collector YAML 配置,使其包含控制台导出器,它将将遥测数据输出到控制台。另外,要确保 journald 捕获输出,如果需要,您可以配置接收器服务。
详情请参阅 Debug exporter
第 6 章 使用安全引导在 AWS 上配置 RHEL 复制链接链接已复制到粘贴板!
安全引导是统一可扩展固件接口(UEFI)规格中的机制,可在引导时控制程序的执行。安全引导会在引导时验证引导装载程序及其组件的数字签名,以确保只执行可信和授权的程序,并防止未经授权的程序加载。您可以将此功能用于 AWS Marketplace Red Hat Enterprise Linux Amazon Machine Images (AMI)和自定义 RHEL AMI。
6.1. AWS 上的 RHEL AMI 类型 复制链接链接已复制到粘贴板!
AWS Marketplace RHEL AMI
AWS Marketplace 提供了一个预先配置的 Red Hat Enterprise Linux (RHEL) Amazon Machine Image (AMI),它为指定用例(如数据处理、系统管理和 web 开发)量身定制。这种类型的现成镜像可通过最大程度减少操作系统和软件包所需的手动安装和配置时间来减少设置。
自定义 RHEL AMI
自定义 RHEL AMI 为客户和合作伙伴提供灵活性,以构建和部署满足特定应用程序和工作流要求的定制环境。通过创建自定义 RHEL AMI,您可以使用预安装了所需工具、配置和安全策略的 RHEL 实例。这种自定义旨在更好地控制基础架构。
6.2. 了解云上的 RHEL 安全引导 复制链接链接已复制到粘贴板!
安全引导是统一可扩展固件接口(UEFI)的一项功能,可确保在引导时只执行可信和数字签名的程序和组件,如引导装载程序和内核。安全引导根据硬件中存储的可信密钥验证数字签名,如果它检测到任何由不受信任的实体签名的组件,则会中止引导过程。这可以防止恶意软件破坏操作系统。
安全引导是配置机密虚拟机(CVM)的基本组件,因为它保证引导链中只存在可信实体。它通过定义的接口提供对特定设备路径的身份验证访问,这样可确保只使用最新的配置,同时永久覆盖之前的配置。另外,当 Red Hat Enterprise Linux 内核启用安全引导机制时,它会进入 lockdown 模式,这样可确保只加载由可信供应商签名的内核模块。因此,安全引导提高了操作系统引导序列的安全性。
6.2.1. 安全引导组件 复制链接链接已复制到粘贴板!
安全引导机制包括固件、签名数据库、加密密钥、引导装载程序、硬件模块和操作系统。以下是 UEFI 可信变量的组件:
-
密钥交换密钥数据库(KEK):公钥交换,以在 RHEL 操作系统和虚拟机固件之间建立信任。您还可以使用这些密钥更新允许签名数据库(
db)和禁止签名数据库(dbx)。 - 平台密钥数据库(PK):一个自签名的单密钥数据库,用于在虚拟机固件和云平台之间建立信任。PK 还更新 KEK 数据库。
-
允许签名数据库(
db):维护证书或二进制哈希列表的数据库,以检查是否允许二进制文件在系统上引导。另外,来自db的所有证书都会导入到 RHEL 内核的.platform密钥环中。此功能允许您在锁定模式下添加和加载签名的第三方内核模块。 -
禁止签名数据库(
dbx):维护禁止在系统上引导的证书或二进制哈希列表的数据库。
针对 dbx 数据库和安全引导高级目标(SBAT)机制的二进制文件检查。SBAT 允许您通过保持签名二进制文件的证书保持有效的证书来撤销特定二进制文件的旧版本。
6.2.2. Cloud 上 RHEL 的安全引导阶段 复制链接链接已复制到粘贴板!
当 RHEL 实例以 Unified Kernel Image (UKI)模式引导并启用了安全引导时,RHEL 实例会按照以下顺序与云服务基础架构进行交互:
- 初始化 :当 RHEL 实例引导时,云托管固件最初引导并实施安全引导机制。
- 变量存储初始化 :固件会从变量存储初始化 UEFI 变量,这是一个专用的存储区域,用于固件需要管理引导过程和运行时操作的信息。当 RHEL 实例首次启动时,存储会从与虚拟机镜像关联的默认值初始化。
引导装载程序 :引导时,固件会加载第一个阶段引导装载程序。对于 x86 UEFI 环境中的 RHEL 实例,第一个阶段引导装载程序是 shim。shim 引导装载程序验证并加载引导过程的下一阶段,并作为 UEFI 和 GRUB 之间的桥接。
-
RHEL 中的 shim x86 二进制文件目前由
Microsoft 公司 UEFI CA 2011Microsoft 证书签名,以便 RHEL 实例可以在启用了安全引导模式的不同硬件和虚拟平台上引导,其中 Allowed 签名数据库(db)包含默认的 Microsoft 证书。 -
shim 二进制文件使用 Red Hat Secure Boot CA 扩展可信证书列表,以及可选的 Machine Owner Key (
MOK)。
-
RHEL 中的 shim x86 二进制文件目前由
-
UKI: shim 二进制文件加载 RHEL UKI (
kernel-uki-virt软件包)。UKI 由相应证书签名,即 x86_64 架构上的红帽安全引导签名 504,可在redhat-sb-certs软件包中找到。此证书由红帽安全引导 CA 签名,因此通过检查。 -
UKI 附加组件 :要使用 UKI
cmdline扩展,RHEL 内核将根据 shim 提供的db、MOK和证书检查其签名,以确保扩展由操作系统供应商 RHEL 或用户签名。
当 RHEL 内核以安全引导模式引导时,它会进入 锁定模式。输入 lockdown 后,RHEL 内核会将 db 密钥添加到 .platform 密钥环中,并将 MOK 密钥添加到 .machine 密钥环中。在内核构建过程中,标准 RHEL 内核模块(如 kernel-modules-core、kernel-modules、kernel-modules-extra )使用由私钥和公钥组成的临时密钥签名。完成每个内核构建后,私钥变得过时,以签署第三方模块。db 和 MOK 的证书可用于此目的。
6.3. 在 AWS Marketplace 中使用安全引导配置 RHEL 实例 复制链接链接已复制到粘贴板!
要确保 AWS 上的 RHEL 实例有安全引导序列,请使用安全引导。要在 AWS 上配置带有安全引导支持的 Red Hat Enterprise Linux 实例,请从 AWS Marketplace 启动 RHEL Amazon Machine Image (AMI),并使用 uefi-preferred 启用引导模式预先配置。uefi-preferred 选项支持安全引导所需的统一可扩展固件接口(UEFI)引导装载程序。如果没有 UEFI,安全引导功能将无法正常工作。
为避免安全问题,请生成并保留当前 RHEL 实例之外的私钥。如果安全引导 secret 存储在使用它们的同一实例上,入侵者可以访问机密以升级其特权。有关启动 AWS EC2 实例的更多信息,请参阅开始使用 Amazon EC2。
先决条件
RHEL AMI 在引导设置中启用
uefi-preferred选项:$ aws ec2 describe-images --image-id <ami-099f85fc24d27c2a7> --region <us-east-2> | grep -E '"ImageId"|"Name"|"BootMode"' "ImageId": "ami-099f85fc24d27c2a7", "Name": "RHEL-9.6.0_HVM_GA-20250423-x86_64-0-Hourly2-GP3", "BootMode": "uefi-preferred"您已在 RHEL 实例中安装了以下软件包:
-
awscli2 -
python3 -
openssl -
efivar -
keyutils -
edk2-ovmf -
python3-virt-firmware
-
流程
检查 RHEL Marketplace AMI 实例的平台状态:
$ mokutil --sb-state SecureBoot disabled Platform is in Setup Mode设置模式允许在实例中更新安全引导 UEFI 变量。创建新的随机通用唯一标识符(UUID),并将其存储在系统生成的文本文件中:
$ uuidgen --random > GUID.txt为平台密钥数据库生成一个新的
PK.keyRSA 私钥和自签名PK.cerX.509 证书:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout PK.key \ -new -x509 -sha256 \ -days 3650 \ -subj "/CN=Platform key/" \ -outform DER -out PK.ceropenssl工具通过将输出格式设置为可辨识的编码规则(DER)来为证书生成一个通用名称平台密钥。为密钥交换密钥数据库生成新的
KEK.keyRSA 私钥和自签名KEK.cerX.509 证书:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout KEK.key \ -new -x509 -sha256 \ -days 3650 \ -subj "CN=Key Exchange Key/" \ -outform DER -out KEK.cer生成
custom_db.cer自定义证书:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout custom_db.key \ -new -x509 -sha256 \ -days 3650 \ -subj "/CN=Signature Database key/" \ --outform DER -out custom_db.cer下载
Microsoft 公司 UEFI CA 2011证书:$ wget https://go.microsoft.com/fwlink/p/?linkid=321194 --user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" -O MicCorUEFCA2011_2011-06-27.crt为 x64 位系统下载禁止签名(
dbx)更新的 UEFI Revocation List 文件:$ wget https://uefi.org/sites/default/files/resources/x64_DBXUpdate.bin使用
virt-fw-vars工具生成 UEFI 变量文件:$ virt-fw-vars --set-pk "$(< GUID.txt)" PK.cer \ --add-kek "$(< GUID.txt)" KEK.cer \ --add-db "$(< GUID.txt)" custom_db.cer \ --add-db 77fa9abd-0359-4d32-bd60-28f4e78f784b MicCorUEFCA2011_2011-06-27.crt \ --set-dbx DBXUpdate.bin -i /usr/share/edk2/ovmf/OVMF_VARS.secboot.fd \ --output VARS将 UEFI 变量转换为可扩展固件接口(EFI)签名列表(ESL)格式:
$ python3 /usr/share/doc/python3-virt-firmware/experimental/authfiles.py \ --input VARS \ --outdir . $ for f in PK KEK db dbx; do tail -c +41 $f.auth > $f.esl; done注意每个 GUID 都是分配的值,代表一个 EFI 参数
-
8be4df61-93ca-11d2-aa0d-00e098032b8c:EFI_GLOBAL_VARIABLE_GUID -
d719b2cb-3d3a-4596-a3bc-dad00e67656f:EFI_IMAGE_SECURITY_DATABASE_GUID
EFI_GLOBAL_VARIABLE_GUID参数维护可引导设备和引导管理器的设置,而EFI_IMAGE_SECURITY_DATABASE_GUID参数代表安全数据库,用于安全引导变量dbx,以及所需密钥和证书的存储。-
将数据库证书传送到目标实例,使用
efivar工具来管理 UEFI 环境变量。要转让
PK.esl,请输入:# efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-PK -f PK.esl要传输
KEK.esl,请输入:# efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-KEK -f KEK.esl要传输
db.esl,请输入:# efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-db -f db.esl要传输 x64 架构的
dbx.eslUEFI 撤销列表文件,请输入:# efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-dbx -f dbx.esl
- 从 AWS 控制台重启实例。
验证
验证是否启用了安全引导:
$ mokutil --sb-state SecureBoot enabled使用
keyctl工具验证自定义证书的内核密钥环:$ sudo keyctl list %:.platform 4 keys in keyring: 907254483: ---lswrv 0 0 asymmetric: Signature Database key: f064979641c24e1b935e402bdbc3d5c4672a1acc ...
6.4. 使用自定义 RHEL 镜像配置带有安全引导的 RHEL 实例 复制链接链接已复制到粘贴板!
要确保 AWS 上的 RHEL 实例有安全引导序列,请使用安全引导。当注册自定义 RHEL Amazon 机器镜像(AMI)时,镜像由安全引导的预存储统一固件接口(UEFI)变量组成。这可让从 RHEL AMI 启动的所有实例都使用带有第一次引导时所需的变量的安全引导机制。
先决条件
- 您已创建了并上传 AWS AMI 镜像。详情请参阅 创建和上传 AWS AMI。
您已安装了以下软件包:
-
awscli2 -
python3 -
openssl -
efivar -
keyutils -
python3-virt-firmware
-
流程
创建新的随机通用唯一标识符(UUID),并将其存储在系统生成的文本文件中:
$ uuidgen --random > GUID.txt为平台密钥数据库生成一个新的 RSA 私钥
PK.key和自签名 X.509 证书PK.cer:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout PK.key \ -new -x509 -sha256 \ -days 3650 \ -outform DER -out PK.ceropenssl工具通过将输出格式设置为可辨识的编码规则(DER)来为证书生成一个通用名称平台密钥。为密钥交换密钥数据库生成一个新的 RSA 私钥
KEK.key和自签名 X.509 证书KEK.cer:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout KEK.key \ -new -x509 -sha256 \ -days 3650 \ -subj "/CN=Key Exchange Key/" \ -outform DER -out KEK.cer生成自定义证书
custom_db.cer:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout custom_db.key \ -new -x509 -sha256 \ -days 3650 -subj "/CN=Signature Database key/" \ --outform DER -out custom_db.cer为 64 位系统下载禁止签名(
dbx)更新的 UEFI Revocation List 文件:$ wget https://uefi.org/sites/default/files/resources/x64_DBXUpdate.bin使用
virt-fw-vars工具从密钥、数据库证书和 UEFI 变量存储生成aws_blob.bin二进制文件:$ virt-fw-vars --output-aws aws_blob.bin \ --set-pk "$(< GUID.txt)" PK.cer \ --add-kek "$(< GUID.txt)" KEK.cer \ --add-db "$(< GUID.txt)" custom_db.cer \ --add-db 77fa9abd-0359-4d32-bd60-28f4e78f784b MicCorUEFCA2011_2011-06-27.crt \ --set-dbx x64_DBXUpdate.bin自定义 blob 由以下几项组成:
-
PK.cer带有自签名 X.509 证书 -
KEK.cer和custom_db.cer带有所有者组 GUID 和 Privacy Enhanced Mail (pem)格式 -
从排除签名的数据库下载的
x64_DBXUpdate.bin列表(dbx)。 -
77fa9abd-0359-4d32-bd60-28f4e78f784bUUID 适用于MicCorUEFCA2011_2011-06-27.crtMicrosoft Corporation UEFI 认证机构 2011。
-
使用
awscli2工具使用所需的安全引导变量从磁盘快照中创建并注册 AMI:$ aws ec2 register-image \ --name rhel9-example-ami \ --architecture x86_64 \ --virtualization-type hvm \ --root-device-name "/dev/sda1" \ --block-device-mappings "{\"DeviceName\": \"/dev/sda1\",\"Ebs\": {\"SnapshotId\": \"snap-example-id\"}}" \ --ena-support --boot-mode uefi \ --region eu-central-1 \ --uefi-data $(cat aws_blob.bin)- 从 AWS 控制台重启实例。
验证
验证是否启用了安全引导:
$ mokutil --sb-state SecureBoot enabled使用
keyctl工具验证自定义证书的内核密钥环:$ sudo keyctl list %:.platform 4 keys in keyring: 907254483: ---lswrv 0 0 asymmetric: Signature Database key: f064979641c24e1b935e402bdbc3d5c4672a1acc ...