使用 RHEL 系统角色自动化系统管理
使用 Red Hat Ansible Automation Platform playbook 在多个主机上进行一致且可重复配置的 RHEL 部署
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 在顶部导航栏中点 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 RHEL 系统角色简介 复制链接链接已复制到粘贴板!
通过使用 RHEL 系统角色,您可以远程管理跨 RHEL 主版本的多个 RHEL 系统的系统配置。
以下描述了 Ansible 环境中的重要术语和概念:
- 控制节点
- 控制节点是您运行 Ansible 命令和 playbook 的系统。您的控制节点可以是 Ansible Automation Platform、Red Hat Satellite 或 RHEL 10、9、8 或 7 主机。如需更多信息,请参阅 在 RHEL 10 上准备一个控制节点。
- 受管节点
- 受管节点是您通过 Ansible 管理的服务器和网络设备。受管节点有时也称为主机。Ansible 不必安装到受管节点上。如需更多信息,请参阅 准备一个受管节点。
- Ansible playbook
- 在 playbook 中,您可以定义要在受管节点上实现的配置,或受管节点上系统要执行的一组步骤。Playbook 是 Ansible 的配置、部署和编配语言。
- 清单(Inventory)
- 在清单文件中,您可以列出受管节点并指定每个受管节点的信息,如 IP 地址。在清单中,您还可以通过创建和嵌套组来组织受管节点,以便于扩展。清单文件有时也称为 hostfile。
- Red Hat Enterprise Linux 10 控制节点上的可用角色和模块
rhel-system-roles软件包提供的角色:-
ad_integration:活动目录集成 -
aide:高级入侵检测环境 -
bootloader:GRUB 引导装载程序管理 -
certificate:证书颁发和续订 -
cockpit:Web 控制台安装和配置 -
crypto_policies: 系统范围的加密策略 -
fapolicy: 文件访问策略守护进程配置 -
firewall: Firewalld 管理 -
ha_cluster: HA 集群管理 -
journald: Systemd journald 管理 -
kdump: 内核转储管理 -
kernel_settings: 内核设置管理 -
logging:配置日志记录 -
metrics:性能监控和指标 -
nbde_client: 网络绑定磁盘加密客户端 -
nbde_server: 网络绑定磁盘加密服务器 -
network:网络配置 -
podman: Podman 容器管理 -
postfix:Postfix 配置 -
postgresql: PostgreSQL 配置 -
rhc:订阅 RHEL 和配置 Insights 客户端 -
selinux: SELinux 管理 -
ssh:SSH 客户端配置 -
sshd:SSH 服务器配置 -
storage:存储管理 -
systemd: 管理 systemd 单元 -
timesync: 时间同步 -
tlog: 终端会话记录 -
vpn:配置 IPsec VPN
-
第 2 章 准备一个控制节点和受管节点以使用 RHEL 系统角色 复制链接链接已复制到粘贴板!
在使用单个 RHEL 系统角色管理服务和设置前,您必须准备控制节点和受管节点。
2.1. 在 RHEL 10 上准备一个控制节点 复制链接链接已复制到粘贴板!
在使用 RHEL 系统角色前,您必须配置一个控制节点。然后,此系统根据 playbook 从清单中配置受管主机。
先决条件
- 该系统已注册到客户门户网站。
-
Red Hat Enterprise Linux Server订阅被附加到系统上。 -
可选:
Ansible Automation Platform订阅被附加到系统上。
步骤
创建一个名为
ansible的用户,来管理并运行 playbook:useradd ansible
[root@control-node]# useradd ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 切换到新创建的
ansible用户:su - ansible
[root@control-node]# su - ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以这个用户身份执行其余步骤。
创建一个 SSH 公钥和私钥:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为密钥文件使用推荐的默认位置。
- 可选: 要防止 Ansible 在每次建立连接时提示您输入 SSH 密钥密码,请配置一个 SSH 代理。
使用以下内容创建
~/.ansible.cfg文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意~/.ansible.cfg文件中的设置具有更高的优先级,并覆盖全局/etc/ansible/ansible.cfg文件中的设置。使用这些设置,Ansible 执行以下操作:
- 管理指定清单文件中的主机。
-
当帐户建立到受管节点的 SSH 连接时,使用
remote_user参数中设置的帐户。 -
使用
sudo工具,以root用户身份在受管节点上执行任务。 - 每次应用 playbook 时,都会提示输入远程用户的 root 密码。出于安全考虑,建议这样做。
创建一个列出受管主机主机名的 INI 或 YAML 格式的
~/inventory文件。您还可以在清单文件中定义主机组。例如,以下是 INI 格式的清单文件,它有三个主机,以及一个名为US的主机组:managed-node-01.example.com [US] managed-node-02.example.com ansible_host=192.0.2.100 managed-node-03.example.com
managed-node-01.example.com [US] managed-node-02.example.com ansible_host=192.0.2.100 managed-node-03.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,控制节点必须能够解析主机名。如果 DNS 服务器无法解析某些主机名,请在主机条目旁边添加
ansible_host参数来指定其 IP 地址。安装 RHEL 系统角色:
在没有 Ansible Automation Platform 的 RHEL 主机上,安装
rhel-system-roles软件包:dnf install rhel-system-roles
[root@control-node]# dnf install rhel-system-rolesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令在
/usr/share/ansible/collections/ansible_collections/redhat/rhel_system_roles/目录中安装集合,ansible-core软件包作为依赖项。在 Ansible Automation Platform 上,以
ansible用户身份执行以下步骤:-
将 Red Hat Automation hub 定义为
~/.ansible.cfg文件中内容的主源。 从 Red Hat Automation Hub 安装
redhat.rhel_system_roles集合:ansible-galaxy collection install redhat.rhel_system_roles
[ansible@control-node]$ ansible-galaxy collection install redhat.rhel_system_rolesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令在
~/.ansible/collections/ansible_collections/redhat/rhel_system_roles/目录中安装集合。
-
将 Red Hat Automation hub 定义为
后续步骤
- 准备受管节点。如需更多信息,请参阅 准备一个受管节点。
2.2. 准备受管节点 复制链接链接已复制到粘贴板!
受管节点是在清单中列出的系统,它由控制节点根据 playbook 进行配置。您不必在受管主机上安装 Ansible。
先决条件
- 您已准备好了控制节点。如需更多信息,请参阅 在 RHEL 10 上准备一个控制节点。
您从控制节点进行 SSH 访问的权限。
重要以
root用户身份进行直接的 SSH 访问是一个安全风险。要降低这个风险,您将在此节点上创建一个本地用户,并在准备受管节点时配置一个sudo策略。然后,控制节点上的 Ansible 可以使用本地用户帐户登录到受管节点,并以不同的用户身份(如root)运行 playbook。
流程
创建一个名为
ansible的用户:useradd ansible
[root@managed-node-01]# useradd ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 控制节点稍后使用这个用户建立与这个主机的 SSH 连接。
为
ansible用户设置密码:passwd ansible Changing password for user ansible. New password: <password> Retype new password: <password> passwd: all authentication tokens updated successfully.
[root@managed-node-01]# passwd ansible Changing password for user ansible. New password: <password> Retype new password: <password> passwd: all authentication tokens updated successfully.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当 Ansible 使用
sudo以root用户身份执行任务时,您必须输入此密码。在受管主机上安装
ansible用户的 SSH 公钥:以
ansible用户身份登录到控制节点,并将 SSH 公钥复制到受管节点:ssh-copy-id managed-node-01.example.com /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible/.ssh/id_rsa.pub" The authenticity of host 'managed-node-01.example.com (192.0.2.100)' can't be established. ECDSA key fingerprint is SHA256:9bZ33GJNODK3zbNhybokN/6Mq7hu3vpBXDrCxe7NAvo.
[ansible@control-node]$ ssh-copy-id managed-node-01.example.com /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible/.ssh/id_rsa.pub" The authenticity of host 'managed-node-01.example.com (192.0.2.100)' can't be established. ECDSA key fingerprint is SHA256:9bZ33GJNODK3zbNhybokN/6Mq7hu3vpBXDrCxe7NAvo.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当提示时,输入
yes进行连接:Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当提示时,输入密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在控制节点上远程执行命令来验证 SSH 连接:
ssh managed-node-01.example.com whoami ansible
[ansible@control-node]$ ssh managed-node-01.example.com whoami ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为
ansible用户创建一个sudo配置:使用
visudo命令创建并编辑/etc/sudoers.d/ansible文件:visudo /etc/sudoers.d/ansible
[root@managed-node-01]# visudo /etc/sudoers.d/ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在普通编辑器中使用
visudo的好处是该工具提供基本的检查,如在安装文件之前解析错误。在
/etc/sudoers.d/ansible文件中配置满足您要求的sudoers策略,例如:要为
ansible用户授予权限,以便在输入ansible用户密码后以此主机上的任何用户和组身份运行所有命令,请使用:ansible ALL=(ALL) ALL
ansible ALL=(ALL) ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要向
ansible用户授予权限,以便在不输入ansible用户密码的情况下以该主机上任何用户和组的身份运行所有命令,请使用:ansible ALL=(ALL) NOPASSWD: ALL
ansible ALL=(ALL) NOPASSWD: ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow
或者,配置匹配您安全要求的更精细的策略。有关
sudoers策略的详情,请查看sudoers (5)手册页。
验证
验证您可以在所有受管节点上执行来自控制节点的命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 硬编码的所有组会动态包含清单文件中列出的所有主机。
使用 Ansible
command模块在受管主机上运行whoami工具来验证特权升级是否可以正常工作:ansible managed-node-01.example.com -m command -a whoami BECOME password: <password> managed-node-01.example.com | CHANGED | rc=0 >> root
[ansible@control-node]$ ansible managed-node-01.example.com -m command -a whoami BECOME password: <password> managed-node-01.example.com | CHANGED | rc=0 >> rootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果命令返回 root,则您在受管节点上正确地配置了
sudo。
第 3 章 Ansible vault 复制链接链接已复制到粘贴板!
有时,您的 playbook 需要使用敏感数据,如密码、API 密钥和其他 secret 来配置受管主机。将此信息以纯文本形式存储在变量或其他与 Ansible 兼容的文件中存在安全风险,因为有权访问这些文件的任何用户都可以读取敏感数据。
使用 Ansible vault,您可以加密、解密、查看和编辑敏感信息。它们可以包括:
- 在 Ansible Playbook 中插入的变量文件
- 主机和组变量
- 执行 playbook 时作为参数传递的变量文件
- Ansible 角色中定义的变量
您可以使用 Ansible vault 安全地管理单个变量、整个文件,甚至像 YAML 文件这样的结构化数据。然后,这些数据可以安全地存储在版本控制系统中,或者与团队成员共享,而无需公开敏感信息。
文件使用高级加密标准(AES256)的对称加密进行了保护,其中单个密码或密码短语用于加密和解密数据。请注意,这一操作方式尚未被第三方正式审核。
要简化管理,设置您的 Ansible 项目,以便敏感变量和所有其他变量都保存在单独的文件或目录中是有意义的。然后,您可以使用 ansible-vault 命令保护包含敏感变量的文件。
- 创建一个加密的文件
以下命令提示您输入新的 vault 密码。然后,它使用默认编辑器打开一个文件以存储敏感变量。
ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
# ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 查看一个加密的文件
以下命令提示您输入现有的 vault 密码。然后,它显示已加密的文件的敏感内容。
ansible-vault view vault.yml Vault password: <vault_password> my_secret: "yJJvPqhsiusmmPPZdnjndkdnYNDjdj782meUZcw"
# ansible-vault view vault.yml Vault password: <vault_password> my_secret: "yJJvPqhsiusmmPPZdnjndkdnYNDjdj782meUZcw"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 编辑一个加密的文件
以下命令提示您输入现有的 vault 密码。然后,它使用默认编辑器打开已加密的文件,以便您更新敏感变量。
ansible-vault edit vault.yml Vault password: <vault_password>
# ansible-vault edit vault.yml Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 加密一个现有文件
以下命令提示您输入新的 vault 密码。然后,它会加密一个现有的未加密的文件。
ansible-vault encrypt vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password> Encryption successful
# ansible-vault encrypt vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password> Encryption successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 解密一个现有文件
以下命令提示您输入现有的 vault 密码。然后,它解密一个现有的加密文件。
ansible-vault decrypt vault.yml Vault password: <vault_password> Decryption successful
# ansible-vault decrypt vault.yml Vault password: <vault_password> Decryption successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 更改加密文件的密码
以下命令提示您输入原始 vault 密码,然后提示输入新的 vault 密码。
ansible-vault rekey vault.yml Vault password: <vault_password> New Vault password: <vault_password> Confirm New Vault password: <vault_password> Rekey successful
# ansible-vault rekey vault.yml Vault password: <vault_password> New Vault password: <vault_password> Confirm New Vault password: <vault_password> Rekey successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow - playbook 中 Ansible vault 变量的基本应用
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您在 Ansible Playbook 的
vars_files部分中使用变量(vault.yml)读取文件,并使用与使用普通变量相同的方式使用花括号。然后,您可以使用ansible-playbook --ask-vault-pass命令运行 playbook,并手动输入密码。或者,您可以将密码保存到单独的文件中,并使用ansible-playbook --vault-password-file /path/to/my/vault-password-file命令运行 playbook。
第 4 章 使用 RHEL 系统角色将 RHEL 系统加入到活动目录 复制链接链接已复制到粘贴板!
如果您的机构使用 Microsoft Active Directory (AD)集中管理用户、组和其他资源,您可以将 Red Hat Enterprise Linux (RHEL)主机加入到此 AD 。例如,AD 用户可以登录到 RHEL,您可以将 RHEL 主机上的服务提供给经过身份验证的 AD 用户。通过使用 ad_integration RHEL 系统角色,您可以将 Red Hat Enterprise Linux 系统自动集成到活动目录(AD)域中。
ad_integration 角色用于使用没有身份管理(IdM)环境的直接 AD 集成的部署。对于 IdM 环境,请使用 ansible-freeipa 角色。
4.1. 使用 ad_integration RHEL 系统角色将 RHEL 加入到一个活动目录域 复制链接链接已复制到粘贴板!
您可以使用 ad_integration RHEL 系统角色自动化将 RHEL 加入到活动目录(AD)域的过程。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。 - 受管节点使用可以解析 AD DNS 条目的 DNS 服务器。
- AD 帐户的凭证,该帐户有权将计算机加入到域中。
受管节点可使用以下端口建立到 AD 域控制器的连接:
Expand 源端口 目的端口 协议 服务 1024 - 65535
53
UDP 和 TCP
DNS
1024 - 65535
389
UDP 和 TCP
LDAP
1024 - 65535
636
TCP
LDAPS
1024 - 65535
88
UDP 和 TCP
Kerberos
1024 - 65535
464
UDP 和 TCP
Kerberos 密码更改请求
1024 - 65535
3268
TCP
LDAP 全局目录
1024 - 65535
3269
TCP
LDAPS 全局目录
1024 - 65535
123
UDP
NTP(如果启用了时间同步)
1024 - 65535
323
UDP
NTP(如果启用了时间同步)
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:usr: administrator pwd: <password>
usr: administrator pwd: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ad_integration_timesync_source: <time_server>-
指定用于时间同步的 NTP 服务器。Kerberos 需要在 AD 域控制器和域成员中同步时间,以防止重播攻击。如果省略此变量,
ad_integration角色不会使用timesyncRHEL 系统角色在受管节点上配置时间同步。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ad_integration/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查 AD 用户(如
administrator)是否在受管节点上本地可用:ansible managed-node-01.example.com -m command -a 'getent passwd administrator@ad.example.com' administrator@ad.example.com:*:1450400500:1450400513:Administrator:/home/administrator@ad.example.com:/bin/bash
$ ansible managed-node-01.example.com -m command -a 'getent passwd administrator@ad.example.com' administrator@ad.example.com:*:1450400500:1450400513:Administrator:/home/administrator@ad.example.com:/bin/bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 使用 RHEL 系统角色配置 GRUB 2 引导装载程序 复制链接链接已复制到粘贴板!
通过使用 bootloader RHEL 系统角色,您可以自动化与 GRUB2 引导装载程序相关的配置和管理任务。
此角色目前支持配置在以下 CPU 构架上运行的 GRUB2 引导装载程序:
- AMD 和 Intel 64 位构架(x86-64)
- 64 位 ARM 架构(ARMv8.0)
- IBM Power Systems, Little Endian(POWER9)
5.1. 使用 bootloader RHEL 系统角色更新现有引导装载程序条目 复制链接链接已复制到粘贴板!
您可以使用 bootloader RHEL 系统角色,以自动的方式更新 GRUB2 引导菜单中的现有条目。这样,您可以有效地传递可以优化系统性能或行为的特定内核命令行参数。
例如,如果您使用不需要来自内核和 init 系统的详细引导消息的系统,请使用 bootloader 将 quiet 参数应用到受管节点上的现有引导装载程序条目中,以实现更干净、更整洁、更用户友好的引导体验。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。 - 您识别了与您要更新的引导装载程序条目对应的内核。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
kernel- 指定与您要更新的引导装载程序条目关联的内核。
options- 指定要更新您所选的引导装载程序条目(内核)的内核命令行参数。
bootloader_reboot_ok: true- 角色检测到需要重启才能使更改生效,并执行受管节点的重启。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.bootloader/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查您指定的引导装载程序条目是否有更新的内核命令行参数:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4. 使用 bootloader RHEL 系统角色收集引导装载程序配置信息 复制链接链接已复制到粘贴板!
您可以使用 bootloader RHEL 系统角色,以自动的方式收集有关 GRUB2 引导装载程序条目的信息。这样,您可以快速确定您的系统是否被设置为正确引导,所有条目是否都指向正确的内核和初始 RAM 磁盘镜像。
因此,您可以,例如:
- 防止引导失败。
- 在故障排除时恢复到已知的良好状态。
- 确保与安全相关的内核命令行参数被正确配置。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.bootloader/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在控制节点上运行前面的 playbook 后,您会看到类似的命令行输出,如下例中所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令行输出显示以下有关引导条目的显著的配置信息:
args- 在引导过程中,命令行参数被 GRUB2 引导装载程序传递给内核。它们配置内核的各种设置和行为、initramfs 和其他引导时组件。
id- 分配给引导装载程序菜单中每个引导条目的唯一标识符。它由机器 ID 和内核版本组成。
root- 要挂载的内核的根文件系统,并在启动过程中用作主文件系统。
第 6 章 从 CA 请求证书,并使用 RHEL 系统角色创建自签名证书 复制链接链接已复制到粘贴板!
许多服务,如 Web 服务器,都使用 TLS 加密与客户端的连接。这些服务需要一个私钥和证书,以及签名证书的可信证书颁发机构(CA)。
通过使用 certificate RHEL 系统角色,您可以在受管节点上自动生成私钥。另外,角色将 certmonger 服务配置为向 CA 发送证书签名请求(CSR),且服务会在证书过期前自动更新证书。
出于测试目的,您可以使用 certificate 角色创建自签名证书,而不是从 CA 请求一个签名证书。
6.1. 使用 certificate RHEL 系统角色从 IdM CA 请求一个新证书 复制链接链接已复制到粘贴板!
如果 Red Hat Enterprise Linux 主机是 RHEL 身份管理(IdM)环境的成员,则您可以从 IdM 证书颁发机构(CA)请求 TLS 证书,并在此主机上运行的服务中使用它们。通过使用 certificate RHEL 系统角色,您可以自动化创建私钥的过程,并让 certmonger 服务从 CA 请求一个证书。默认情况下,certmonger 也将在证书过期前更新证书。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。 - 受管节点是 IdM 域的成员,域使用集成了 IdM 的 CA。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
name: <path_or_file_name>定义生成的私钥和证书文件的名称或路径:
-
如果将变量设置为
web-server,则角色会将私钥存储在/etc/pki/tls/private/web-server.key中,并将证书存储在/etc/pki/tls/certs/web-server.crt文件中。 如果将变量设置为一个路径,如
/tmp/web-server,则角色会将私钥存储在/tmp/web-server.key中,并将证书存储在/tmp/web-server.crt文件中。请注意,您使用的目录必须设置了
cert_tSELinux 上下文。您可以使用selinuxRHEL 系统角色管理 SELinux 上下文。
-
如果将变量设置为
ca: ipa- 定义角色从 IdM CA 请求证书。
dns: <hostname_or_list_of_hostnames>-
设置发布的证书中的 Subject Alternative Names (SAN)字段包含的主机名。您可以使用通配符(
*)或以 YAML 列表格式指定多个名称。 principal: <kerberos_principal>- 可选:设置应该在证书中包含的 Kerberos 主体。
run_before: <command>-
可选:定义
certmonger在从 CA 请求证书之前应执行的命令。 run_after: <command>-
可选:定义
certmonger在从 CA 收到发布的证书后应该执行的命令。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.certificate/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
列出
certmonger服务管理的证书:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2. 使用 certificate RHEL 系统角色请求一个新的自签名证书 复制链接链接已复制到粘贴板!
如果需要用于测试环境的 TLS 证书,您可以使用自签名证书。通过使用 certificate RHEL 系统角色,您可以自动化创建私钥的过程,并让 certmonger 服务创建一个自签名证书。默认情况下,certmonger 也将在证书过期前更新证书。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
name: <path_or_file_name>定义生成的私钥和证书文件的名称或路径:
-
如果将变量设置为
web-server,则角色会将私钥存储在/etc/pki/tls/private/web-server.key中,并将证书存储在/etc/pki/tls/certs/web-server.crt文件中。 如果将变量设置为一个路径,如
/tmp/web-server,则角色会将私钥存储在/tmp/web-server.key中,并将证书存储在/tmp/web-server.crt文件中。请注意,您使用的目录必须设置了
cert_tSELinux 上下文。您可以使用selinuxRHEL 系统角色管理 SELinux 上下文。
-
如果将变量设置为
ca: self-sign- 定义角色创建了一个自签名证书。
dns: <hostname_or_list_of_hostnames>-
设置发布的证书中的 Subject Alternative Names (SAN)字段包含的主机名。您可以使用通配符(
*)或以 YAML 列表格式指定多个名称。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.certificate/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
列出
certmonger服务管理的证书:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 7 章 使用 RHEL 系统角色安装和配置 web 控制台 复制链接链接已复制到粘贴板!
使用 cockpit RHEL 系统角色,您可以在多个 RHEL 系统上自动部署和启用 Web 控制台。
7.1. 使用 cockpit RHEL 系统角色安装 Web 控制台 复制链接链接已复制到粘贴板!
您可以使用 cockpit 系统角色在多个系统上自动安装和启用 RHEL web 控制台。
在本例中,您使用 cockpit 系统角色来:
- 安装 RHEL web 控制台。
-
允许
firewalld和selinux系统角色配置系统来打开新端口。 -
将 web 控制台设置为使用
ipatrusted 证书颁发机构的证书,而不使用自签名证书。
您不必在 playbook 中调用 firewall 或 certificate 系统角色来管理防火墙或创建证书。cockpit 系统角色根据需要自动调用它们。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
cockpit_manage_selinux: true-
允许使用
selinux系统角色配置 SELinux,以对websm_port_tSELinux 类型设置正确的端口权限。 cockpit_manage_firewall: true-
允许
cockpit系统角色使用firewalld系统角色添加端口。 cockpit_certificates: <YAML_dictionary>默认情况下,RHEL web 控制台使用自签名证书。或者,您可以将
cockpit_certificates变量添加到 playbook 中,并将角色配置为从 IdM 证书颁发机构(CA)请求证书,或使用受管节点上的提供的现有的证书和私钥。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.cockpit/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 8 章 使用 RHEL 系统角色设置自定义加密策略 复制链接链接已复制到粘贴板!
自定义加密策略是一组管理加密算法和协议的使用的规则和配置。这些策略帮助您在多个系统和应用程序中保持一个受保护的、一致的、且可管理的安全环境。
通过使用 crypto_policies RHEL 系统角色,您可以以一种自动的方式快速且一致地在多个操作系统中配置自定义加密策略。
8.1. 使用 crypto_policies RHEL 系统角色增强 FUTURE 加密策略的安全性 复制链接链接已复制到粘贴板!
您可以使用 crypto_policies RHEL 系统角色在受管节点上配置 FUTURE 策略。例如,此策略帮助实现:
- 针对新出现的威胁的未来防护:预见计算能力的进步。
- 增强了安全性:更强大的加密标准需要更长的密钥长度和更安全的算法。
- 遵守高安全性标准:例如在医疗保健、电信和财务方面,数据敏感度很高,并且强加密的可用性至关重要。
通常,FUTURE 适合处理高度敏感数据的环境,为将来的法规做准备,或采用长期的安全策略。
传统系统或软件不必支持更现代且更严格的由 FUTURE 策略强制实施的算法和协议。例如,旧的系统可能不支持 TLS 1.3 或更大的密钥大小。这可能导致兼容性问题。
另外,使用强大的算法通常会增加计算工作负载,这可能会对您的系统性能造成负面影响。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
crypto_policies_policy: FUTURE-
在受管节点上配置所需的加密策略(
FUTURE)。它可以是基本策略,也可以是带有一些子策略的基本策略。指定的基本策略和子策略必须在受管节点上可用。默认值为null。这意味着配置没有改变,crypto_policiesRHEL 系统角色将只收集 Ansible 事实。 crypto_policies_reboot_ok: true-
加密策略更改后导致系统重启,以确保所有服务和应用程序都将读取新的配置文件。默认值为
false。
有关角色变量和加密配置选项的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.crypto_policies/README.md文件以及update-crypto-policies (8)和crypto-policies (7)手册页。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在控制节点上,创建另一个 playbook,例如
verify_playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
crypto_policies_active-
导出的 Ansible 事实包含当前活动的
crypto_policies_policy变量可接受的格式的策略名称。
验证 playbook 语法:
ansible-playbook --syntax-check ~/verify_playbook.yml
$ ansible-playbook --syntax-check ~/verify_playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook ~/verify_playbook.yml TASK [debug] ************************** ok: [host] => { "crypto_policies_active": "FUTURE" }$ ansible-playbook ~/verify_playbook.yml TASK [debug] ************************** ok: [host] => { "crypto_policies_active": "FUTURE" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow crypto_policies_active变量显示受管节点上活动的策略。
第 9 章 使用 fapolicyd RHEL 系统角色限制应用程序的执行 复制链接链接已复制到粘贴板!
通过使用 fapolicyd 软件框架,您可以根据用户定义的策略限制应用程序的执行,框架会在执行前验证应用程序的完整性。这是防止运行不可靠且可能恶意的应用程序的有效方法。您可以使用 fapolicyd RHEL 系统角色自动化 fapolicyd 的安装和配置。
fapolicyd 服务只阻止以常规用户身份运行的,而不是以 root 身份运行的未授权应用程序的执行。
9.1. 使用 fapolicyd RHEL 系统角色防止用户执行不可靠的代码 复制链接链接已复制到粘贴板!
您可以使用 fapolicyd RHEL 系统角色自动化 fapolicyd 服务的安装和配置。使用此角色,您可以远程配置服务,以允许用户只执行可信的应用程序,例如 RPM 数据库和允许列表中列出的应用程序。另外,服务也可以在执行允许的应用程序之前执行完整性检查。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
fapolicyd_setup_permissive: <true|false>-
启用或禁用向内核发送策略决策以强制执行。出于调试和测试目的,将此变量设置为
false。 fapolicyd_setup_integrity: <type_type>定义完整性检查方法。您可以设置以下值之一:
-
none(默认):禁用完整性检查。 -
size:服务仅比较允许的应用程序的文件大小。 -
ima: 服务检查内核完整性测量架构(IMA)存储在文件的扩展属性中的 SHA-256 哈希。此外,服务也执行大小检查。请注意,该角色不会配置 IMA 内核子系统。要使用这个选项,您必须手动配置 IMA 子系统。 -
sha256:该服务比较允许的应用程序的 SHA-256 哈希。
-
fapolicyd_setup_trust: <trust_backends>-
定义信任后端的列表。如果您包含了
file后端,请在fapolicyd_add_trusted_file列表中指定允许的可执行文件。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.fapolicyd.README.md文件。验证 playbook 语法:
ansible-playbook ~/playbook.yml --syntax-check
$ ansible-playbook ~/playbook.yml --syntax-checkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以用户身份执行不在允许列表中的二进制应用程序:
ansible managed-node-01.example.com -m command -a 'su -c "/bin/not_authorized_application " <user_name>' bash: line 1: /bin/not_authorized_application: Operation not permitted non-zero return code
$ ansible managed-node-01.example.com -m command -a 'su -c "/bin/not_authorized_application " <user_name>' bash: line 1: /bin/not_authorized_application: Operation not permitted non-zero return codeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 10 章 使用 RHEL 系统角色配置 firewalld 复制链接链接已复制到粘贴板!
RHEL 系统角色是 Ansible 自动化工具的一组内容。此内容与 Ansible 自动化工具一起提供一个一致的配置接口,来一次远程管理多个系统。
rhel-system-roles 软件包包含 rhel-system-roles.firewall RHEL 系统角色。此角色是为了自动化 firewalld 服务的配置而引入的。
使用 firewall RHEL 系统角色,您可以配置许多不同的 firewalld 参数,例如:
- 区域
- 应允许哪些数据包的服务
- 授予、拒绝或丢弃到端口的流量访问
- 区域的端口或端口范围的转发
10.1. 使用 firewall RHEL 系统角色重置 firewalld 设置 复制链接链接已复制到粘贴板!
随着时间的推移,对防火墙配置的更新可能会积累到一定程度,从而造成意外的安全风险。使用 firewall RHEL 系统角色,您可以以一种自动的方式将 firewalld 设置重置为其默认状态。这样,您可以有效地删除任何无意的或不安全的防火墙规则,并简化其管理。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
previous: replaced删除所有现有的用户定义的设置,并将
firewalld设置重置为默认值。如果将previous:replaced参数与其他设置相结合,则firewall角色会在应用新设置前删除所有现有设置。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在控制节点上运行这个命令,来远程检查受管节点上的所有防火墙配置是否被重置为其默认值:
ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-all-zones'
# ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-all-zones'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以使用 firewall RHEL 系统角色远程配置将传入流量从一个本地端口转发到另一个本地端口。
例如,如果您有一个环境,其中多个服务在同一台机器上共存,且需要同样的默认端口,则可能会出现端口冲突。这些冲突可能会破坏服务并导致停机。使用 firewall RHEL 系统角色,您可以高效地将流量转发到替代端口,以确保您的服务可以同时运行,而无需修改其配置。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
forward_port: 8080/tcp;443- 使用 TCP 协议进入到本地端口 8080 的流量被转发到端口 443。
runtime: true启用运行时配置中的更改。默认值被设置为
true。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在控制节点上,运行以下命令来远程检查受管节点上的转发端口:
ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-forward-ports' managed-node-01.example.com | CHANGED | rc=0 >> port=8080:proto=tcp:toport=443:toaddr=
# ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-forward-ports' managed-node-01.example.com | CHANGED | rc=0 >> port=8080:proto=tcp:toport=443:toaddr=Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.3. 使用 firewall RHEL 系统角色配置 firewalld DMZ 区域 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用 firewall RHEL 系统角色在 enp1s0 接口上配置一个 dmz 区域,以允许到区域的 HTTPS 流量。这样,您可以让外部用户访问您的 web 服务器。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在控制节点上,运行以下命令来远程检查有关受管节点上
dmz区域的信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 11 章 使用 ha_cluster 系统角色配置高可用性集群 复制链接链接已复制到粘贴板!
使用 ha_cluster 系统角色,您可以配置和管理使用 Pacemaker 高可用性集群资源管理器的系统角色集群。
11.1. 为 ha_cluster RHEL 系统角色指定一个清单 复制链接链接已复制到粘贴板!
使用 ha_cluster 系统角色 playbook 配置 HA 集群时,您可以为清单中的集群配置节点的名称和地址。
对于清单中的每个节点,您可以选择指定以下项目:
-
node_name- 集群中节点的名称。 -
pcs_address-pcs用于与节点进行通信的地址。它可以是名称、FQDN 或 IP 地址,并且可以包含端口号。 -
corosync_addresses- Corosync 使用的地址列表.组成特定集群的所有节点必须具有相同数量的地址。对于所有节点,地址的顺序必须相同,以便为所有节点在同一位置指定属于特定链接的地址。
以下示例显示了一个具有目标 node1 和 node2 的清单。node1 和 node2 必须是完全限定域名,或者必须能够连接到节点,例如,名称可以通过 /etc/hosts 文件解析。
您可以选择为清单中的每个节点配置 watchdog 和 SBD 设备。所有 SBD 设备都必须可以从所有节点共享和访问。每个节点的 watchdog 设备也可以不同。有关在清单文件中配置 SBD 节点隔离的示例流程,请参阅 使用 ha_cluster 变量配置具有 SBD 节点隔离的高可用性集群。
11.2. 为高可用性集群创建 pcsd TLS 证书和密钥文件 复制链接链接已复制到粘贴板!
集群节点之间的连接是使用传输层安全(TLS)加密进行保护的。默认情况下,pcsd 守护进程生成自签名证书。但是,对于许多部署,您可能希望将默认证书替换为您公司的证书颁发机构发布的证书,并为 pcsd 应用您的公司证书策略。
您可以使用 ha_cluster RHEL 系统角色在高可用性集群中创建 TLS 证书和密钥文件。运行此 playbook 时,ha_cluster RHEL 系统角色在内部使用 certificate RHEL 系统角色来管理 TLS 证书。
ha_cluster RHEL 系统角色替换指定节点上任何现有的集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_pcsd_certificates: <certificate_properties>-
在
/var/lib/pcsd中创建自签名pcsd证书和私钥文件的变量。在本例中,pcsd证书有文件名FILENAME.crt,密钥文件名为FILENAME.key。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3. 配置不运行任何资源的高可用性集群 复制链接链接已复制到粘贴板!
您可以使用 ha_cluster 系统角色,以简单、自动的方式配置基本集群。创建基本集群后,您可以使用 pcs 命令行界面逐个资源地配置其他集群组件和行为。以下示例流程配置基本的双节点集群,但没有使用最低所需参数配置隔离。
ha_cluster 系统角色替换指定节点上任何现有的群集配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.4. 配置带有隔离和资源的高可用性集群 复制链接链接已复制到粘贴板!
集群配置的特定组件取决于您的各个需求,这因站点而异。以下示例流程显示了使用 ha_cluster RHEL 系统角色配置不同集群组件的格式。配置的群集包括隔离设备、集群资源、资源组和克隆的资源。
ha_cluster RHEL 系统角色替换指定节点上任何现有的集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_resource_primitives: <cluster_resources>- 由 ha_cluster RHEL 系统角色配置的 Pacemaker 资源的资源定义的列表,包括隔离
ha_cluster_resource_groups: <resource_groups>-
由
ha_clusterRHEL 系统角色配置的资源组定义的列表。 ha_cluster_resource_clones: <resource_clones>-
ha_clusterRHEL 系统角色配置的资源克隆定义的列表。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.5. 配置具有资源和资源操作默认值的高可用性集群 复制链接链接已复制到粘贴板!
在集群配置中,您可以更改所有资源的资源选项的 Pacemaker 默认值。您还可以更改集群中所有资源操作的默认值。
有关更改资源选项的默认值的详情,请参考链接:更改资源选项的默认值。有关全局资源操作默认值的详情,请参考 配置全局资源操作默认设置。
以下示例流程使用 ha_cluster RHEL 系统角色创建定义资源和资源操作默认值的高可用性集群。
ha_cluster RHEL 系统角色替换指定节点上任何现有的集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_resource_defaults: <resource_defaults>- 定义资源默认值集合的变量。
ha_cluster_resource_operation_defaults: <resource_operation_defaults>- 定义资源操作默认值集合的变量。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.6. 配置带有隔离级别的高可用性集群 复制链接链接已复制到粘贴板!
当您为一个节点配置多个隔离设备时,您需要为这些设备定义隔离级别,以确定 Pacemaker 将使用设备尝试隔离节点的顺序。有关隔离级别的详情,请参考 配置隔离级别。
以下流程示例使用 ha_cluster RHEL 系统角色创建定义隔离级别的高可用性集群。
ha_cluster RHEL 系统角色替换指定节点上任何现有集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password> fence1_password: <fence1_password> fence2_password: <fence2_password>
cluster_password: <cluster_password> fence1_password: <fence1_password> fence2_password: <fence2_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个 playbook 文件,如
~/playbook.yml。这个 playbook 示例文件配置一个运行firewalld和selinux服务的集群。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_resource_primitives: <cluster_resources>- 由 ha_cluster RHEL 系统角色配置的 Pacemaker 资源的资源定义的列表,包括隔离
ha_cluster_stonith_levels: <stonith_levels>- 定义 STONITH 级别的变量,也称为隔离拓扑,它将集群配置为使用多个设备来隔离节点。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.7. 使用系统角色配置带有资源约束的高可用性集群 复制链接链接已复制到粘贴板!
在配置集群时,您可以指定集群资源的行为,以符合您应用程序的要求。您可以通过配置资源约束来控制集群资源的行为。
您可以定义以下类别的资源约束:
- 位置约束,其决定资源可在哪些节点上运行。有关位置约束的详情,请参阅 确定资源可在哪些节点上运行。
- 排序约束,其决定资源运行的顺序。有关排序约束的详情,请参考 确定集群资源运行的顺序。
- 托管约束,指定一个资源的位置取决于另一个资源的位置。有关托管约束的详情,请参考 托管集群资源。
- 票据约束,其指示依赖于特定 Booth 票据的资源。有关 Booth 票据约束的详情,请参考 多站点 Pacemaker 集群。
以下流程示例使用 ha_cluster RHEL 系统角色创建高可用性集群,其中包含资源位置约束、资源托管约束、资源顺序约束和资源票据约束。
ha_cluster RHEL 系统角色替换指定节点上任何现有集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_resource_primitives: <cluster_resources>- 由 ha_cluster RHEL 系统角色配置的 Pacemaker 资源的资源定义的列表,包括隔离
ha_cluster_constraints_location: <location_constraints>- 定义资源位置约束的变量。
ha_cluster_constraints_colocation: <colocation_constraints>- 定义资源托管约束的变量。
ha_cluster_constraints_order: <order_constraints>- 定义资源顺序约束的变量。
ha_cluster_constraints_ticket: <ticket_constraints>- 定义 Booth 票据约束的变量。
验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.8. 使用 RHEL 系统角色在高可用性集群中配置 Corosync 值 复制链接链接已复制到粘贴板!
corosync.conf 文件提供了 Corosync 使用的集群参数,集群成员资格和在其上构建 Pacemaker 的消息传递层。对于您的系统配置,您可以更改 corosync.conf 文件中的一些默认参数。通常,您不应该直接编辑 corosync.conf 文件。但是,您可以使用 ha_cluster RHEL 系统角色配置 Corosync 值。
以下流程示例使用 ha_cluster RHEL 系统角色创建配置 Corosync 值的高可用性集群。
ha_cluster RHEL 系统角色替换指定节点上任何现有集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_transport: <transport_method>- 设置集群传输方法的变量。
ha_cluster_totem: <totem_options>- 配置 Corosync totem 选项的变量。
ha_cluster_quorum: <quorum_options>- 配置集群仲裁选项的变量。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.9. 导出集群配置,以创建一个 RHEL 系统角色 playbook 复制链接链接已复制到粘贴板!
您可以使用 ha_cluster RHEL 系统角色将集群的 Corosync 配置导出到 ha_cluster 变量中,该变量可以反馈给角色以重新创建相同的集群。如果您没有使用 ha_cluster 创建集群,或者无法访问集群的原始 playbook,您可以使用此功能来构建用于创建集群的新的 playbook。
当您使用 ha_cluster RHEL 系统角色导出集群的配置时,并不是所有变量都会导出。您必须手动修改配置以考虑这些变量。
导出中存在以下变量:
-
ha_cluster_cluster_present -
ha_cluster_start_on_boot -
ha_cluster_cluster_name -
ha_cluster_transport -
ha_cluster_totem -
ha_cluster_quorum -
ha_cluster_node_options- 仅存在node_name、corosync_addresses和pcs_address选项。
导出中不存在以下变量:
-
ha_cluster_hacluster_password- 这是角色的一个强制变量,但不能从现有集群中提取。 -
ha_cluster_corosync_key_src,ha_cluster_pacemaker_key_src和ha_cluster_fence_virt_key_src- 这些变量应包含带有 Corosync 和 Pacemaker 密钥的文件的路径。由于密钥本身没有导出,因此导出中也不存在这些变量。这些密钥对每个集群应该是唯一的。 -
ha_cluster_regenerate_keys- 您应该决定是否使用现有密钥或生成新密钥。
要导出当前的集群配置,请运行 ha_cluster RHEL 系统角色,并设置 ha_cluster_export_configuration: true。这会在角色完成配置集群或 qnetd 主机后触发导出,并将其存储在 ha_cluster_facts 变量中。
默认情况下,ha_cluster_cluster_present 被设为 true,ha_cluster_qnetd.present 被设为 false。这些设置将在指定的主机上重新配置集群,从指定的主机中删除 qnetd 配置,然后导出配置。要在不修改现有配置的情况下触发导出,请使用以下设置运行角色:
以下流程:
-
将集群配置从集群节点
node1导出到ha_cluster_facts变量。 -
将
ha_cluster_cluster_present和ha_cluster_qnetd变量设置为 null,以确保运行此 playbook 不会修改现有集群配置。 -
使用 Ansible debug 模块显示
ha_cluster_facts的内容。 -
将
ha_cluster_facts的内容以 YAML 格式保存到控制节点上的一个文件中,以便您围绕它编写 playbook。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您之前已使用要导出的配置配置了高可用性集群。
- 您已在控制节点上创建了一个清单文件,如 在 RHEL 10 上准备一个控制节点 中所述。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
hosts: node1- 包含要导出的集群信息的节点。
ha_cluster_cluster_present: null- 设置以指示集群配置将不会在指定主机上更改。
ha_cluster_qnetd: null- 设置以指示 qnetd 主机配置将不会在指定主机上更改。
ha_cluster_export_configuration: true-
一个决定是否导出当前集群配置并将其存储在
ha_cluster_facts变量中的变量,该变量由ha_cluster_info模块生成。 ha_cluster_facts- 一个包含导出的集群配置的变量。
delegate_to: localhost- 将控制节点指定为导出配置文件的位置。
content: "{{ ha_cluster_facts | to_nice_yaml(sort_keys=false) }"},dest: /path/to/file,mode: "0640"将 YAML 格式的配置文件复制到 /path/to/file,将文件权限设置为 0640。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。
使用您在控制节点上导出到 /path/to/file 的变量来为您的系统编写 playbook。
您必须添加
ha_cluster_hacluster_password变量,因为它是一个必要的变量,但在导出中不存在。(可选)添加ha_cluster_corosync_key_src,ha_cluster_pacemaker_key_src,ha_cluster_fence_virt_key_src, 和ha_cluster_regenerate_keys变量(如果您的系统需要它们)。这些变量永远不会被导出。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.10. 使用 ha_cluster RHEL 系统角色配置实现访问控制列表(ACL)的高可用性集群 复制链接链接已复制到粘贴板!
集群的 pcs 管理帐户是 hacluster。使用访问控制列表(ACL),您可以为除用户 hacluster 以外的特定本地用户授予权限来管理 Pacemaker 集群。此功能的常见用例是限制未经授权的用户访问业务敏感信息。
默认情况下不启用 ACL。因此,所有节点上的 haclient 组的任何成员都对集群 configuratioan 有完全的本地读写权限。不是 haclient 成员的用户没有访问权限。当启用 ACL 时,即使属于 haclient 组成员的用户也只能访问 ACL 为该用户授予的内容。root 和 hacluster 用户帐户始终对集群配置有完全访问权限,即使当启用了 ACL 时。
当您为具有 ACL 的本地用户设置权限时,您可以创建一个为该角色定义权限的角色。然后,您将该角色分配给用户。如果您为同一用户分配了多个角色,则任何拒绝权限优先,然后是写,再然后是读。
以下示例流程使用 ha_cluster RHEL 系统角色,以自动方式创建一个集群,该集群实施 ACL ,来控制对配置的访问。
ha_cluster RHEL 系统角色替换指定节点上任何现有的集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_resource_primitives: <cluster resources>-
为
ha_clusterRHEL 系统角色配置的 Pacemaker 资源的资源定义的列表,包括隔离资源。 ha_cluster_cluster_properties: <cluster properties>- Pacemaker 集群范围配置的集群属性集合的列表。
ha_cluster_acls: <dictionary>- ACL 角色、用户和组值的字典。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.11. 使用 ha_cluster_node_options 变量配置具有 SBD 节点隔离的高可用性集群 复制链接链接已复制到粘贴板!
您必须配置具有至少一个隔离设备的红帽高可用性集群,以确保当集群中的节点遇到问题时,集群提供的服务仍然可用。如果您的环境不允许远程访问电源开关来隔离集群节点,您可以使用 STONITH 块设备(SBD)配置隔离。此设备通过利用共享块存储交换消息,来为基于 Pacemaker 的集群提供节点隔离机制。SBD 与 Pacemaker 集成,一个 watchdog 设备,以及可选的共享存储,来在需要隔离时安排节点可靠地自行终止。
您可以使用 ha_cluster RHEL 系统角色,以自动的方式配置 SBD 隔离。使用 ha_cluster 时,您可以使用以下两个变量之一逐个节点地配置 watchdog 和 SBD 设备:
-
ha_cluster_node_options:这是您在 playbook 文件中定义的一个变量。它是字典的列表,其中每个字典为一个节点定义选项。 -
ha_cluster:仅为一个节点定义选项的字典。您可以在清单文件中配置ha_cluster变量。要为每个节点设置不同的值,您可以分别为每个节点定义变量。
如果 ha_cluster_node_options 和 ha_cluster 变量都包含 SBD 选项,则 ha_cluster_node_options 中的选项具有优先权。
这个示例流程使用 playbook 文件中的 ha_cluster_node_options 变量来基于每个节点配置节点地址和 SBD 选项。有关在清单文件中使用 ha_cluster 变量的示例流程,请参阅 使用 ha_cluster 变量配置带有 SBD 节点隔离的高可用性集群。
ha_cluster RHEL 系统角色替换指定节点上任何现有的集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_sbd_enabled: true- 确定集群是否可以使用 SBD 节点隔离机制的变量。
ha_cluster_sbd_options: <sbd options>-
指定 SBD 选项的名称-值字典的列表。有关这些选项的详情,请参考您系统上
sbd(8)手册页的通过环境配置部分。 ha_cluster_node_options: <node options>定义因集群节点而异的设置的变量。您可以配置以下 SBD 和 watchdog 项目:
-
sbd_watchdog_modules- 要载入的模块,其创建/dev/watchdog*设备。 -
sbd_watchdog_modules_blocklist- 要卸载和阻止的 Watchdog 内核模块。 -
sbd_watchdog- SBD 使用的 Watchdog 设备。 -
sbd_devices- 用于交换 SBD 信息和监控的设备。总是使用长而稳定的设备名称(/dev/disk/by-id/)引用设备。
-
ha_cluster_cluster_properties: <cluster properties>- Pacemaker 集群范围配置的集群属性集合的列表。
ha_cluster_resource_primitives: <cluster resources>-
为
ha_clusterRHEL 系统角色配置的 Pacemaker 资源的资源定义的列表,包括隔离资源。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.12. 使用 ha_cluster 变量配置具有 SBD 节点隔离的高可用性集群 复制链接链接已复制到粘贴板!
您必须配置具有至少一个隔离设备的红帽高可用性集群,以确保当集群中的节点遇到问题时,集群提供的服务仍然可用。如果您的环境不允许远程访问电源开关来隔离集群节点,您可以使用 STONITH 块设备(SBD)配置隔离。此设备通过利用共享块存储交换消息,来为基于 Pacemaker 的集群提供节点隔离机制。SBD 与 Pacemaker 集成,一个 watchdog 设备,以及可选的共享存储,来在需要隔离时安排节点可靠地自行终止。
您可以使用 ha_cluster RHEL 系统角色,以自动的方式配置 SBD 隔离。使用 ha_cluster 时,您可以使用以下两个变量之一逐个节点地配置 watchdog 和 SBD 设备:
-
ha_cluster_node_options:这是您在 playbook 文件中定义的一个变量。它是字典的列表,其中每个字典为一个节点定义选项。 -
ha_cluster:仅为一个节点定义选项的字典。您可以在清单文件中配置ha_cluster变量。要为每个节点设置不同的值,您可以分别为每个节点定义变量。
如果 ha_cluster_node_options 和 ha_cluster 变量都包含 SBD 选项,则 ha_cluster_node_options 中的选项具有优先权。
如果 ha_cluster_node_options 和 ha_cluster 变量都包含 SBD 选项,则 ha_cluster_node_options 中的选项具有优先权。
以下示例流程使用 ha_cluster 系统角色创建具有 SBD 隔离的高可用性集群。这个示例流程使用清单文件中的 ha_cluster 变量来基于每个节点配置节点地址和 SBD 选项。有关在 playbook 文件中使用 ha_cluster_node_options 变量的示例流程,请参阅 使用 ha_cluster_nodes_options 变量配置带有 SBD 节点隔离的高可用性集群。
ha_cluster 系统角色替换指定节点上任何现有的群集配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
为集群创建一个清单文件,该集群使用
ha_cluster变量为每个节点配置 watchdog 和 SBD 设备,如下例中所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例清单中指定的 SBD 和 watchdog 设置包括:
sbd_watchdog_modules-
要载入的 watchdog 内核模块,其创建
/dev/watchdog*设备。 sbd_watchdog_modules_blocklist- 要卸载和阻止的 watchdog 内核模块。
sbd_watchdog- SBD 使用的 watchdog 设备。
sbd_devices-
用于交换 SBD 消息和监控的设备。总是使用长而稳定的设备名称(
/dev/disk/by-id/)引用设备。
有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个 playbook 文件,例如
~/playbook.yml,如下例所示。因为您已在清单中指定了 SBD 和 watchog 变量,因此您不需要在 playbook 中包含它们。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: cluster_name- 您要创建的集群的名称。
ha_cluster_hacluster_password: password-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_sbd_enabled: true- 确定集群是否可以使用 SBD 节点隔离机制的变量。
ha_cluster_sbd_options: sbd options-
指定 SBD 选项的名称-值字典的列表。有关这些选项的详情,请参考您系统上
sbd(8)手册页的通过环境配置部分。 ha_cluster_cluster_properties: cluster properties- Pacemaker 集群范围配置的集群属性集合的列表。
ha_cluster_resource_primitives: cluster resources-
为
ha_clusterRHEL 系统角色配置的 Pacemaker 资源的资源定义的列表,包括隔离资源。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.13. 使用 RHEL ha_cluster RHEL 系统角色为高可用性集群配置放置策略 复制链接链接已复制到粘贴板!
Pacemaker 集群根据资源分配分数分配资源。默认情况下,如果所有节点上的资源分配分数都相同,则 Pacemaker 会将资源分配给具有最少分配资源的节点。如果集群中的资源使用的节点容量(如内存或 I/O)的比例差异很大,则默认行为可能不是平衡系统工作负载的最佳策略。在这种情况下,您可以通过为节点和资源配置使用属性和放置策略来自定义分配策略。
有关配置使用属性和放置策略的详细信息,请参阅 配置节点放置策略。
这个示例流程使用 ha_cluster RHEL 系统角色,以自动的方式创建高可用性集群,其配置使用属性来定义放置策略。
ha_cluster RHEL 系统角色替换指定节点上任何现有的集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_cluster_properties: <cluster properties>-
Pacemaker 集群范围配置的集群属性集列表。要使利用率生效,必须设置
placement-strategy属性,并且其值必须与值default不同。 - ha_cluster_node_options: <node options>
- 定义因集群节点而异的不同设置的变量。
ha_cluster_resource_primitives: <cluster resources>为
ha_clusterRHEL 系统角色配置的 Pacemaker 资源的资源定义的列表,包括隔离资源。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.14. 使用 ha_cluster RHEL 系统角色为高可用性集群配置警报 复制链接链接已复制到粘贴板!
当 Pacemaker 事件发生时,如资源或节点故障或配置更改,您可能想要执行一些外部操作。例如,您可能想要发送一封电子邮件消息或记录到文件或更新监控系统。
您可以使用警报代理配置系统,来执行外部操作。这些是集群调用的外部程序,其方式与集群调用资源代理的方式相同,以处理资源配置和操作。集群通过环境变量将关于事件的信息传递给代理。
ha_cluster RHEL 系统角色配置集群,以调用外部程序来处理警报。但是,您必须提供这些程序,并将它们分发到集群节点。
有关报警代理的详情,请参阅 集群事件的触发脚本。
这个示例流程使用 ha_cluster RHEL 系统角色,以自动配置 Pacemaker 警报的方式创建高可用性集群。
ha_cluster RHEL 系统角色替换指定节点上任何现有的集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_alerts: <alert definitions>定义 Pacemaker 警报的变量。
-
id- 警报的 ID。 -
path- 警报代理可执行文件的路径。 -
description- 警报的描述信息。 -
instance_attrs- 警报实例属性集合的列表。目前,只支持一个集合,因此第一个集合被使用,其余集合被忽略。 -
meta_attrs- 警报元属性集合的列表。目前,只支持一个集合,因此第一个集合被使用,其余集合被忽略。 -
recipients- 警报接收者的列表。 -
value- 接收者的值。 -
id- 接收者的 ID。 -
description- 接收者的描述。 -
instance_attrs- 接收者实例属性集合的列表。目前,只支持一个集合,因此第一个集合被使用,其余集合被忽略。 -
meta_attrs- 接收者元属性集合的列表。目前,只支持一个集合,因此第一个集合被使用,其余集合被忽略。
-
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.15. 使用 RHEL 系统角色配置带有仲裁设备的高可用性集群 复制链接链接已复制到粘贴板!
当您配置单独的仲裁设备时,集群可以保持比标准仲裁规则允许的更多的节点故障。仲裁设备充当集群的轻量级仲裁设备。对于偶数节点的集群,建议使用仲裁设备。对于双节点集群,使用仲裁设备可以更好地决定在脑裂情况下保留哪些节点。
有关仲裁设备的详情,请参考 配置仲裁设备。
要使用 ha_cluster RHEL 系统角色配置带有单独仲裁设备的高可用性集群,请首先请设置仲裁设备。设置仲裁设备后,您可以在任意数量的集群中使用该设备。
11.15.1. 配置仲裁设备 复制链接链接已复制到粘贴板!
要使用 ha_cluster RHEL 系统角色配置仲裁设备,请按照此流程示例中的步骤操作。请注意,您不能在集群节点上运行仲裁设备。
ha_cluster RHEL 系统角色替换指定节点上任何现有集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您要用来运行仲裁设备的系统有涵盖 RHEL 和 RHEL High Availability 附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook-qdevice.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_present: false-
如果设为
false,则变量决定所有集群配置将从目标主机中删除。 ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_qnetd: <quorum_device_options>配置
qnetd主机的变量。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。
验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook-qdevice.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook-qdevice.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook-qdevice.yml
$ ansible-playbook --ask-vault-pass ~/playbook-qdevice.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.15.2. 配置一个集群以使用仲裁设备 复制链接链接已复制到粘贴板!
要将集群配置为使用仲裁设备,请按照此流程示例中的步骤操作。
ha_cluster RHEL 系统角色替换指定节点上任何现有集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook-cluster-qdevice.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_quorum: <quorum_parameters>配置集群仲裁的变量,您可以用来指定集群使用仲裁设备。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。
验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook-cluster-qdevice.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook-cluster-qdevice.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook-cluster-qdevice.yml
$ ansible-playbook --ask-vault-pass ~/playbook-cluster-qdevice.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.16. 使用 RHEL 系统角色配置带有节点属性的高可用性集群 复制链接链接已复制到粘贴板!
您可以使用 Pacemaker 规则使您的配置更加动态。例如,您可以使用 node 属性,根据时间将机器分配给不同的处理组,然后在创建位置约束时使用该属性。
节点属性表达式用于根据节点或节点定义的属性控制资源。有关节点属性的详情,请参考 使用规则确定资源位置。
以下流程示例使用 ha_cluster RHEL 系统角色创建配置节点属性的高可用性集群。
ha_cluster RHEL 系统角色替换指定节点上任何现有集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_node_options: <node_settings>- 定义因集群节点而异的各种设置的变量。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.17. 使用 ha_cluster RHEL 系统角色在高可用性集群中配置 Apache HTTP 服务器 复制链接链接已复制到粘贴板!
高可用性型机器通过消除单点失效以及在一个节点停止运作时将服务从一个群集节点切换到另外一个节点来提供高可用性服务。红帽提供了各种用于规划、配置和维护红帽高可用性集群的文档。有关向 Red Hat 集群文档不同区域提供索引的文章的列表,请参阅红帽知识库文章 Red Hat High Availability Add-On 文档指南。
以下用例示例使用 ha_cluster RHEL 系统角色在双节点 Red Hat Enterprise Linux High Availability Add-On 集群中配置主动/被动 Apache HTTP 服务器。在这种情况下,客户端通过浮动 IP 地址访问 Apache HTTP 服务器。Web 服务器在集群的两个节点之一中运行。如果运行 web 服务器的节点出现问题,则 web 服务器会在集群的第二个节点上再次启动,以实现服务中断的最小化。
这个示例使用主机名为 zapc.example.com 的 APC 电源开关。如果集群不使用任何其他隔离代理,则您可以选择在定义 ha_cluster_fence_agent_packages 变量时只列出集群所需的隔离代理。
ha_cluster RHEL 系统角色替换指定节点上任何现有集群配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅 在 RHEL 10 上准备一个控制节点。
- 您已配置了具有 XFS 文件系统的 LVM 逻辑卷,如在 在 Pacemaker 集群中配置具有 XFS 文件系统的 LVM 卷 中所述。
- 您已配置了 Apache HTTP 服务器,如 配置 Apache HTTP 服务器 中所述。
- 您的系统包含一个用于隔离群集节点的 APC 电源开关。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:cluster_password: <cluster_password>
cluster_password: <cluster_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ha_cluster_cluster_name: <cluster_name>- 您要创建的集群的名称。
ha_cluster_hacluster_password: <password>-
hacluster用户的密码。hacluster用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true-
确定
ha_clusterRHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true-
确定
ha_clusterRHEL 系统角色是否使用selinuxRHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_fence_agent_packages: <fence_agent_packages>- 要安装的隔离代理软件包的列表。
ha_cluster_resource_primitives: <cluster_resources>- 由 ha_cluster RHEL 系统角色配置的 Pacemaker 资源的资源定义的列表,包括隔离
ha_cluster_resource_groups: <resource_groups>-
ha_clusterRHEL 系统角色配置的资源组定义的列表。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当您使用
apache资源代理来管理 Apache 时,它不会使用systemd。因此,您必须编辑 Apache 提供的logrotate脚本,使其不使用systemctl重新加载 Apache。在集群中的每个节点上删除
/etc/logrotate.d/httpd文件中的以下行:/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
# /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下三行替换您删除的行,将
/var/run/httpd-website.pid指定为 PID 文件路径,其中 website 是 Apache 资源的名称。在本例中,Apache 资源名称是Website。/usr/bin/test -f /var/run/httpd-Website.pid >/dev/null 2>/dev/null && /usr/bin/ps -q $(/usr/bin/cat /var/run/httpd-Website.pid) >/dev/null 2>/dev/null && /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /var/run/httpd-Website.pid" -k graceful > /dev/null 2>/dev/null || true
/usr/bin/test -f /var/run/httpd-Website.pid >/dev/null 2>/dev/null && /usr/bin/ps -q $(/usr/bin/cat /var/run/httpd-Website.pid) >/dev/null 2>/dev/null && /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /var/run/httpd-Website.pid" -k graceful > /dev/null 2>/dev/null || trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
从集群中的一个节点检查集群的状态。请注意,所有四个资源都运行在同一个节点上,
z1.example.com。如果发现配置的资源没有运行,则您可以运行
pcs resource debug-start resource命令来测试资源配置。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 集群启动并运行后,您可以将浏览器指向定义为
IPaddr2资源的 IP 地址,来查看示例显示,包含简单的单词"Hello"。Hello
HelloCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要测试运行在
z1.example.com上的资源组是否可以切换到节点z2.example.com,请将节点z1.example.com置于待机模式,之后该节点将不能再托管资源。pcs node standby z1.example.com
[root@z1 ~]# pcs node standby z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将节点
z1置于待机模式后,从集群中的某个节点检查集群状态。请注意,资源现在都应运行在z2上。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义的 IP 地址的网页仍会显示,而不中断。
要从
待机模式中删除z1,请输入以下命令。pcs node unstandby z1.example.com
[root@z1 ~]# pcs node unstandby z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意从
待机模式中删除节点本身不会导致资源切换到该节点。这将依赖于资源的resource-stickiness值。有关resource-stickiness元属性的详情,请参考 配置资源以首选其当前节点。
第 12 章 使用 RHEL 系统角色配置 systemd 日志 复制链接链接已复制到粘贴板!
使用 journald RHEL 系统角色,您可以自动化 systemd 日志,并使用 Red Hat Ansible Automation Platform 配置持久性日志记录。
12.1. 使用 journald RHEL 系统角色配置持久性日志记录 复制链接链接已复制到粘贴板!
默认情况下,systemd 日志只将日志存储在 /run/log/journal 中的小环缓冲区中,它不是持久的。重启系统也会移除日志数据库日志。您可以使用 journald RHEL 系统角色在多个系统上一致地配置持久性日志记录。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
journald_persistent: true- 启用持久性日志记录。
journald_max_disk_size: <size>-
指定日志文件的最大磁盘空间大小(以 MB 为单位),例如
2048。 journald_per_user: true-
配置
journald来为每个用户单独保留日志数据。 journald_sync_interval: <interval>设置同步间隔(以分钟为单位),例如
1。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.journald/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 13 章 使用 RHEL 系统角色配置自动崩溃转储 复制链接链接已复制到粘贴板!
要使用 Ansible 管理 kdump,您可以使用 kdump 角色,这是 RHEL 10 中提供的 RHEL 系统角色之一。使用 kdump 角色可让您指定保存系统内存内容的位置,以便稍后进行分析。
13.1. 使用 kdump RHEL 系统角色配置内核崩溃转储机制 复制链接链接已复制到粘贴板!
内核崩溃转储是诊断和故障排除系统问题的一个重要特性。当您的系统遇到内核 panic 或其他关键故障时,崩溃内核转储允许您在失败时捕获内核状态的内存转储(核转储)。
通过使用 Ansible playbook,您可以使用 kdump RHEL 系统角色在多个系统上设置内核崩溃转储参数。这确保 kdump 服务在所有受管节点上一致的设置。
kdump 系统角色替换了 /etc/kdump.conf 和 /etc/sysconfig/kdump 配置文件中的内容。之前的设置变为角色变量中指定的变量,如果它们没有在角色变量中指定,则会丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
kdump_target: <type_and_location>-
将
vmcore写到 root 文件系统以外的地方。当type是 raw 或文件系统时,location指向一个分区(按名称、标签或 UUID)。 kernel_settings_reboot_ok: <true|false>-
默认值为
false。如果设置为true,则系统角色将确定是否需要重启受管主机,以使请求的更改生效,并重启。如果设置为false,则角色将返回值为true的变量kernel_settings_reboot_required,表示需要重启。在这种情况下,用户必须手动重启受管节点。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.kdump/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证内核崩溃转储参数:
ansible managed-node-01.example.com -m command -a 'grep crashkernel /proc/cmdline'
$ ansible managed-node-01.example.com -m command -a 'grep crashkernel /proc/cmdline'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 14 章 使用 RHEL 系统角色永久配置内核参数 复制链接链接已复制到粘贴板!
您可以使用 kernel_settings RHEL 系统角色一次在多个客户端上配置内核参数。这个解决方案:
- 提供带有有效输入设置的友好接口。
- 保留所有预期的内核参数。
从控制计算机运行 kernel_settings 角色后,内核参数将立即应用于受管系统,并在重新启动后保留。
请注意,通过 RHEL 渠道交付的 RHEL 系统角色作为默认 AppStream 存储库中的 RPM 软件包提供给 RHEL 客户。RHEL 系统角色也可以作为一个集合提供给具有通过 Automation Hub 的 Ansible 订阅的客户。
14.1. 使用 kernel_settings RHEL 系统角色应用所选的内核参数 复制链接链接已复制到粘贴板!
您可以使用 kernel_settings RHEL 系统角色在多个受管操作系统间远程配置各种内核参数,并具有持久性效果。例如,您可以配置:
- 透明巨页,以通过减少管理较小页的开销来提高性能。
- 通过具有回环接口的网络传输的最大数据包大小。
- 对文件的限制,可以同时打开。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
kernel_settings_sysfs: <list_of_sysctl_settings>-
sysctl设置的 YAML 列表以及您要分配给这些设置的值。 kernel_settings_transparent_hugepages: <value>-
控制内存子系统透明巨页(THP)设置。您可以禁用 THP 支持(
never)、在系统范围(always)或在MAD_HUGEPAGE区域内(madvise)启用它。 kernel_settings_reboot_ok: <true|false>默认值为
false。如果设置为true,则系统角色将确定是否需要重启受管主机,以使请求的更改生效,并重启。如果设置为false,则角色将返回值为true的变量kernel_settings_reboot_required,表示需要重启。在这种情况下,用户必须手动重启受管节点。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.kdump/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证受影响的内核参数:
ansible managed-node-01.example.com -m command -a 'sysctl fs.file-max kernel.threads-max net.ipv6.conf.lo.mtu' ansible managed-node-01.example.com -m command -a 'cat /sys/kernel/mm/transparent_hugepage/enabled'
# ansible managed-node-01.example.com -m command -a 'sysctl fs.file-max kernel.threads-max net.ipv6.conf.lo.mtu' # ansible managed-node-01.example.com -m command -a 'cat /sys/kernel/mm/transparent_hugepage/enabled'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 15 章 使用 RHEL 系统角色配置日志记录 复制链接链接已复制到粘贴板!
您可以使用 logging RHEL 系统角色以自动的方式将本地和远程主机配置为记录服务器,来从多个客户端系统收集日志。
日志记录解决方案提供多种读取日志和多个日志记录输出的方法。
例如,日志记录系统可接受以下输入:
- 本地文件
-
systemd/journal - 网络上的另一个日志记录系统
另外,日志记录系统还可有以下输出:
-
日志存储在
/var/log/目录中的本地文件中 - 日志发送到 Elasticsearch 引擎
- 日志被转发到另一个日志系统
使用 logging RHEL 系统角色,您可以组合输入和输出,以适合您的场景。例如,您可以配置一个日志解决方案,将来自 日志 的输入存储在本地文件中,而从文件读取的输入则被转发到另一个日志系统,并存储在本地日志文件中。
15.1. 使用 logging RHEL 系统角色过滤本地日志消息 复制链接链接已复制到粘贴板!
您可以使用 logging RHEL 系统角色的基于属性的过滤器,根据各种情况过滤本地日志消息。因此,您可以实现,例如:
- 日志清晰度:在高流量环境中,日志可能会快速增长。专注于特定消息(如错误)有助于更快地识别问题。
- 优化的系统性能:大量日志通常与系统性能下降有关。仅针对重要事件选择记录日志可以防止资源耗尽,从而使您的系统更有效地运行。
- 增强了安全性:通过安全消息,如系统错误和失败的登录进行高效过滤,有助于仅捕获相关日志。这对于检测漏洞和满足合规性标准非常重要。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
logging_inputs-
定义一个记录输入字典的列表。
type: basics选项涵盖了来自systemd日志或 Unix 套接字的输入。 logging_outputs-
定义一个记录输出字典的列表。
type: files选项支持将日志存储在本地文件中,通常存储在/var/log/目录中。property: msg;property: contains和property_value: error选项指定所有包含error字符串的日志都存储在/var/log/errors.log文件中。property: msg;property: !contains; 和property_value: error选项指定所有其他日志都放在/var/log/others.log文件中。您可以将error值替换为您要过滤的字符串。 logging_flows-
定义一个记录流字典的列表,以指定
logging_inputs和logging_outputs之间的关系。inputs: [files_input]选项指定一个从其开始处理日志的输入的列表。outputs: [files_output0, files_output1]选项指定一个日志发送到的输出的列表。
有关 playbook 中使用的所有变量的详情,以及
rsyslog的更多信息,请参阅控制节点上的/usr/share/ansible/roles/rhel-system-roles.logging/README.md文件和rsyslog.conf (5)及syslog (3)手册页。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在受管节点上,测试
/etc/rsyslog.conf文件的语法:rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run... rsyslogd: End of config validation run. Bye.
# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run... rsyslogd: End of config validation run. Bye.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在受管节点上,验证系统是否向日志发送包含
error字符串的消息:发送测试信息:
logger error
# logger errorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看
/var/log/errors.log日志,例如:cat /var/log/errors.log Aug 5 13:48:31 hostname root[6778]: error
# cat /var/log/errors.log Aug 5 13:48:31 hostname root[6778]: errorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
hostname是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为root。
15.2. 使用 logging RHEL 系统角色应用远程日志解决方案 复制链接链接已复制到粘贴板!
您可以使用 logging RHEL 系统角色配置远程日志记录解决方案,其中一个或多个客户端可以从 systemd-journal 服务获取日志,并将其转发到远程服务器。服务器从 remote_rsyslog 和 remote_files 配置接收远程输入,并将日志输出到以远程主机名命名的目录中的本地文件中。
因此,您可以涵盖您需要的用例,例如:
- 集中式日志管理:从单一存储点收集、访问和管理多台机器的日志消息简化了日常监控和故障排除任务。此外,此用例还减少了登录到单个机器来检查日志消息的需要。
- 增强了安全性:在一个中央位置存储日志消息可增加它们处于安全且防止篡改的环境中的几率。这样的环境可以更轻松地检测和更有效地响应安全事件,并满足审计要求。
- 提高了日志分析的效率:协调来自多个系统的日志消息对于快速故障排除跨多个机器或服务的复杂问题非常重要。这样,您可以快速分析并交叉引用来自不同源的事件。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 在服务器或客户端系统的 SELinux 策略中定义端口,并为这些端口打开防火墙。默认 SELinux 策略包括端口 601、514、6514、10514 和 20514。要使用其他端口,请参阅 修改客户端和服务器系统上的 SELinux 策略。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 的第一个 play 中指定的设置包括以下:
logging_inputs-
定义一个记录输入字典的列表。
type: remote选项涵盖通过网络来自其他日志记录系统的远程输入。udp_ports: [ 601 ]选项定义要监控的 UDP 端口号的列表。tcp_ports: [ 601 ]选项定义要监控的 TCP 端口号的列表。如果udp_ports和tcp_ports都设置了,则udp_ports被使用,tcp_ports被丢弃。 logging_outputs-
定义一个记录输出字典的列表。
type: remote_files选项使输出将日志存储到每个远程主机的本地文件和程序名称产生的日志中。 logging_flows-
定义一个记录流字典的列表,以指定
logging_inputs和logging_outputs之间的关系。inputs: [remote_udp_input, remote_tcp_input]选项指定输入的列表,日志的处理从该列表开始。outputs: [remote_files_output]选项指定输出的列表,日志被发送到此输出中。
示例 playbook 的第二个 play 中指定的设置包括以下:
logging_inputs-
定义一个记录输入字典的列表。
type: basics选项涵盖了来自systemd日志或 Unix 套接字的输入。 logging_outputs-
定义一个记录输出字典的列表。
type: forwards选项支持通过网络将日志发送到远程日志服务器。severity: info选项是指具有信息重要性的日志消息。facility: mail选项是指正在生成日志消息的系统程序的类型。target: <host1.example.com>选项指定远程日志记录服务器的主机名。udp_port: 601/tcp_port: 601选项定义远程日志记录服务器侦听的 UDP/TCP 端口。 logging_flows-
定义一个记录流字典的列表,以指定
logging_inputs和logging_outputs之间的关系。inputs: [basic_input]选项指定输入的列表,日志的处理从该列表开始。outputs: [forward_output0, forward_output1]选项指定输出的列表,日志被发送到此输出中。
有关角色变量的详情和有关
rsyslog的更多信息,请参阅控制节点上的/usr/share/ansible/roles/rhel-system-roles.logging/README.md文件以及rsyslog.conf (5)和syslog (3)手册页。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在客户端和服务器系统上测试
/etc/rsyslog.conf文件的语法:rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.
# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证客户端系统向服务器发送信息:
在客户端系统中发送测试信息:
logger test
# logger testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器系统上,查看
/var/log/<host2.example.com>/messages日志,例如:cat /var/log/<host2.example.com>/messages Aug 5 13:48:31 <host2.example.com> root[6778]: test
# cat /var/log/<host2.example.com>/messages Aug 5 13:48:31 <host2.example.com> root[6778]: testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<host2.example.com>是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为root。
15.3. 使用带有 TLS 的 logging RHEL 系统角色 复制链接链接已复制到粘贴板!
传输层安全性(TLS)是一种加密协议,旨在允许通过计算机网络的安全通信。
您可以使用 logging RHEL 系统角色配置日志消息的安全传输,其中一个或多个客户端可以从 systemd-journal 服务获取日志,并使用 TLS 将它们传送到远程服务器。
当通过不太可信的或公共网络(如互联网)发送敏感数据时,通常使用远程日志记录解决方案中的 TLS 来传输日志。另外,通过在 TLS 中使用证书,您可以确保客户端将日志转发到正确的可信服务器。这可以防止诸如"中间人"的攻击。
15.3.1. 配置带有 TLS 的客户端日志 复制链接链接已复制到粘贴板!
您可以使用 logging RHEL 系统角色在 RHEL 客户端上配置日志,并使用 TLS 加密将日志传送到远程日志系统。
此流程创建一个私钥和证书。接下来,它对 Ansible 清单中的 clients 组中的所有主机配置 TLS。TLS 对信息的传输进行加密,确保日志在网络安全传输。
您不必在 playbook 中调用 certificate RHEL 系统角色来创建证书。当设置了 logging_certificates 变量时,logging RHEL 系统角色会自动调用它。
要让 CA 能够为创建的证书签名,受管节点必须在 IdM 域中注册。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 受管节点已在 IdM 域中注册。
- 如果要在管理节点上配置的日志服务器运行 RHEL 9.2 或更高版本,且启用了 FIPS 模式,客户端必须支持扩展 Master Secret (EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 强制执行 TLS 扩展"Extended Master Secret" 。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
logging_certificates-
此参数的值被传递给
certificateRHEL 系统角色中的certificate_requests,用于创建私钥和证书。 logging_pki_files使用这个参数,您可以配置日志记录用来查找用于 TLS 的 CA、证书和密钥文件的路径和其他设置,使用以下一个或多个子参数指定:
ca_cert、ca_cert_src、cert、cert_src、private_key、private_key_src和tls。注意如果您使用
logging_certificates在受管节点上创建文件,请不要使用ca_cert_src,cert_src和private_key_src,它们用于复制不是由logging_certificates创建的文件。ca_cert-
表示受管节点上 CA 证书文件的路径。默认路径为
/etc/pki/tls/certs/ca.pem,文件名由用户设置。 cert-
表示受管节点上证书文件的路径。默认路径为
/etc/pki/tls/certs/server-cert.pem,文件名由用户设置。 private_key-
表示受管节点上私钥文件的路径。默认路径为
/etc/pki/tls/private/server-key.pem,文件名由用户设置。 ca_cert_src-
代表控制节点上 CA 证书文件的路径,该路径将复制到目标主机上
ca_cert指定的位置。如果使用logging_certificates,请不要使用它。 cert_src-
表示控制节点上证书文件的路径,其将被复制到目标主机上
cert指定的位置。如果使用logging_certificates,请不要使用它。 private_key_src-
表示控制节点上私钥文件的路径,其将被复制到目标主机上
private_key指定的位置。如果使用logging_certificates,请不要使用它。 tls-
将此参数设置为
true可确保通过网络安全地传输日志。如果您不想要安全封装器,您可以设置tls: false。
有关角色变量的详情和有关
rsyslog的更多信息,请参阅控制节点上的/usr/share/ansible/roles/rhel-system-roles.logging/README.md文件以及rsyslog.conf (5)和syslog (3)手册页。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.3.2. 配置带有 TLS 的服务器日志 复制链接链接已复制到粘贴板!
您可以使用 logging RHEL 系统角色在 RHEL 服务器上配置日志,并将它们设置为使用 TLS 加密从远程日志系统接收日志。
此流程创建一个私钥和证书。接下来,它对 Ansible 清单中 server 组中的所有主机配置 TLS。
您不必在 playbook 中调用 certificate RHEL 系统角色来创建证书。logging RHEL 系统角色自动调用它。
要让 CA 能够为创建的证书签名,受管节点必须在 IdM 域中注册。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 受管节点已在 IdM 域中注册。
- 如果要在管理节点上配置的日志服务器运行 RHEL 9.2 或更高版本,且启用了 FIPS 模式,客户端必须支持 Extended Master Secret (EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 强制执行 TLS 扩展"Extended Master Secret" 。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
logging_certificates-
此参数的值被传递给
certificateRHEL 系统角色中的certificate_requests,用于创建私钥和证书。 logging_pki_files使用这个参数,您可以配置日志记录用来查找用于 TLS 的 CA、证书和密钥文件的路径和其他设置,使用以下一个或多个子参数指定:
ca_cert、ca_cert_src、cert、cert_src、private_key、private_key_src和tls。注意如果您使用
logging_certificates在受管节点上创建文件,请不要使用ca_cert_src,cert_src和private_key_src,它们用于复制不是由logging_certificates创建的文件。ca_cert-
表示受管节点上 CA 证书文件的路径。默认路径为
/etc/pki/tls/certs/ca.pem,文件名由用户设置。 cert-
表示受管节点上证书文件的路径。默认路径为
/etc/pki/tls/certs/server-cert.pem,文件名由用户设置。 private_key-
表示受管节点上私钥文件的路径。默认路径为
/etc/pki/tls/private/server-key.pem,文件名由用户设置。 ca_cert_src-
代表控制节点上 CA 证书文件的路径,该路径将复制到目标主机上
ca_cert指定的位置。如果使用logging_certificates,请不要使用它。 cert_src-
表示控制节点上证书文件的路径,其将被复制到目标主机上
cert指定的位置。如果使用logging_certificates,请不要使用它。 private_key_src-
表示控制节点上私钥文件的路径,其将被复制到目标主机上
private_key指定的位置。如果使用logging_certificates,请不要使用它。 tls-
将此参数设置为
true可确保通过网络安全地传输日志。如果您不想要安全封装器,您可以设置tls: false。
有关角色变量的详情和有关
rsyslog的更多信息,请参阅控制节点上的/usr/share/ansible/roles/rhel-system-roles.logging/README.md文件以及rsyslog.conf (5)和syslog (3)手册页。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.4. 使用带有 RELP 的 logging RHEL 系统角色 复制链接链接已复制到粘贴板!
可靠的事件日志协议(RELP)是一种通过 TCP 网络记录数据和消息的网络协议。它确保了事件消息的可靠传递,您可以在不容许任何消息丢失的环境中使用它。
RELP 发送者以命令的形式传输日志条目,接收器会在处理后确认它们。为确保一致性,RELP 将事务数保存到传输的命令中,以便进行任何类型的消息恢复。
您可以考虑在 RELP 客户端和 RELP Server 间的远程日志系统。RELP 客户端将日志传送给远程日志系统,RELP 服务器接收由远程日志系统发送的所有日志。要实现这种用例,您可以使用 logging RHEL 系统角色将日志记录系统配置为可靠地发送和接收日志条目。
15.4.1. 使用 RELP 配置客户端日志 复制链接链接已复制到粘贴板!
您可以使用 logging RHEL 系统角色配置将保存在本地的日志消息传输到带有 RELP 的远程日志系统。
此流程对 Ansible 清单中 客户端 组中的所有主机配置 RELP。RELP 配置使用传输层安全(TLS)来加密消息传输,保证日志在网络上安全传输。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
target- 这是一个必需的参数,用于指定运行远程日志系统的主机名。
port- 远程日志记录系统正在监听的端口号。
tls确保日志在网络上安全地传输。如果您不想要安全打包程序,可以将
tls变量设置为false。在与 RELP 工作时,默认的tls参数被设置为 true,且需要密钥/证书和 triplets {ca_cert、cert、private_key} 和/或 {ca_cert_src,cert_src,private_key_src}。-
如果设置了 {
ca_cert_src,cert_src,private_key_src} 三元组,则默认位置/etc/pki/tls/certs和/etc/pki/tls/private被用作受管节点上的目的地,以便从控制节点传输文件。在这种情况下,文件名与 triplet 中的原始名称相同 -
如果设置了 {
ca_cert,cert,private_key} 三元组,则文件在日志配置前应位于默认路径上。 - 如果两个三元组都设置了,则文件将从控制节点的本地路径传输到受管节点的特定路径。
-
如果设置了 {
ca_cert-
表示 CA 证书的路径。默认路径为
/etc/pki/tls/certs/ca.pem,文件名由用户设置。 cert-
表示证书的路径。默认路径为
/etc/pki/tls/certs/server-cert.pem,文件名由用户设置。 private_key-
表示私钥的路径。默认路径为
/etc/pki/tls/private/server-key.pem,文件名由用户设置。 ca_cert_src-
代表被复制到受管节点的本地 CA 证书文件路径。如果指定了
ca_cert,则其被复制到该位置。 cert_src-
代表被复制到受管节点的本地证书文件路径。如果指定了
cert,则会将其复制到该位置。 private_key_src-
代表被复制到受管节点的本地密钥文件路径。如果指定了
private_key,则会将其复制到该位置。 pki_authmode-
接受身份验证模式为
name或fingerprint。 permitted_servers- 日志客户端允许通过 TLS 连接和发送日志的服务器列表。
输入- 日志输入字典列表。
输出- 日志输出字典列表。
有关角色变量的详情和有关
rsyslog的更多信息,请参阅控制节点上的/usr/share/ansible/roles/rhel-system-roles.logging/README.md文件以及rsyslog.conf (5)和syslog (3)手册页。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.4.2. 配置带有 RELP 的服务器日志 复制链接链接已复制到粘贴板!
您可以使用 logging RHEL 系统角色配置服务器,来从带有 RELP 的远程日志记录系统接收日志信息。
此流程对 Ansible 清单中 服务器 组中的所有主机配置 RELP。RELP 配置使用 TLS 加密消息传输,以保证在网络上安全地传输日志。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
port- 远程日志记录系统正在监听的端口号。
tls确保日志在网络上安全地传输。如果您不想要安全打包程序,可以将
tls变量设置为false。在与 RELP 工作时,默认的tls参数被设置为 true,且需要密钥/证书和 triplets {ca_cert、cert、private_key} 和/或 {ca_cert_src,cert_src,private_key_src}。-
如果设置了 {
ca_cert_src,cert_src,private_key_src} 三元组,则默认位置/etc/pki/tls/certs和/etc/pki/tls/private被用作受管节点上的目的地,以便从控制节点传输文件。在这种情况下,文件名与 triplet 中的原始名称相同 -
如果设置了 {
ca_cert,cert,private_key} 三元组,则文件在日志配置前应位于默认路径上。 - 如果两个三元组都设置了,则文件将从控制节点的本地路径传输到受管节点的特定路径。
-
如果设置了 {
ca_cert-
表示 CA 证书的路径。默认路径为
/etc/pki/tls/certs/ca.pem,文件名由用户设置。 cert-
表示证书的路径。默认路径为
/etc/pki/tls/certs/server-cert.pem,文件名由用户设置。 private_key-
表示私钥的路径。默认路径为
/etc/pki/tls/private/server-key.pem,文件名由用户设置。 ca_cert_src-
代表被复制到受管节点的本地 CA 证书文件路径。如果指定了
ca_cert,则其被复制到该位置。 cert_src-
代表被复制到受管节点的本地证书文件路径。如果指定了
cert,则会将其复制到该位置。 private_key_src-
代表被复制到受管节点的本地密钥文件路径。如果指定了
private_key,则会将其复制到该位置。 pki_authmode-
接受身份验证模式为
name或fingerprint。 permitted_clients- 日志记录服务器允许通过 TLS 连接和发送日志的客户端列表。
输入- 日志输入字典列表。
输出- 日志输出字典列表。
有关角色变量的详情和有关
rsyslog的更多信息,请参阅控制节点上的/usr/share/ansible/roles/rhel-system-roles.logging/README.md文件以及rsyslog.conf (5)和syslog (3)手册页。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 16 章 使用 RHEL 系统角色,使用 PCP 配置性能监控 复制链接链接已复制到粘贴板!
Performance Co-Pilot (PCP)是一个系统性能分析工具包。您可以使用它来记录和分析 Red Hat Enterprise Linux 系统上许多组件的性能数据。
您可以使用 metrics RHEL 系统角色自动化 PCP 的安装和配置,角色可以配置 Grafana 来视觉化 PCP 指标。
16.1. 使用 metrics RHEL 系统角色配置 Performance Co-Pilot 复制链接链接已复制到粘贴板!
您可以使用 Performance Co-Pilot (PCP)监控许多指标,如 CPU 使用率和内存使用率。例如,这有助于识别资源和性能瓶颈。通过使用 metrics RHEL 系统角色,您可以在多个主机上远程配置 PCP 来记录指标。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
metrics_retention_days: <number>-
设置多少天后
pmlogger_dailysystemd 计时器删除旧的 PCP 归档。 metrics_manage_firewall: <true|false>-
定义角色是否应该在
firewalld服务中打开所需的端口。如果要远程访问受管节点上的 PCP,请将此变量设置为true。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.metrics/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查询一个指标,例如:
ansible managed-node-01.example.com -m command -a 'pminfo -f kernel.all.load'
# ansible managed-node-01.example.com -m command -a 'pminfo -f kernel.all.load'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
下一步
16.2. 使用 metrics RHEL 系统角色配置带有身份验证的 Performance Co-Pilot 复制链接链接已复制到粘贴板!
您可以在 Performance Co-Pilot (PCP)中启用身份验证,以便 pmcd 服务和性能指标域代理(PDMA)可以决定是否允许运行监控工具的用户执行操作。已验证的用户可以访问带有敏感信息的指标。另外,某些代理需要身份验证。例如,bpftrace 代理使用身份验证识别是否允许用户将 bpftrace 脚本加载到内核来生成指标。
通过使用 metrics RHEL 系统角色,您可以在多个主机上远程配置带有身份验证的 PCP 。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:metrics_usr: <username> metrics_pwd: <password>
metrics_usr: <username> metrics_pwd: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
metrics_retention_days: <number>-
设置多少天后
pmlogger_dailysystemd 计时器删除旧的 PCP 归档。 metrics_manage_firewall: <true|false>-
定义角色是否应该在
firewalld服务中打开所需的端口。如果要远程访问受管节点上的 PCP,请将此变量设置为true。 metrics_username: <username>-
角色在受管节点本地创建此用户,将凭证添加到
/etc/pcp/passwd.dbSimple Authentication and Security Layer (SASL)数据库中,并在 PCP 中配置身份验证。另外,如果您在 playbook 中设置了metrics_from_bpftrace: true,则 PCP 会使用此帐户注册bpftrace脚本。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.metrics/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在安装了
pcp软件包的主机上,查询一个需要身份验证的指标:使用您在 playbook 中使用的凭证查询指标:
pminfo -fmdt -h pcp://managed-node-01.example.com?username=<user> proc.fd.count Password: <password> proc.fd.count inst [844 or "000844 /var/lib/pcp/pmdas/proc/pmdaproc"] value 5# pminfo -fmdt -h pcp://managed-node-01.example.com?username=<user> proc.fd.count Password: <password> proc.fd.count inst [844 or "000844 /var/lib/pcp/pmdas/proc/pmdaproc"] value 5Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果命令成功,它会返回
proc.fd.count指标的值。再次运行命令,但省略用户名,以验证命令是否对未经身份验证的用户失败:
pminfo -fmdt -h pcp://managed-node-01.example.com proc.fd.count proc.fd.count Error: No permission to perform requested operation
# pminfo -fmdt -h pcp://managed-node-01.example.com proc.fd.count proc.fd.count Error: No permission to perform requested operationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
下一步
如果您已在多个主机上配置了 Performance Co-Pilot (PCP),您可以使用一个 Grafana 的实例来视觉化这些主机的指标。您可以显示实时数据,如果 PCP 数据存储在 Redis 数据库中,也可以显示过去的数据。
通过使用 metrics RHEL 系统角色,您可以自动化设置 Grafana、PCP 插件、可选 Redis 数据库以及数据源的配置的过程。
如果您使用 metrics 角色在主机上安装 Grafana,则角色还会在此主机上自动安装 PCP。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - PCP 被配置为用于对您要监控的主机的远程访问。
- 在其上要安装 Grafana 的主机可以访问您计划监控的 PCP 节点上的端口 44321。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:grafana_admin_pwd: <password>
grafana_admin_pwd: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
metrics_graph_service: true-
安装 Grafana 和 PCP 插件。另外,角色在 Grafana 中添加了
PCP Vector、PCP Redis和PCP bpftrace数据源。 metrics_query_service: <true|false>- 定义角色是否应该安装和配置 Redis ,以进行集中式指标记录。如果启用了,从 PCP 客户端收集的数据存储在 Redis 中,因此您还可以显示历史数据,而不仅仅是实时数据。
metrics_monitored_hosts: <list_of_hosts>- 定义要监控的主机的列表。在 Grafana 中,您可以显示这些主机的数据,以及运行 Grafana 的主机。
metrics_manage_firewall: <true|false>-
定义角色是否应该在
firewalld服务中打开所需的端口。如果将此变量设置为true,您可以例如远程访问 Grafana。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.metrics/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
-
在浏览器中打开
http://<grafana_server_IP_or_hostname>:3000,并以admin用户身份,使用您在流程中设置的密码登录。 显示监控数据:
要显示实时数据:
- 点 → → →
-
默认情况下,图形显示运行 Grafana 的主机的指标。要切换到其他主机,请在
hostspec字段中输入主机名,然后按 Enter 键。
-
要显示存储在 Redis 数据库中的历史数据:创建一个带有 PCP Valkey 数据源的面板。这要求您在 playbook 中设置
metrics_query_service: true。
Performance Co-Pilot (PCP)套件包含性能指标推理引擎(PMIE)服务。此服务实时评估性能规则。例如,您可以使用默认规则来检测大量的交换活动。
您可以将主机配置为一个从多个 PCP 节点收集监控数据的中央 PCP 管理站点。如果规则匹配,此中央主机向 Web 钩子发送通知,以通知其他服务。例如,web 钩子可以触发事件驱动的 Ansible ,来在 Ansible Automation Platform 模板上运行或在引起事件的主机上的 playbook 上运行。
通过使用 metrics RHEL 系统角色,您可以自动化一个通知 web 钩子的中央 PCP 管理主机的配置。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - PCP 被配置为用于对您要监控的主机的远程访问。
- 您要配置 PMIE 的主机可以访问您要监控的 PCP 节点上的端口 44321。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
metrics_retention_days: <number>-
设置多少天后
pmlogger_dailysystemd 计时器删除旧的 PCP 归档。 metrics_manage_firewall: <true|false>-
定义角色是否应该在
firewalld服务中打开所需的端口。如果要远程访问受管节点上的 PCP,请将此变量设置为true。 metrics_monitored_hosts: <list_of_hosts>- 指定要观察的主机。
metrics_webhook_endpoint: <URL>- 设置性能指标推理引擎(PMIE)向其发送有关检测到的性能问题的 web 钩子端点。默认情况下,这些问题只记录到本地系统。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.metrics/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
managed-node-node-01.example.com上的配置概述:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最后三行确认 PMIE 被配置为监控三个系统。
第 17 章 使用 RHEL 系统角色配置 NBDE 复制链接链接已复制到粘贴板!
您可以使用 nbde_client 和 nbde_server RHEL 系统角色,使用 Clevis 和 Tang 自动部署基于策略的解密(PBD)解决方案。rhel-system-roles 包中包含了这些系统角色、相关的例子以及参考文档。
17.1. 使用 nbde_server RHEL 系统角色设置多个 Tang 服务器 复制链接链接已复制到粘贴板!
通过使用 nbde_server 系统角色,您可以部署和管理 Tang 服务器,来作为自动磁盘加密解决方案的一部分。此角色支持以下功能:
- 轮转 Tang 密钥
- 部署和备份 Tang 密钥
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此示例 playbook 确保部署 Tang 服务器和密钥轮转。
示例 playbook 中指定的设置包括如下:
nbde_server_manage_firewall: true-
使用
firewall系统角色管理nbde_server角色使用的端口。 nbde_server_manage_selinux: true使用
selinux系统角色管理nbde_server角色使用的端口。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.nbde_server/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在您的 NBDE 客户端上,使用以下命令验证您的 Tang 服务器是否正常工作。命令必须返回与您为加密和解密传递的相同的消息:
ansible managed-node-01.example.com -m command -a 'echo test | clevis encrypt tang '{"url":"<tang.server.example.com>"}' -y | clevis decrypt' test# ansible managed-node-01.example.com -m command -a 'echo test | clevis encrypt tang '{"url":"<tang.server.example.com>"}' -y | clevis decrypt' testCopy to Clipboard Copied! Toggle word wrap Toggle overflow
17.2. 使用 nbde_client RHEL 系统角色设置带有 DHCP 的 Clevis 客户端 复制链接链接已复制到粘贴板!
nbde_client 系统角色使您能够以自动化的方式部署多个Clevis客户端。
此角色支持将 LUKS 加密卷绑定到一个或多个网络绑定的(NBDE)服务器 - Tang 服务器。您可以使用密码短语保留现有的卷加密,或者将其删除。删除密码短语后,您只能使用 NBDE 解锁卷。当卷最初是使用在置备系统后会删除的临时密钥或密码进行加密时,这非常有用,
如果您同时提供密语和密钥文件,角色将使用您首先提供的那一个。如果找不到任何有效密语或密码,它将尝试从现有的绑定中检索密码短语。
基于策略的解密(PBD)将绑定定义为设备到插槽的映射。这意味着对同一个设备你可以有多个绑定。默认插槽是插槽 1。
nbde_client 系统角色只支持 Tang 绑定。因此,您无法将其用于 TPM2 绑定。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 已使用 LUKS 加密的卷。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个示例 playbook 配置 Clevis 客户端,以便在两个 Tang 服务器中至少有一个可用时自动解锁两个 LUKS 加密的卷。
示例 playbook 中指定的设置包括如下:
state: present-
state的值表示运行 playbook 后的配置。使用present值来创建新绑定或更新现有绑定。与clevis luks bind命令不同,您可以使用state: present来覆盖其设备插槽中的现有绑定。absent的值会删除指定的绑定。 nbde_client_early_boot: truenbde_client角色确保 Tang pin 的网络默认在早期引导过程中可用。如果您需要禁用此功能,请在 playbook 中添加nbde_client_early_boot: false变量。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.nbde_client/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在 NBDE 客户端上,检查应被您的 Tang 服务器自动解锁的加密卷是否在其 LUKS pin 中包含相应的信息:
ansible managed-node-01.example.com -m command -a 'clevis luks list -d /dev/rhel/root' 1: tang '{"url":"<http://server1.example.com/>"}' 2: tang '{"url":"<http://server2.example.com/>"}'# ansible managed-node-01.example.com -m command -a 'clevis luks list -d /dev/rhel/root' 1: tang '{"url":"<http://server1.example.com/>"}' 2: tang '{"url":"<http://server2.example.com/>"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果不使用
nbde_client_early_boot: false变量,请验证绑定是否可用于早期引导,例如:ansible managed-node-01.example.com -m command -a 'lsinitrd | grep clevis-luks' lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …
# ansible managed-node-01.example.com -m command -a 'lsinitrd | grep clevis-luks' lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.3. 使用 nbde_client RHEL 系统角色设置静态 IP Clevis 客户端 复制链接链接已复制到粘贴板!
nbde_client RHEL 系统角色只支持具有动态主机配置协议(DHCP)的场景。在具有静态 IP 配置的 NBDE 客户端上,您必须将网络配置作为内核引导参数传递。
通常,管理员希望重复使用 playbook,且不会为 Ansible 在早期引导过程中为其分配静态 IP 地址的每个主机维护单独的 playbook。在这种情况下,您可以在 playbook 中使用变量,并在外部文件中提供设置。因此,您只需要一个 playbook 和一个带有设置的文件。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 已使用 LUKS 加密的卷。
流程
创建一个带有主机的网络设置的文件,如
static-ip-settings-clients.yml,并添加您要动态分配给主机的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 playbook 为
~/static-ip-settings-clients.yml文件中列出的每个主机动态读取某些值。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 18 章 使用 RHEL 系统角色配置网络设置 复制链接链接已复制到粘贴板!
管理员可以使用 network RHEL 系统角色自动化网络相关的配置和管理任务。
18.1. 使用 network RHEL 系统角色和接口名称,配置具有静态 IP 地址的以太网连接 复制链接链接已复制到粘贴板!
要将 Red Hat Enterprise Linux 主机连接到以太网网络,请为网络设备创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您可以使用 network RHEL 系统角色配置具有静态 IP 地址、网关和 DNS 的以太网连接,并将它们分配给指定的接口名称。
通常,管理员希望重复使用 playbook,且不会为 Ansible 应该为其分配静态 IP 地址的每个主机维护单独的 playbook。在本例中,您可以在 playbook 中使用变量,并在清单中维护设置。因此,您只需要一个 playbook 来动态地将单个设置分配给多个主机。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 物理或者虚拟以太网设备在服务器配置中存在。
- 受管节点使用 NetworkManager 配置网络。
流程
编辑
~/inventory文件,并将特定于主机的设置附加到主机条目中:managed-node-01.example.com interface=enp1s0 ip_v4=192.0.2.1/24 ip_v6=2001:db8:1::1/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe managed-node-02.example.com interface=enp1s0 ip_v4=192.0.2.2/24 ip_v6=2001:db8:1::2/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe
managed-node-01.example.com interface=enp1s0 ip_v4=192.0.2.1/24 ip_v6=2001:db8:1::1/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe managed-node-02.example.com interface=enp1s0 ip_v4=192.0.2.2/24 ip_v6=2001:db8:1::2/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 playbook 从清单文件中动态读取每个主机的某些值,并在 playbook 中对所有主机相同的设置使用静态值。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查询受管节点的 Ansible 事实,并验证活跃的网络设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.2. 使用 network RHEL 系统角色和设备路径,配置具有静态 IP 地址的以太网连接 复制链接链接已复制到粘贴板!
要将 Red Hat Enterprise Linux 主机连接到以太网网络,请为网络设备创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您可以使用 network RHEL 系统角色配置带有静态 IP 地址、网关和 DNS 设置的以太网连接,并根据其路径而不是其名称将它们分配给设备。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 服务器配置中有一个物理或者虚拟以太网设备。
- 受管节点使用 NetworkManager 配置网络。
-
您知道设备的路径。您可以使用
udevadm info /sys/class/net/<device_name> | grep ID_PATH=命令显示设备路径。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
match-
定义一个应用设置所必须满足的条件。您只能将此变量与
path选项一起使用。 path-
定义设备的持久路径。您可以将它设置为固定路径或表达式。其值可以包含修饰符和通配符。这个示例将设置应用到与 PCI ID
0000:00:0[1-3].0而不是0000:00:02.0匹配的设备。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查询受管节点的 Ansible 事实,并验证活跃的网络设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.3. 使用 network RHEL 系统角色和接口名称,配置具有动态 IP 地址的以太网连接 复制链接链接已复制到粘贴板!
要将 Red Hat Enterprise Linux 主机连接到以太网网络,请为网络设备创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您可以使用 network RHEL 系统角色配置以太网连接,该连接从 DHCP 服务器检索其 IP 地址、网关和 DNS 设置,以及 IPv6 无状态地址自动配置(SLAAC)。使用此角色,您可以将连接配置文件分配给指定的接口名称。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 服务器配置中有一个物理或者虚拟以太网设备。
- 网络中有 DHCP 服务器和 SLAAC。
- 受管节点使用 NetworkManager 服务来配置网络。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
dhcp4: yes- 启用来自 DHCP、PPP 或类似服务的自动 IPv4 地址分配。
auto6: yes-
启用 IPv6 自动配置。默认情况下,NetworkManager 使用路由器公告。如果路由器宣布
managed标记,则 NetworkManager 会从 DHCPv6 服务器请求 IPv6 地址和前缀。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查询受管节点的 Ansible 事实,并验证接口是否收到 IP 地址和 DNS 设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.4. 使用 network RHEL 系统角色和设备路径,配置具有动态 IP 地址的以太网连接 复制链接链接已复制到粘贴板!
要将 Red Hat Enterprise Linux 主机连接到以太网网络,请为网络设备创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您可以使用 network RHEL 系统角色配置以太网连接,该连接从 DHCP 服务器检索其 IP 地址、网关和 DNS 设置,以及 IPv6 无状态地址自动配置(SLAAC)。角色可以根据其路径而不是接口名称将连接配置文件分配给设备。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 服务器配置中有一个物理或者虚拟以太网设备。
- 网络中有 DHCP 服务器和 SLAAC。
- 受管主机使用 NetworkManager 配置网络。
-
您知道设备的路径。您可以使用
udevadm info /sys/class/net/<device_name> | grep ID_PATH=命令显示设备路径。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
match: path-
定义一个应用设置所必须满足的条件。您只能将此变量与
path选项一起使用。 path: <path_and_expressions>-
定义设备的持久路径。您可以将它设置为固定路径或表达式。其值可以包含修饰符和通配符。这个示例将设置应用到与 PCI ID
0000:00:0[1-3].0而不是0000:00:02.0匹配的设备。 dhcp4: yes- 启用来自 DHCP、PPP 或类似服务的自动 IPv4 地址分配。
auto6: yes-
启用 IPv6 自动配置。默认情况下,NetworkManager 使用路由器公告。如果路由器宣布
managed标记,则 NetworkManager 会从 DHCPv6 服务器请求 IPv6 地址和前缀。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查询受管节点的 Ansible 事实,并验证接口是否收到 IP 地址和 DNS 设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.5. 使用 network RHEL 系统角色,配置具有 802.1X 网络身份验证的静态以太网连接 复制链接链接已复制到粘贴板!
网络访问控制(NAC)保护网络免受未授权客户端访问。您可以在 NetworkManager 连接配置文件中指定身份验证所需的详情,以使客户端可以访问网络。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您可以使用 Ansible playbook 将私钥、证书和 CA 证书复制到客户端,然后使用 network RHEL 系统角色配置具有 802.1X 网络身份验证的连接配置文件。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 网络支持 802.1X 网络身份验证。
- 受管节点使用 NetworkManager。
以下 TLS 身份验证所需的文件在控制节点上存在:
-
客户端密钥存储在
/srv/data/client.key文件中。 -
客户端证书存储在
/srv/data/client.crt文件中。 -
证书颁发机构(CA)证书存储在
/srv/data/ca.crt文件中。
-
客户端密钥存储在
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:pwd: <password>
pwd: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ieee802_1x- 此变量包含与 802.1X 相关的设置。
eap: tls-
将配置文件配置为对可扩展身份验证协议(EAP)使用基于证书的
TLS身份验证方法。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 访问需要网络身份验证的网络上的资源。
18.6. 使用 network RHEL 系统角色配置带有 802.1X 网络身份验证的 wifi 连接 复制链接链接已复制到粘贴板!
网络访问控制(NAC)保护网络不受未授权客户端的访问。您可以在 NetworkManager 连接配置文件中指定身份验证所需的详情,以使客户端可以访问网络。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您可以使用 Ansible playbook 将私钥、证书和 CA 证书复制到客户端,然后使用 network RHEL 系统角色配置具有 802.1X 网络身份验证的连接配置文件。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 网络支持 802.1X 网络身份验证。
-
您已在受管节点上安装了
wpa_supplicant软件包。 - DHCP 位于受管节点的网络中。
control 节点上存在 TLS 身份验证所需的以下文件:
-
客户端密钥存储在
/srv/data/client.key文件中。 -
客户端证书存储在
/srv/data/client.crt文件中。 -
CA 证书存储在
/srv/data/ca.crt文件中。
-
客户端密钥存储在
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:pwd: <password>
pwd: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ieee802_1x- 此变量包含与 802.1X 相关的设置。
eap: tls-
将配置文件配置为对可扩展身份验证协议(EAP)使用基于证书的
TLS身份验证方法。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.7. 使用 network RHEL 系统角色配置网络绑定 复制链接链接已复制到粘贴板!
您可以将网络接口组合在一个绑定中,以提供具有高吞吐量或冗余的逻辑接口。要配置绑定,请创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您可以使用 network RHEL 系统角色配置网络绑定,如果用于绑定的父设备的连接配置文件不存在,角色也可以创建它。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
type: <profile_type>- 设置要创建的配置文件的类型。示例 playbook 创建三个连接配置文件:一个用于绑定,两个用于以太网设备。
dhcp4: yes- 启用来自 DHCP、PPP 或类似服务的自动 IPv4 地址分配。
auto6: yes-
启用 IPv6 自动配置。默认情况下,NetworkManager 使用路由器公告。如果路由器宣布
managed标记,则 NetworkManager 会从 DHCPv6 服务器请求 IPv6 地址和前缀。 mode: <bond_mode>设置绑定模式。可能的值有:
-
balance-rr(默认) -
active-backup -
balance-xor -
broadcast -
802.3ad -
balance-tlb -
balance-alb
根据您设置的模式,您需要在 playbook 中设置额外的变量。
-
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
从其中一个网络设备临时拔掉网线,并检查绑定中的其他设备是否在处理流量。
请注意,无法使用软件工具正确测试链路失败事件。停用连接的工具(如
nmcli),只显示绑定驱动程序可以处理端口配置的更改,而不是实际的链接失败事件。
18.8. 使用 network RHEL 系统角色配置 VLAN 标记 复制链接链接已复制到粘贴板!
如果您的网络使用 Virtual Local Area Networks (VLAN)将网络流量分隔到逻辑网络中,请创建一个 NetworkManager 连接配置文件来配置 VLAN 标记。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您可以使用 network RHEL 系统角色配置 VLAN 标记,如果 VLAN 的父设备的连接配置文件不存在,则角色也可以创建它。
如果 VLAN 设备需要一个 IP 地址、默认网关和 DNS 设置,请在 VLAN 设备上,而不是在父设备上配置它们。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括:
type: <profile_type>- 设置要创建的配置文件的类型。示例 playbook 创建两个连接配置文件:一个用于父以太网设备,另一个用于 VLAN 设备。
dhcp4: <value>-
如果设置为
yes,则启用从 DHCP、PPP 或类似服务的自动 IPv4 地址分配。禁用父设备上的 IP 地址配置。 auto6: <value>-
如果设置为
yes,则启用 IPv6 自动配置。在这种情况下,NetworkManager 默认使用路由器公告,如果路由器宣布managed标志,则 NetworkManager 会从 DHCPv6 服务器请求 IPv6 地址和前缀。禁用父设备上的 IP 地址配置。 parent: <parent_device>- 设置 VLAN 连接配置文件的父设备。在示例中,父设备是以太网接口。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 VLAN 设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.9. 使用 network RHEL 系统角色配置网桥 复制链接链接已复制到粘贴板!
您可以通过创建网桥,在 Open Systems Interconnection (OSI)模型的第 2 层上连接多个网络。要配置网桥,请在 NetworkManager 中创建一个连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您可以使用 network RHEL 系统角色配置网桥,如果网桥的父设备的连接配置文件不存在,则角色也可以创建它。
如果要为网桥分配 IP 地址、网关和 DNS 设置,请在网桥上,而不是在其端口上配置它们。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
type: <profile_type>- 设置要创建的配置文件的类型。示例 playbook 创建三个连接配置文件:一个用于网桥,两个用于以太网设备。
dhcp4: yes- 启用来自 DHCP、PPP 或类似服务的自动 IPv4 地址分配。
auto6: yes-
启用 IPv6 自动配置。默认情况下,NetworkManager 使用路由器公告。如果路由器宣布
managed标记,则 NetworkManager 会从 DHCPv6 服务器请求 IPv6 地址和前缀。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示作为特定网桥端口的以太网设备的链接状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示作为任意网桥设备的端口的以太网设备状态:
ansible managed-node-01.example.com -m command -a 'bridge link show' managed-node-01.example.com | CHANGED | rc=0 >> 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state listening priority 32 cost 100
# ansible managed-node-01.example.com -m command -a 'bridge link show' managed-node-01.example.com | CHANGED | rc=0 >> 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state listening priority 32 cost 100Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.10. 使用 network RHEL 系统角色在现有连接上设置默认网关 复制链接链接已复制到粘贴板!
如果数据包的目的地无法通过直接连接的网络或主机上配置的任何路由到达,则主机会将网络数据包转发到其默认网关。要配置主机的默认网关,请在作为默认网关连接到与相同网络的 接口的 NetworkManager 连接配置文件中设置它。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
在大多数情况下,管理员在创建连接时设置默认网关。但是,您也可以在之前创建的连接上设置或更新默认网关设置。
您不能使用 network RHEL 系统角色只更新现有连接配置文件中的特定值。角色确保连接配置文件与 playbook 中的设置完全匹配。如果具有相同名称的连接配置文件存在,则角色将应用 playbook 中的设置,并将配置文件中的所有其他设置重置为其默认值。要防止重置值,请始终在 playbook 中指定网络连接配置文件的整个配置,包括您不想更改的设置。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查询受管节点的 Ansible 事实,并验证活跃的网络设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.11. 使用 network RHEL 系统角色配置静态路由 复制链接链接已复制到粘贴板!
您可以使用 network RHEL 系统角色配置静态路由。
当您运行一个使用 network RHEL 系统角色的 play 时,如果设置值与 play 中指定的值不匹配,则角色会使用相同的名称覆盖现有的连接配置文件。要防止将这些值重置为其默认值,请始终在 play 中指定网络连接配置文件的整个配置,即使配置(如 IP 配置)已存在。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据它是否已存在,流程使用以下设置创建或更新
enp7s0连接配置文件:-
静态 IPv4 地址 -
192.0.2.1和/24子网掩码 -
静态 IPv6 地址 -
2001:db8:1::1和/64子网掩码 -
IPv4 默认网关 -
192.0.2.254 -
IPv6 默认网关 -
2001:db8:1::fffe -
IPv4 DNS 服务器 -
192.0.2.200 -
IPv6 DNS 服务器 -
2001:db8:1::ffbb -
DNS 搜索域 -
example.com 静态路由:
-
198.51.100.0/24,网关为192.0.2.10 -
2001:db8:2::/64,网关为2001:db8:1::10
-
-
静态 IPv4 地址 -
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在受管节点上:
显示 IPv4 路由:
ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp7s0
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp7s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 IPv6 路由:
ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp7s0 metric 1024 pref medium
# ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp7s0 metric 1024 pref mediumCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.12. 使用 network RHEL 系统角色,将来自特定子网的流量路由到不同的默认网关 复制链接链接已复制到粘贴板!
您可以使用基于策略的路由为来自特定子网的流量配置不同的默认网关。例如,您可以将 RHEL 配置为默认路由,使用默认路由将所有流量路由到互联网提供商 A 。但是,从内部工作站子网接收的流量路由到供应商 B。
要在多个节点上远程配置基于策略的路由,您可以使用 network RHEL 系统角色。
此流程假设以下网络拓扑:
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 -
受管节点使用 NetworkManager 和
firewalld服务。 您要配置的受管节点有 4 个网络接口:
-
enp7s0接口已连接到提供商 A 的网络。提供商网络中的网关 IP 为198.51.100.2,网络使用/30网络掩码。 -
enp1s0接口已连接到提供商 B 的网络。提供商网络中的网关 IP 为192.0.2.2,网络使用/30网络掩码。 -
enp8s0接口已与连有内部工作站的10.0.0.0/24子网相连。 -
enp9s0接口已与连有公司服务器的203.0.113.0/24子网相连。
-
-
内部工作站子网中的主机使用
10.0.0.1作为默认网关。在此流程中,您可以将这个 IP 地址分配给路由器的enp8s0网络接口。 -
服务器子网中的主机使用
203.0.113.1作为默认网关。在此流程中,您可以将这个 IP 地址分配给路由器的enp9s0网络接口。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在内部工作站子网的 RHEL 主机上:
安装
traceroute软件包:dnf install traceroute
# dnf install tracerouteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
traceroute工具显示到互联网上主机的路由:traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 _gateway (10.0.0.1) 0.337 ms 0.260 ms 0.223 ms 2 192.0.2.1 (192.0.2.1) 0.884 ms 1.066 ms 1.248 ms ...
# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 _gateway (10.0.0.1) 0.337 ms 0.260 ms 0.223 ms 2 192.0.2.1 (192.0.2.1) 0.884 ms 1.066 ms 1.248 ms ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令的输出显示路由器通过
192.0.2.1,即提供商 B 的网络来发送数据包。
在服务器子网的 RHEL 主机上:
安装
traceroute软件包:dnf install traceroute
# dnf install tracerouteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
traceroute工具显示到互联网上主机的路由:traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 _gateway (203.0.113.1) 2.179 ms 2.073 ms 1.944 ms 2 198.51.100.2 (198.51.100.2) 1.868 ms 1.798 ms 1.549 ms ...
# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 _gateway (203.0.113.1) 2.179 ms 2.073 ms 1.944 ms 2 198.51.100.2 (198.51.100.2) 1.868 ms 1.798 ms 1.549 ms ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令的输出显示路由器通过
198.51.100.2,即供应商 A 的网络来发送数据包。
在使用 RHEL 系统角色配置的 RHEL 路由器上:
显示规则列表:
ip rule list 0: from all lookup local 5: from 10.0.0.0/24 lookup 5000 32766: from all lookup main 32767: from all lookup default
# ip rule list 0: from all lookup local 5: from 10.0.0.0/24 lookup 5000 32766: from all lookup main 32767: from all lookup defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,RHEL 包含表
local、main和default的规则。显示表
5000中的路由:ip route list table 5000 default via 192.0.2.2 dev enp1s0 proto static metric 100 10.0.0.0/24 dev enp8s0 proto static scope link src 192.0.2.1 metric 102
# ip route list table 5000 default via 192.0.2.2 dev enp1s0 proto static metric 100 10.0.0.0/24 dev enp8s0 proto static scope link src 192.0.2.1 metric 102Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示接口和防火墙区:
firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
external区是否启用了伪装:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.13. 使用 network RHEL 系统角色配置 ethtool 卸载功能 复制链接链接已复制到粘贴板!
网络接口控制器可以使用 TCP 卸载引擎(TOE)将某些操作卸载到网络接口控制器。这提高了网络吞吐量。您可以在网络接口的连接配置文件中配置卸载功能。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您不能使用 network RHEL 系统角色只更新现有连接配置文件中的特定值。角色确保连接配置文件与 playbook 中的设置完全匹配。如果具有相同名称的连接配置文件存在,则角色将应用 playbook 中的设置,并将配置文件中的所有其他设置重置为其默认值。要防止重置值,请始终在 playbook 中指定网络连接配置文件的整个配置,包括您不想更改的设置。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
gro: no- 禁用通用接收卸载(GRO)。
gso: yes- 启用通用分段卸载(GSO)。
tx_sctp_segmentation: no- 禁用 TX 流控制传输协议(SCTP)分段。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查询受管节点的 Ansible 事实,并验证卸载设置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.14. 使用 network RHEL 系统角色配置 ethtool 合并设置 复制链接链接已复制到粘贴板!
通过使用中断合并,系统收集网络数据包,并为多个数据包生成一个中断。这会增加使用一个硬件中断发送到内核的数据量,从而减少中断负载,并最大化吞吐量。您可以在网络接口的连接配置文件中配置合并设置。通过使用 Ansible 和 network RHEL 角色,您可以自动化此过程,并对 playbook 中定义的主机远程配置连接配置文件。
您不能使用 network RHEL 系统角色只更新现有连接配置文件中的特定值。角色确保连接配置文件与 playbook 中的设置完全匹配。如果具有相同名称的连接配置文件存在,则角色将应用 playbook 中的设置,并将配置文件中的所有其他设置重置为其默认值。要防止重置值,请始终在 playbook 中指定网络连接配置文件的整个配置,包括您不想更改的设置。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
rx_frames: <value>- 设置 RX 帧的数量。
gso: <value>- 设置 TX 帧的数量。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示网络设备的当前卸载功能:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.15. 使用 network RHEL 系统角色增加环缓冲区大小,以降低数据包丢弃率 复制链接链接已复制到粘贴板!
如果数据包丢包率导致应用程序报告数据丢失、超时或其他问题,请增加以太网设备的环缓冲区的大小。
环缓冲区是循环缓冲区,溢出会覆盖现有数据。网卡分配一个传输(TX)和接收(RX)环缓冲区。接收环缓冲区在设备驱动程序和网络接口控制器(NIC)之间共享。数据可以通过硬件中断或软件中断(也称为 SoftIRQ)从 NIC 移到内核。
内核使用 RX 环缓冲区存储传入的数据包,直到设备驱动程序可以处理它们。设备驱动程序排空 RX 环,通常是使用 SoftIRQ,其将传入的数据包放在名为 sk_buff 或 skb 的内核数据结构中,以通过内核开始其过程,直到拥有相关套接字的应用程序。
内核使用 TX 环缓冲区来存放应发送到网络的传出数据包。这些环缓冲区位于堆栈的底部,是可能发生数据包丢弃的关键点,这反过来会对网络性能造成负面影响。
您可以在 NetworkManager 连接配置文件中配置环缓冲设置。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
您不能使用 network RHEL 系统角色只更新现有连接配置文件中的特定值。角色确保连接配置文件与 playbook 中的设置完全匹配。如果具有相同名称的连接配置文件存在,则角色将应用 playbook 中的设置,并将配置文件中的所有其他设置重置为其默认值。要防止重置值,请始终在 playbook 中指定网络连接配置文件的整个配置,包括您不想更改的设置。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您知道设备支持的最大环缓冲区大小。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
rx: <value>- 设置接收的环缓冲区条目的最大数。
tx: <value>- 设置传输的环缓冲区条目的最大数。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示最大环缓冲大小:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.16. 使用 network RHEL 系统角色配置 IPoIB 连接 复制链接链接已复制到粘贴板!
您可以使用 IP over InfiniBand (IPoIB),通过 InfiniBand 接口发送 IP 数据包。要配置 IPoIB,请创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network 系统角色,您可以自动化此过程,并对 playbook 中定义的主机远程配置连接配置文件。
您可以使用 network RHEL 系统角色配置 IPoIB,如果 InfiniBand 的父设备的连接配置文件不存在,角色也可以创建它。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 -
名为
mlx5_ib0的 InfiniBand 设备已安装在受管节点上。 - 受管节点使用 NetworkManager 配置网络。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
type: <profile_type>- 设置要创建的配置文件的类型。示例 playbook 创建两个连接配置文件:一个用于 InfiniBand 连接,一个用于 IPoIB 设备。
parent: <parent_device>- 设置 IPoIB 连接配置文件的父设备。
p_key: <value>-
设置 InfiniBand 分区密钥。如果您设置了此变量,请不要在 IPoIB 设备上设置
interface_name。 transport_mode: <mode>-
设置 IPoIB 连接操作模式。您可以将此变量设置为
datagram(默认)或connected。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.network/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示
mlx5_ib0.8002设备的 IP 设置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示
mlx5_ib0.8002设备的分区密钥(P_Key):ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/pkey' managed-node-01.example.com | CHANGED | rc=0 >> 0x8002
# ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/pkey' managed-node-01.example.com | CHANGED | rc=0 >> 0x8002Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示
mlx5_ib0.8002设备的模式:ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/mode' managed-node-01.example.com | CHANGED | rc=0 >> datagram
# ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/mode' managed-node-01.example.com | CHANGED | rc=0 >> datagramCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.17. network RHEL 系统角色的网络状态 复制链接链接已复制到粘贴板!
network RHEL 系统角色支持 playbook 中的状态配置来配置设备。为此,请使用 network_state 变量,后面跟上状态配置。
在 playbook 中使用 network_state 变量的好处:
- 通过与状态配置结合使用声明方法,您可以配置接口,NetworkManager 会在后台为这些接口创建一个配置集。
-
使用
network_state变量,您可以指定您需要更改的选项,所有其他选项将保持不变。但是,使用network_connections变量,您必须指定所有设置来更改网络连接配置集。
您只能在 network_state 中设置 Nmstate YAML 指令。这些指令与您可以在 network_connections 中设置的变量有所不同。
例如,要使用动态 IP 地址设置创建以太网连接,请在 playbook 中使用以下 vars 块:
| 带有状态配置的 playbook | 常规 playbook |
|
|
|
例如,要仅更改您之前创建的动态 IP 地址设置的连接状态,请在 playbook 中使用以下 vars 块:
| 带有状态配置的 playbook | 常规 playbook |
|
|
|
第 19 章 使用 RHEL 系统角色管理容器 复制链接链接已复制到粘贴板!
使用 podman RHEL 系统角色,您可以管理 Podman 配置、容器以及运行 Podman 容器的 systemd 服务。
19.1. 使用 podman RHEL 系统角色创建带有绑定挂载的无根容器 复制链接链接已复制到粘贴板!
您可以使用 podman RHEL 系统角色,通过运行 Ansible playbook 来创建带有绑定挂载的无根容器,并管理应用程序配置。
示例 Ansible playbook 启动两个 Kubernetes pod:一个用于数据库,另一个用于 web 应用。数据库 pod 配置在 playbook 中指定,而 Web 应用 Pod 在一个外部 YAML 文件中定义。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 -
用户和组
webapp存在,且必须列在主机上的/etc/subuid和/etc/subgid文件中。 -
必须已创建名为
dbuser的用户和名为dbgroup的组。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
run_as_user和run_as_group- 指定容器是无根的。
kube_file_content包含一个定义名为
db的第一个容器的 Kubernetes YAML 文件。您可以使用podman kube generate命令生成 Kubernetes YAML 文件。-
db容器是基于quay.io/db/db:stable容器镜像。 -
db绑定挂载将主机上的/var/lib/db目录映射到容器中的/var/lib/db目录。Z标志使用私有的 unshared 标签标记内容,因此只有db容器才能访问内容。
-
kube_file_src: <path>-
定义第二个容器。控制器节点上
/path/to/webapp.yml文件的内容将复制到受管节点上的kube_file字段中。 volumes: <list>-
一个定义要在一个或多个容器中提供数据源的 YAML 列表。例如,主机上的本地磁盘(
hostPath)或其他磁盘设备。 volumeMounts: <list>- 一个定义目标的 YAML 列表,其中单个容器将挂载一个给定卷。
podman_create_host_directories: true-
在主机上创建目录。这指示角色检查
hostPath卷的 kube 规格,并在主机上创建这些目录。如果您需要对所有权和权限有更多的控制,请使用podman_host_directories。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.podman/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
19.2. 使用 podman RHEL 系统角色创建一个带有 Podman 卷的有根容器 复制链接链接已复制到粘贴板!
您可以使用 podman RHEL 系统角色,通过运行 Ansible playbook 来创建一个带有 Podman 卷的有根容器,并管理应用程序配置。
示例 Ansible playbook 部署一个名为 ubi8-httpd 的 从 registry.access.redhat.com/ubi8/httpd-24 镜像运行 HTTP 服务器容器的 Kubernetes pod。容器的 Web 内容是从一个名为 ubi8-html-volume 的持久卷中挂载的。默认情况下,podman 角色创建有根容器。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
kube_file_content包含一个定义名为
db的第一个容器的 Kubernetes YAML 文件。您可以使用podman kube generate命令生成 Kubernetes YAML 文件。-
ubi8-httpd容器是基于registry.access.redhat.com/ubi8/httpd-24容器镜像。 -
ubi8-html-volume将主机上的/var/www/html目录映射到容器。Z标志使用私有 unshared 标签标记内容,因此只有ubi8-httpd容器可以访问内容。 -
pod 使用挂载路径
/var/www/html挂载名为ubi8-html-volume的现有持久性卷。
-
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.podman/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
19.3. 使用 podman RHEL 系统角色创建一个带有 secret 的 Quadlet 应用程序 复制链接链接已复制到粘贴板!
您可以使用 podman RHEL 系统角色,通过运行 Ansible playbook 来创建一个带有 secret 的 Quadlet 应用程序。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 -
容器中的 web 服务器应使用的证书和相应的私钥存储在
~/certificate.pem和~/key.pem文件中。
流程
显示证书和私钥文件的内容:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您在后续步骤中需要此信息。
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保
certificate和key变量中的所有行都以两个空格开头。- 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 流程创建一个与 MySQL 数据库配对的 WordPress 内容管理系统。
podman_quadlet_specs 角色变量为 Quadlet 定义一组配置,它指向以某种方式一起工作的一组容器或服务。它包括以下规范:-
Wordpress 网络由
quadlet-demo网络单元定义。 -
MySQL 容器的卷配置由
file_src: quadlet-demo-mysql.volume字段定义。 -
template_src: quadlet-demo-mysql.container.j2字段用于为 MySQL 容器生成一个配置。 -
两个 YAML 文件如下:
file_src: envoy-proxy-configmap.yml和file_src: quadlet-demo.yml.请注意,.yml 不是一个有效的 Quadlet 单元类型,因此这些文件将只被复制,且不会作为 Quadlet 规范来处理。 Wordpress 和 envoy 代理容器和配置由
file_src: quadlet-demo.kube字段定义。kube 单元将之前[Kube]部分中的 YAML 文件称为Yaml=quadlet-demo.yml和ConfigMap=envoy-proxy-configmap.yml。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.podman/README.md文件。
-
Wordpress 网络由
验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 20 章 使用 RHEL 系统角色配置 Postfix MTA 复制链接链接已复制到粘贴板!
您可以使用 postfix RHEL 系统角色,以自动的方式一致地管理 Postfix 邮件传输代理(MTA)的配置。当您需要时,部署这样的配置很有用,例如:
- 稳定的邮件服务器:使系统管理员能够配置快速且可扩展的服务器,以发送和接收电子邮件。
- 保护通信:支持 TLS 加密、身份验证、域黑名单等功能,以确保安全的电子邮件传输。
- 改进了电子邮件管理和路由:实施过滤器和规则,以便您控制电子邮件流量。
postfix_conf 字典保存支持的 Postfix 配置参数的键值对。Postfix 无法识别为支持的密钥将被忽略。postfix RHEL 系统角色直接将您提供的键值对传递给 postfix_conf 字典,而不验证其语法或限制它们。因此,角色对于熟悉 Postfix 的以及知道如何配置它的人特别有用。
20.1. 将 Postfix 配置为空客户端,以便仅发送传出电子邮件 复制链接链接已复制到粘贴板!
空客户端是一种特殊配置,其中设置 Postfix 服务器只为发送传出电子邮件,但不接收任何传入电子邮件。在您需要发送通知、警报或日志,但不需要接收或管理电子邮件的情况,这种设置被广泛使用。通过使用 Ansible 和 postfix RHEL 系统角色,您可以自动化这个过程,并远程将 Postfix 服务器配置为空客户端,以便仅发送传出电子邮件。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
myhostname: <server.example.com>- 此邮件系统的互联网主机名。默认为完全限定域名(FQDN)。
myorigin: $mydomain-
本地发布的邮件似乎来自的域名,并且本地发布的邮件被递送到的域名。默认为
$myhostname。 relayhost: <smtp.example.com>- 非本地邮件的下一跳目的地,覆盖收件人地址中的非本地域。默认为空字段。
inet_interfaces: loopback-only- 对于传入电子邮件连接,定义 Postfix 服务器侦听哪个网络接口。它控制 Postfix 服务器是否以及如何接收来自网络的电子邮件。
mydestination- 定义哪些域和主机名被视为本地。
relay_domains: "{{ postfix_default_database_type }}:/etc/postfix/relay_domains"-
在充当中继服务器(SMTP 转发)时,指定 Postfix 可将电子邮件转发到的域。在这种情况下,域将由
postfix_files变量生成。postfix_default_database_type 变量包含在 "default_database_type" Postfix 参数中设置的数据库类型。在 RHEL 10 上,您必须使用relay_domains: "{{ postfix_default_database_type }}:/etc/postfix/relay_domains"。 postfix_files-
定义将放在
/etc/postfix/目录中的文件的列表。如果需要,这些文件可以被转换为 Postfix 查找表。在这种情况下,postfix_files为 SMTP 转发生成域名。
有关 playbook 中使用的角色变量和 Postfix 配置参数的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.postfix/README.md文件和postconf(5)手册页。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 21 章 使用 RHEL 系统角色安装和配置 PostgreSQL 数据库服务器 复制链接链接已复制到粘贴板!
您可以使用 postgresql RHEL 系统角色自动化 PostgreSQL 数据库服务器的安装和管理。默认情况下,此角色还通过自动在 PostgreSQL 服务配置文件中配置与性能相关的设置来优化 PostgreSQL。
21.1. 使用 postgresql RHEL 系统角色配置带有现有 TLS 证书的 PostgreSQL 复制链接链接已复制到粘贴板!
如果应用程序需要 PostgreSQL 数据库服务器,您可以使用 TLS 加密配置此服务,以在应用程序和数据库之间启用安全通信。通过使用 postgresql RHEL 系统角色,您可以自动化这个过程,并远程安装和配置带有 TLS 加密的 PostgreSQL。在 playbook 中,您可以使用现有私钥和由证书颁发机构(CA)发布的 TLS 证书。
postgresql 角色无法在 firewalld 服务中打开端口。要允许远程访问 PostgreSQL 服务器,请在 playbook 中添加一个使用 firewall RHEL 系统角色的任务。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 受管节点的私钥和证书都存储在控制节点上的以下文件中:
-
私钥:
~/<FQDN_of_the_managed_node>.key -
证书:
~/<FQDN_of_the_managed_node>.crt
-
私钥:
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:pwd: <password>
pwd: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
postgresql_version: <version>设置要安装的 PostgreSQL 的版本。您可以设置的版本取决于在受管节点上运行的 Red Hat Enterprise Linux 中提供的 PostgreSQL 版本。
您无法通过更改
postgresql_version变量并再次运行 playbook 来升级或降级 PostgreSQL。postgresql_password: <password>设置
postgres数据库超级用户的密码。您无法通过更改
postgresql_password变量并再次运行 playbook 来更改密码。postgresql_cert_name: <private_key_and_certificate_file>定义受管节点上没有
.crt和key后缀的证书和私钥的路径和基础名称。在 PostgreSQL 配置过程中,角色在/var/lib/pgsql/data/目录中创建引用这些文件的符号链接。证书和私钥必须在受管节点上本地存在。您可以将任务与
ansible.builtin.copy模块一起使用,来将文件从控制节点传输到受管节点,如 playbook 中所示。postgresql_server_conf: <list_of_settings>定义角色应设置的
postgresql.conf设置。角色将这些设置添加到/etc/postgresql/system-roles.conf文件中,并在/var/lib/pgsql/data/postgresql.conf的末尾包含此文件。因此,postgresql_server_conf变量中的设置会覆盖/var/lib/pgsql/data/postgresql.conf中的设置。使用
postgresql_server_conf中的不同设置重新运行 playbook 会使用新设置覆盖/etc/postgresql/system-roles.conf文件。postgresql_pg_hba_conf: <list_of_authentication_entries>在
/var/lib/pgsql/data/pg_hba.conf文件中配置客户端身份验证条目。详情请查看 PostgreSQL 文档。示例允许以下到 PostgreSQL 的连接:
- 使用本地 UNIX 域套接字的未加密的连接。
- 到 IPv4 和 IPv6 localhost 地址的 TLS 加密的连接。
-
来自 192.0.2.0/24 子网的 TLS 加密的连接。请注意,只有在您也在
postgresql_server_conf变量中适当配置了listen_addresses设置,才能从远程地址进行访问。
使用
postgresql_pg_hba_conf中的不同设置重新运行 playbook 会使用新设置覆盖/var/lib/pgsql/data/pg_hba.conf文件。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.postgresql/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
postgres超级用户连接到 PostgreSQL 服务器,并执行\conninfo元命令:psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo' Password for user postgres: You are connected to database "postgres" as user "postgres" on host "192.0.2.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
# psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo' Password for user postgres: You are connected to database "postgres" as user "postgres" on host "192.0.2.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果输出显示 TLS 协议版本和密码详情,则连接可以正常工作,且 TLS 加密已启用。
如果应用程序需要 PostgreSQL 数据库服务器,则您可以配置带有 TLS 加密的 PostgreSQL 服务,以在应用和数据库之间启用安全通信。如果 PostgreSQL 主机是 Red Hat Identity Management (IdM)域的一员,则 certmonger 服务可以管理证书请求和将来的续订。
通过使用 postgresql RHEL 系统角色,您可以自动化此过程。您可以远程安装和配置带有 TLS 加密的 PostgreSQL,postgresql 角色使用 certificate RHEL 系统角色配置 certmonger ,并从 IdM 请求证书。
postgresql 角色无法在 firewalld 服务中打开端口。要允许远程访问 PostgreSQL 服务器,请在使用 firewall RHEL 系统角色的 playbook 中添加一个任务。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您在 IdM 域中注册了受管节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:pwd: <password>
pwd: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
postgresql_version: <version>设置要安装的 PostgreSQL 的版本。您可以设置的版本取决于在受管节点上运行的 Red Hat Enterprise Linux 中提供的 PostgreSQL 版本。
您无法通过更改
postgresql_version变量并再次运行 playbook 来升级或降级 PostgreSQL。postgresql_password: <password>设置
postgres数据库超级用户的密码。您无法通过更改
postgresql_password变量并再次运行 playbook 来更改密码。postgresql_certificates: <certificate_role_settings>-
包含
certificate角色设置的 YAML 字典的列表。 postgresql_server_conf: <list_of_settings>定义您要角色设置的
postgresql.conf设置。角色将这些设置添加到/etc/postgresql/system-roles.conf文件中,并在/var/lib/pgsql/data/postgresql.conf的末尾包含此文件。因此,postgresql_server_conf变量中的设置会覆盖/var/lib/pgsql/data/postgresql.conf中的设置。使用
postgresql_server_conf中的不同设置重新运行 playbook 会使用新设置覆盖/etc/postgresql/system-roles.conf文件。postgresql_pg_hba_conf: <list_of_authentication_entries>在
/var/lib/pgsql/data/pg_hba.conf文件中配置客户端身份验证条目。详情请查看 PostgreSQL 文档。示例允许以下到 PostgreSQL 的连接:
- 使用本地 UNIX 域套接字的未加密的连接。
- 到 IPv4 和 IPv6 localhost 地址的 TLS 加密的连接。
-
来自 192.0.2.0/24 子网的 TLS 加密的连接。请注意,只有在您也在
postgresql_server_conf变量中适当配置了listen_addresses设置,才能从远程地址进行访问。
使用
postgresql_pg_hba_conf中的不同设置重新运行 playbook 会使用新设置覆盖/var/lib/pgsql/data/pg_hba.conf文件。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.postgresql/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
postgres超级用户连接到 PostgreSQL 服务器,并执行\conninfo元命令:psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo' Password for user postgres: You are connected to database "postgres" as user "postgres" on host "192.0.2.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
# psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo' Password for user postgres: You are connected to database "postgres" as user "postgres" on host "192.0.2.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果输出显示 TLS 协议版本和密码详情,则连接可以正常工作,且 TLS 加密已启用。
第 22 章 使用 RHEL 系统角色注册系统 复制链接链接已复制到粘贴板!
rhc RHEL 系统角色使管理员能够使用红帽订阅管理(RHSM)和 Satellite 服务器自动注册多个系统。该角色还支持使用 Ansible ,进行与 Insights 相关配置和管理任务。默认情况下,当使用 rhc 注册系统时,系统已连接到 Red Hat Insights。另外,使用 rhc,您可以:
- 配置到 Red Hat Insights 的连接
- 启用和禁用存储库
- 配置用于连接的代理
- 配置 Insights 补救和自动更新
- 设置系统发行版本
- 配置 Insights 标签
22.1. 使用 rhc RHEL 系统角色注册系统 复制链接链接已复制到粘贴板!
您可以使用 rhc RHEL 系统角色,使用红帽订阅管理(RHSM)大规模注册多个系统。默认情况下,在注册时 rhc 将系统连接到 Red Hat Insights。注册系统可启用用于管理系统和报告数据的特性和能力。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:activationKey: <activation_key> organizationID: <organizationID> username: <username> password: <password>
activationKey: <activation_key> organizationID: <organizationID> username: <username> password: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:要使用激活码和机构 ID (推荐)注册,请使用以下 playbook:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
rhc_auth: activation_keys码
activation_keys指定您要使用激活码进行注册。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.rhc.README.md文件。
要使用用户名和密码注册,请使用以下 playbook:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
示例 playbook 中指定的设置包括如下:
+
rhc_auth: login-
码
login指定您要使用用户名和密码进行注册。
验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.2. 使用 rhc RHEL 系统角色,使用 Satellite 注册系统 复制链接链接已复制到粘贴板!
当组织使用 Satellite 管理系统时,需要通过 Satellite 注册系统。您可以使用 rhc RHEL 系统角色,使用 Satellite 远程注册您的系统。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:activationKey: <activation_key> organizationID: <organizationID>
activationKey: <activation_key> organizationID: <organizationID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
hostname: example.com- 用于系统注册和软件包管理的 Satellite 服务器的完全限定域名(FQDN)。
port: 443- 定义用于与 Satellite 服务器进行通信的网络端口。
prefix: /rhsm- 指定访问 Satellite 服务器上资源的 URL 路径前缀。
rhc_baseurl: http://example.com/pulp/content-
定义内容 URL 的前缀。在 Satellite 环境中,
baseurl必须设置为注册系统的同一服务器。请参阅hostname值,以确保使用正确的服务器。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.rhc.README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.3. 使用 rhc RHEL 系统角色在注册后禁用到 Insights 的连接 复制链接链接已复制到粘贴板!
当使用 rhc RHEL 系统角色注册系统时,角色默认启用到 Red Hat Insights 的连接。Red Hat Insights 是混合云控制台中的一个受管服务,它使用预测分析、修复功能和深度域专业知识来简化复杂的操作任务。如果不需要,您可以使用 rhc RHEL 系统角色禁用它。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您已注册系统。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
rhc_insights absent|present启用或禁用 Red Hat Insights 的系统注册,以进行主动分析和建议。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.rhc/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.4. 使用 rhc RHEL 系统角色管理存储库 复制链接链接已复制到粘贴板!
在 RHEL 系统上启用存储库对于从验证的源访问、安装和更新软件包至关重要。您可以使用 rhc RHEL 系统角色远程启用或禁用受管节点上的存储库,以确保系统的安全性、稳定性和兼容性。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您有要在受管节点上启用或禁用的存储库的详情。
- 您已注册系统。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
name: RepositoryName- 应该启用的存储库的名称。
state: enabled|disabled-
可选,启用或禁用存储库。默认为
enabled。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.rhc/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.5. 使用 rhc RHEL 系统角色将系统锁定到特定版本 复制链接链接已复制到粘贴板!
要确保系统稳定性和兼容性,有时需要将 RHEL 系统限制为只使用特定次版本的存储库,而不是自动升级到最新的可用版本。将系统锁定到特定的次版本有助于在生产环境中保持一致性,这样可防止引入兼容性问题的意外更新。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您知道您要将系统锁定到的 RHEL 版本。请注意,您只能将系统锁定到受管节点当前运行的 RHEL 次版本或之后的次版本。
- 您已注册系统。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
rhc_release: version要为系统设置的 RHEL 版本,因此可用内容将仅限于此版本。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.rhc/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.6. 在使用 rhc RHEL 系统角色注册主机时使用代理服务器 复制链接链接已复制到粘贴板!
如果您的安全限制只允许通过代理服务器访问互联网,您可以在使用 rhc 注册系统时指定 rhc 角色的代理设置。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:username: <username> password: <password> proxy_username: <proxyusernme> proxy_password: <proxypassword>
username: <username> password: <password> proxy_username: <proxyusernme> proxy_password: <proxypassword>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
hostname: proxy.example.com- 代理服务器的完全限定域名(FQDN)。
port: 3128- 定义用于与代理服务器进行通信的网络端口。
username: proxy_username- 指定用于身份验证的用户名。这只有在代理服务器需要身份验证时才需要。
password: proxy_password- 指定用于身份验证的密码。这只有在代理服务器需要身份验证时才需要。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.rhc/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.7. 使用 rhc RHEL 系统角色管理 Insights 规则的自动更新 复制链接链接已复制到粘贴板!
您可以使用 rhc RHEL 系统角色启用或禁用 Red Hat Insights 的自动收集规则更新。默认情况下,当您的系统连接到 Red Hat Insights 时,这个选项就启用了。您可以使用 rhc 禁用它。
如果禁用了此功能,您就存在使用过时的规则定义文件,且没有获得最新验证更新的风险。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您已注册系统。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:username: <username> password: <password>
username: <username> password: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
autoupdate: true|false启用或禁用 Red Hat Insights 的自动集合规则更新。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.rhc/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.8. 使用 rhc RHEL 系统角色配置 Insights 修复 复制链接链接已复制到粘贴板!
您可以使用 rhc RHEL 系统角色将系统配置为自动更新动态配置。当将您的系统连接到 Red Hat Insights 时,它默认被启用。如果需要,您可以禁用它。您可以使用 rhc 确保您的系统在直接连接到红帽时已准备好进行修复。有关 Red Hat Insights 修复的更多信息,请参阅 Red Hat Insights 修复指南。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您已启用了 Insights 补救。
- 您已注册系统。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.9. 使用 rhc RHEL 系统角色配置 Insights 标签 复制链接链接已复制到粘贴板!
您可以使用 rhc RHEL 系统角色为系统过滤和分组配置 Red Hat Insights 标签。您还可以根据要求自定义标签。使用 Red Hat Insights 标签过滤和分组系统,可帮助管理员根据属性,如环境、位置或功能等来有效地管理、监控,并将策略应用到特定的系统集合。这提高了可见性,简化了自动化,并增强了跨大型基础设施的安全合规性。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:username: <username> password: <password>
username: <username> password: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
group: group-name-value- 指定用于组织和管理注册主机的系统组。
location:location-name-value- 定义与已注册的系统关联的位置。
description- 为已注册的系统提供一个简短摘要或标识符。
state: present|absent- 表示已注册系统的当前状态。
注意tags中的内容是一个 YAML 结构,代表管理员所需的用于已配置的系统的标签。这里给出的示例仅用于说明目的,并不详尽。管理员可以自定义 YAML 结构,来根据需要包含任何其他键和值。验证 playbook 语法:
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.10. 使用 rhc RHEL 系统角色取消系统注册 复制链接链接已复制到粘贴板!
如果您不再想在特定系统上接收注册服务器的内容,例如系统停用、虚拟机删除或切换到本地内容镜像,您可以使用 rhc RHEL 系统角色从红帽订阅服务中取消系统的注册。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 系统已经注册。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
rhc_state: absent指定应该从注册服务器、RHSM 或 Satellite 中取消注册的系统。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.rhc/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 23 章 使用 RHEL 系统角色配置 SELinux 复制链接链接已复制到粘贴板!
您可以使用 selinux RHEL 系统角色远程配置和管理 SELinux 权限,例如:
- 清理与 SELinux 布尔值、文件上下文、端口和登录相关的本地策略修改。
- 设置 SELinux 策略布尔值、文件上下文、端口和登录。
- 在指定文件或目录中恢复文件上下文。
- 管理 SELinux 模块。
23.1. 使用 selinux RHEL 系统角色恢复目录上的 SELinux 上下文 复制链接链接已复制到粘贴板!
可能有多种文件有不正确 SELinux 上下文的情况。例如,如果文件被复制或移到一个目录中,则它们的 SELinux 上下文可能与新位置的预期上下文不匹配。使用不正确的 SELinux 上下文时,应用程序可能无法访问文件。要对大量主机上的目录远程重置 SELinux 上下文,您可以使用 selinux RHEL 系统角色。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
selinux_restore_dirs: <list>- 定义角色应重置 SELinux 上下文的目录的列表。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.selinux/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示您已重置了上下文的文件或目录的 SELinux 上下文。例如,要显示
/var/www/目录上的上下文,请输入:ansible rhel10.example.com -m command -a 'ls -ldZ /var/www/' drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Feb 28 13:20 /var/www/
# ansible rhel10.example.com -m command -a 'ls -ldZ /var/www/' drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Feb 28 13:20 /var/www/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.2. 使用 selinux RHEL 系统角色管理 SELinux 网络端口标签 复制链接链接已复制到粘贴板!
如果要在非标准端口上运行服务,您必须在此端口上设置相应的 SELinux 类型标签。这可防止在服务希望侦听非标准端口时,SELinux 拒绝对服务的访问权限。通过使用 selinux RHEL 系统角色,您可以自动化此任务,并在端口上远程分配一个类型标签。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ports: <port_number>- 定义您要为其分配 SELinux 标签的端口号。使用逗号分隔多个值。
setype: <type_label>- 定义 SELinux 类型标签。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.selinux/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示分配了
http_port_t标签的端口号:ansible managed-node-01.example.com -m shell -a 'semanage port --list | grep http_port_t' http_port_t tcp 80, 81, 443, <port_number>, 488, 8008, 8009, 8443, 9000
# ansible managed-node-01.example.com -m shell -a 'semanage port --list | grep http_port_t' http_port_t tcp 80, 81, 443, <port_number>, 488, 8008, 8009, 8443, 9000Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3. 使用 selinux RHEL 系统角色部署 SELinux 模块 复制链接链接已复制到粘贴板!
如果默认的 SELinux 策略不满足您的要求,您可以创建自定义模块来允许您的应用程序访问所需的资源。通过使用 selinux RHEL 系统角色,您可以自动化此过程,并远程部署 SELinux 模块。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您要部署的 SELinux 模块存储在与 playbook 同样的目录中。
SELinux 模块以通用中间语言(CIL)或策略软件包(PP)格式提供。
如果使用 PP 模块,请确保受管节点上的
policydb版本与用来构建 PP 模块的版本相同或更新。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
path: <module_file>- 设置控制节点上模块文件的路径。
priority: <value>-
设置 SELinux 模块优先级。
400是默认值。 state: <value>定义模块的状态:
-
enabled:安装或启用模块。 -
disabled:禁用模块。 -
absent:删除模块。
-
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.selinux/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
远程显示您在 playbook 中使用的 SELinux 模块和过滤器的列表:
ansible managed-node-01.example.com -m shell -a 'semodule -l | grep <module>'
# ansible managed-node-01.example.com -m shell -a 'semodule -l | grep <module>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果列出了模块,则其已安装且启用了。
第 24 章 使用 RHEL 系统角色配置 OpenSSH 服务器和客户端 复制链接链接已复制到粘贴板!
您可以使用 sshd RHEL 系统角色配置 OpenSSH 服务器,使用 ssh RHEL 系统角色,以自动的方式同时在任意数量的 RHEL 系统上一致地配置 OpenSSH 客户端。对于需要安全远程交互的任何系统,此类配置是必需的,例如:
- 远程系统管理:使用 SSH 客户端安全地从另一台计算机连接到您的机器。
- 安全文件传输:OpenSSH 提供的安全文件传输协议(SFTP)可让您在本地机器和远程系统之间安全地传输文件。
- 自动化 DevOps 管道:自动化需要安全连接到远程服务器(CI/CD 管道)的软件部署。
- 隧道和端口转发:转发本地端口,以访问防火墙后面的远程服务器上的 Web 服务。例如,远程数据库或开发服务器。
- 基于密钥的身份验证:对基于密码登录的更加安全的替代。
- 基于证书的验证:集中信任管理和更好的可扩展性。
- 增强了安全性:禁用 root 登录、限制用户访问、强制强加密和其他此类强化,确保更强的系统安全性。
24.1. sshd RHEL 系统角色如何将 playbook 中的设置映射到配置文件 复制链接链接已复制到粘贴板!
在 sshd RHEL 系统角色 playbook 中,您可以为服务器 SSH 配置文件定义参数。
如果没有指定这些设置,角色会生成一个与 RHEL 默认值匹配的 sshd_config 文件。
在所有情况下,布尔值会在受管节点上的最终配置中正确呈现为 yes 和 no。您可以使用列表来定义多行配置项。例如:
sshd_ListenAddress: - 0.0.0.0 - '::'
sshd_ListenAddress:
- 0.0.0.0
- '::'
呈现为:
ListenAddress 0.0.0.0 ListenAddress ::
ListenAddress 0.0.0.0
ListenAddress ::
24.2. 使用 sshd RHEL 系统角色配置 OpenSSH 服务器 复制链接链接已复制到粘贴板!
您可以使用 sshd RHEL 系统角色配置多个 OpenSSH 服务器。这些措施通过以下方式来确保远程用户的安全通信环境:
- 管理来自远程客户端的传入 SSH 连接
- 凭证验证
- 保护数据传输和命令执行
您可以将 sshd RHEL 系统角色与其他更改 SSHD 配置的 RHEL 系统角色(如 Identity Management RHEL 系统角色)一起使用。要防止配置被覆盖,请确保 sshd RHEL 系统角色使用命名空间(RHEL 8 及更早版本)或置入目录(RHEL 9 及更新版本)。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
PasswordAuthentication: yes|no-
控制 OpenSSH 服务器(
sshd)是否接受来自使用用户名和密码组合的客户端的身份验证。 Match:-
match 块只允许来自子网
192.0.2.0/24使用密码的root用户登录。
有关 playbook 中使用的角色变量和 OpenSSH 配置选项的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md文件和sshd_config (5)手册页。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
登录到 SSH 服务器:
ssh <username>@<ssh_server>
$ ssh <username>@<ssh_server>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 SSH 服务器上
sshd_config文件的内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查您是否可以以 root 用户身份从
192.0.2.0/24子网连接到服务器:确定您的 IP 地址:
hostname -I 192.0.2.1
$ hostname -I 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 IP 地址在
192.0.2.1-192.0.2.254范围内,您可以连接到服务器。以
root用户身份连接到服务器:ssh root@<ssh_server>
$ ssh root@<ssh_server>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.3. 对非独占配置使用 sshd RHEL 系统角色 复制链接链接已复制到粘贴板!
默认情况下,应用 sshd RHEL 系统角色会覆盖整个配置。如果您之前调整了配置,例如使用不同的 RHEL 系统角色或 playbook,则这可能会出现问题。要只对所选配置选项应用 sshd RHEL 系统角色,同时保留其他选项,您可以使用非独占配置。
您可以应用非独占配置:
- 在 RHEL 8 及更早版本中使用配置片段。
-
在 RHEL 9 及更高版本中使用置入目录中的文件。默认配置文件已放入随时可访问的目录中,存为
/etc/ssh/sshd_config.d/00-ansible_system_role.conf。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:对于运行 RHEL 8 或更早版本的受管节点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于运行 RHEL 9 或更高版本的受管节点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
sshd_config_namespace: <my_application>- 角色将您在 playbook 中指定的配置放在给定命名空间下的现有配置文件中的配置片段中。当从不同上下文运行角色时,您需要选择一个不同的命名空间。
sshd_config_file: /etc/ssh/sshd_config.d/<42-my_application>.conf-
在
sshd_config_file变量中,定义sshd系统角色将配置选项写入其中的.conf文件。使用两位前缀,例如42-来指定应用配置文件的顺序。 AcceptEnv:控制 OpenSSH 服务器(
sshd)将接受来自客户端的哪些环境变量:-
LANG:定义语言和区域设置。 -
LS_COLORS:定义终端中ls命令的显示颜色方案。 -
EDITOR: 指定需要打开编辑器的命令行程序的默认文本编辑器。
-
有关 playbook 中使用的角色变量和 OpenSSH 配置选项的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md文件和sshd_config (5)手册页。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 SSH 服务器上的配置:
对于运行 RHEL 8 或更早版本的受管节点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于运行 RHEL 9 或更高版本的受管节点:
cat /etc/ssh/sshd_config.d/42-my_application.conf # Ansible managed # AcceptEnv LANG LS_COLORS EDITOR
# cat /etc/ssh/sshd_config.d/42-my_application.conf # Ansible managed # AcceptEnv LANG LS_COLORS EDITORCopy to Clipboard Copied! Toggle word wrap Toggle overflow
24.4. 使用 sshd RHEL 系统角色覆盖 SSH 服务器上的系统范围的加密策略 复制链接链接已复制到粘贴板!
当默认加密设置不符合某些安全或兼容性需求时,您可能需要使用 sshd RHEL 系统角色覆盖 OpenSSH 服务器上的系统范围加密策略。特别是在以下值得注意的情况:
- 与旧客户端的兼容:必须使用比默认值弱的加密算法、密钥交换协议或密码。
- 强制执行更强大的安全策略:同时,您可以禁用较弱的算法。这样的措施可能会超出默认的系统加密策略,特别是在高度安全和监管的环境中。
- 性能考虑:系统默认值可能会强制实施更强大的算法,这些算法对于某些系统来说可能是计算密集型的。
- 针对特定安全需求进行自定义:针对默认加密策略未涵盖的独特要求进行调整。
从 sshd RHEL 系统角色不可能覆盖加密策略的所有方面。例如,在不同的层上可能会禁止 SHA-1 签名,因此对于更通用的解决方案,请参阅 使用 RHEL 系统角色设置自定义加密策略。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
sshd_KexAlgorithms-
您可以选择密钥交换算法,例如
ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1或diffie-hellman-group-exchange-sha256。 sshd_Ciphers-
您可以选择密码,例如
aes128-ctr、es192-ctr或aes256-ctr。 sshd_MACs-
您可以选择 MAC,例如
hmac-sha2-256、hmac-sha2-512或hmac-sha1。 sshd_HostKeyAlgorithms-
您可以选择一个公钥算法,如
ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521或ssh-rsa。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md文件。注意在 RHEL 9 受管节点上,系统角色会将配置写入到
/etc/ssh/sshd_config.d/00-ansible_system_role.conf文件中,其中加密选项会被自动应用。您可以使用sshd_config_file变量更改文件。但是,为了确保配置有效,请使用一个按字典顺序位于/etc/ssh/sshd_config.d/50-redhat.conf文件之前的文件名,其中包括配置的加密策略。在 RHEL 8 受管节点上,您必须通过将
sshd_sysconfig_override_crypto_policy和sshd_sysconfig变量设置为true来启用覆盖。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过使用详细的 SSH 连接验证并在以下输出中检查定义的变量,来验证流程是否成功:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.5. ssh RHEL 系统角色如何将 playbook 中的设置映射到配置文件 复制链接链接已复制到粘贴板!
在 ssh RHEL 系统角色 playbook 中,您可以为客户端 SSH 配置文件定义参数。
如果没有指定这些设置,角色会生成一个与 RHEL 默认值匹配的全局 ssh_config 文件。
在所有情况下,布尔值在受管节点上的最终配置中正确呈现为 yes 或 no。您可以使用列表来定义多行配置项。例如:
LocalForward: - 22 localhost:2222 - 403 localhost:4003
LocalForward:
- 22 localhost:2222
- 403 localhost:4003
呈现为:
LocalForward 22 localhost:2222 LocalForward 403 localhost:4003
LocalForward 22 localhost:2222
LocalForward 403 localhost:4003
配置选项区分大小写。
24.6. 使用 ssh RHEL 系统角色配置 OpenSSH 客户端 复制链接链接已复制到粘贴板!
您可以使用 ssh RHEL 系统角色配置多个 OpenSSH 客户端。这些措施可通过确保以下内容让本地用户与远程 OpenSSH 服务器建立一个安全连接:
- 安全连接启动
- 凭证置备
- 与 OpenSSH 服务器协商有关用于安全通信渠道的加密方法
- 能够安全地向和从 OpenSSH 服务器发送文件
您可以将 ssh RHEL 系统角色与更改 SSH 配置的其他系统角色(如 Identity Management RHEL 系统角色)一起使用。要防止配置被覆盖,请确保 ssh RHEL 系统角色使用置入目录(RHEL 8 及更高版本中的默认设置)。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
ssh_user: root-
使用特定配置在受管节点上配置
root用户的 SSH 客户端首选项。 Compression: true- 压缩被启用。
ControlMaster: auto-
ControlMaster 多路复用设置为
auto。 Host-
创建别名
example,来以名为user1的用户身份连接到server.example.com主机。 ssh_ForwardX11: no- X11 转发被禁用。
有关 playbook 中使用的角色变量和 OpenSSH 配置选项的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ssh/README.md文件和ssh_config (5)手册页。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
通过显示 SSH 配置文件来验证受管节点是否有正确的配置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 25 章 使用 RHEL 系统角色管理本地存储 复制链接链接已复制到粘贴板!
要使用 Ansible 管理 LVM 和本地文件系统(FS),您可以使用 storage 角色,这是 RHEL 10 中提供的 RHEL 系统角色之一。
使用 存储 角色可让您自动管理多台机器上的磁盘和逻辑卷上的文件系统,以及从 RHEL 7.7 开始的所有 RHEL 版本。
25.1. 使用 storage RHEL 系统角色在块设备上创建 XFS 文件系统 复制链接链接已复制到粘贴板!
示例 Ansible playbook 使用 storage 角色,使用默认的参数在块设备上创建 XFS 文件系统。如果 /dev/sdb 设备上的文件系统或者挂载点目录不存在,playbook 会创建它们。
存储 角色只能在未分区、整个磁盘或逻辑卷(LV)上创建文件系统。它不能在分区中创建文件系统。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
name: barefs-
卷名称(示例中为
barefs)目前是任意的。storage角色根据disks属性下列出的磁盘设备来识别卷。 fs_type: <file_system>-
如果要使用默认的文件系统 XFS,您可以省略
fs_type参数。 disks: <list_of_disks_and_volumes>- 磁盘和 LV 名称的 YAML 列表。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
25.2. 使用 storage RHEL 系统角色永久挂载文件系统 复制链接链接已复制到粘贴板!
示例 Ansible playbook 使用 storage 角色来永久挂载现有的文件系统。它通过向 /etc/fstab 文件中添加合适的条目来确保文件系统立即可用并永久挂载。这允许文件系统在重启后保持挂载。如果 /dev/sdb 设备上的文件系统或者挂载点目录不存在,playbook 会创建它们。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
25.3. 使用 storage RHEL 系统角色创建或者调整逻辑卷大小 复制链接链接已复制到粘贴板!
使用 storage 角色执行以下任务:
- 在由多个磁盘组成的卷组中创建 LVM 逻辑卷
- 调整 LVM 上现有文件系统的大小
- 以池总大小的百分比表示 LVM 卷大小
如果卷组不存在,角色会创建它。如果逻辑卷在卷组中存在,如果大小与 playbook 中指定的内容不匹配,则会调整大小。
如果您要缩小逻辑卷,为了避免数据丢失,您必须确保该逻辑卷上的文件系统没有使用正在缩小的逻辑卷中的空间。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
size: <size>- 您必须使用单位(如 GiB)或百分比(例如 60%)来指定大小。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证指定的卷是否已创建或调整到请求的大小:
ansible managed-node-01.example.com -m command -a 'lvs myvg'
# ansible managed-node-01.example.com -m command -a 'lvs myvg'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.4. 使用 storage RHEL 系统角色启用在线块丢弃 复制链接链接已复制到粘贴板!
您可以使用在线块丢弃选项挂载 XFS 文件系统,来自动丢弃未使用的块。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证在线块丢弃选项是否已启用:
ansible managed-node-01.example.com -m command -a 'findmnt /mnt/data'
# ansible managed-node-01.example.com -m command -a 'findmnt /mnt/data'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.5. 使用 storage RHEL 系统角色创建并挂载文件系统 复制链接链接已复制到粘贴板!
示例 Ansible playbook 使用 storage 角色创建和挂载文件系统。它通过向 /etc/fstab 文件中添加合适的条目来确保文件系统立即可用并永久挂载。这允许文件系统在重启后保持挂载。如果 /dev/sdb 设备上的文件系统或者挂载点目录不存在,playbook 会创建它们。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
disks: <list_of_devices>- 角色在创建卷时使用的设备名称的 YAML 列表。
fs_type: <file_system>-
指定角色应在卷上设置的文件系统。您可以选择
xfs、ext3、ext4、swap或unformatted。 label-name: <file_system_label>- 可选:设置文件系统的标签。
mount_point: <directory>-
可选:如果卷应自动挂载,请将
mount_point变量设置为应挂载卷的目录。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
25.6. 使用 storage RHEL 系统角色配置 RAID 卷 复制链接链接已复制到粘贴板!
使用 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 和 Ansible-Core 在 RHEL 上配置一个 RAID 卷。创建带有配置 RAID 卷参数的 Ansible Playbook,以满足您的要求。
设备名称在某些情况下可能会改变,例如:当您在系统中添加新磁盘时。因此,为了避免数据丢失,请在 playbook 中使用持久性命名属性。如需有关持久性命名属性的更多信息,请参阅 持久性命名属性。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证阵列是否被正确创建:
ansible managed-node-01.example.com -m command -a 'mdadm --detail /dev/md/data'
# ansible managed-node-01.example.com -m command -a 'mdadm --detail /dev/md/data'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.7. 使用 storage RHEL 系统角色在 RAID 上配置 LVM 卷组 复制链接链接已复制到粘贴板!
使用 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上配置一个带有 RAID 的 LVM 池。您可以使用可用参数建立一个 Ansible playbook,来配置带有 RAID 的 LVM 池。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。注意在
storage_pool级别设置raid_level会首先创建一个 MD RAID 阵列,然后在其上构建 LVM 卷组。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证您的池是否在 RAID 上:
ansible managed-node-01.example.com -m command -a 'lsblk'
# ansible managed-node-01.example.com -m command -a 'lsblk'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.8. 使用 storage RHEL 系统角色为 RAID LVM 卷配置条带大小 复制链接链接已复制到粘贴板!
使用 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上为 RAID LVM 卷配置条带大小。您可以使用可用参数建立一个 Ansible playbook,来配置带有 RAID 的 LVM 池。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。注意在
卷级别设置raid_level会创建 LVM RAID 逻辑卷。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证条带大小是否被设置为所需的大小:
ansible managed-node-01.example.com -m command -a 'lvs -o+stripesize /dev/my_pool/my_volume'
# ansible managed-node-01.example.com -m command -a 'lvs -o+stripesize /dev/my_pool/my_volume'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.9. 使用 storage RHEL 系统角色配置 LVM-VDO 卷 复制链接链接已复制到粘贴板!
您可以使用 storage RHEL 系统角色在启用了压缩和去重的 LVM (LVM-VDO)上创建一个 VDO 卷。
由于 storage 系统角色使用 LVM-VDO,因此每个池只能创建一个卷。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
vdo_pool_size: <size>- 卷在设备上的实际大小。您可以以人类可读的格式指定大小,如 10 GiB。如果没有指定单位,默认为字节。
size: <size>- VDO 卷的虚拟大小。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看压缩和去重的当前状态:
ansible managed-node-01.example.com -m command -a 'lvs -o+vdo_compression,vdo_compression_state,vdo_deduplication,vdo_index_state' LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert VDOCompression VDOCompressionState VDODeduplication VDOIndexState mylv1 myvg vwi-a-v--- 3.00t vpool0 enabled online enabled online
$ ansible managed-node-01.example.com -m command -a 'lvs -o+vdo_compression,vdo_compression_state,vdo_deduplication,vdo_index_state' LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert VDOCompression VDOCompressionState VDODeduplication VDOIndexState mylv1 myvg vwi-a-v--- 3.00t vpool0 enabled online enabled onlineCopy to Clipboard Copied! Toggle word wrap Toggle overflow
25.10. 使用 storage RHEL 系统角色创建 LUKS2 加密的卷 复制链接链接已复制到粘贴板!
您可以通过运行一个 Ansible Playbook,使用 storage 角色创建和配置使用 LUKS 加密的卷。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:luks_password: <password>
luks_password: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
encryption_cipher: <cipher>-
指定 LUKS 密码。可能的值有:
twofish-xts-plain64,serpent-xts-plain64和aes-xts-plain64(默认)。 encryption_key_size: <key_size>-
指定 LUKS 密钥大小。默认为
512位。 encryption_luks_version: luks2-
指定 LUKS 版本。默认为
luks2。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证创建的 LUKS 加密的卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.12. 使用 storage RHEL 系统角色调整物理卷大小 复制链接链接已复制到粘贴板!
使用 storage 系统角色,您可以在从主机外部重新调整底层存储或磁盘的大小后重新调整 LVM 物理卷大小。例如:您增加了虚拟磁盘的大小,并希望在现有 LVM 中使用额外的空间。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 底层块存储的大小已被更改。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
grow_to_filltrue角色自动扩展存储卷,以使用磁盘上的任何新容量。false角色将存储卷保持为当前大小,即使底层磁盘已增长。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
grow_to_fill设置是否按预期工作。准备一个测试的 PV 和 VG:pvcreate /dev/sdf vgcreate myvg /dev/sdf
# pvcreate /dev/sdf # vgcreate myvg /dev/sdfCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查并记录初始物理卷大小:
pvs
# pvsCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
编辑 playbook,以设置
grow_to_fill: false,并运行 playbook。 - 检查卷大小,并验证它是否保持不变。
-
编辑 playbook,以设置
grow_to_fill: true,并重新运行 playbook。 - 检查卷大小,并验证它是否已扩展。
第 26 章 使用 sudo 系统角色 复制链接链接已复制到粘贴板!
作为管理员,您可以使用 sudo RHEL 系统角色在多个系统上一致地配置 /etc/sudoers 文件。
26.1. 使用 RHEL 系统角色应用自定义 sudoers 配置 复制链接链接已复制到粘贴板!
您可以使用 sudo RHEL 系统角色在受管节点上应用自定义 sudoers 配置。这样,您可以定义哪些用户可以在哪些主机上运行哪些命令,从而获得更好的配置效率和更精细的控制。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow playbook 中指定的设置包括:
users- 规则适用的用户的列表。
hosts-
规则适用的主机的列表。对于所有主机,您可以使用
ALL。 commands-
规则适用的命令的列表。对于所有命令,您可以使用
ALL。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.sudo/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在受管节点上,验证 playbook 是否应用了新规则。
cat /etc/sudoers | tail -n1 <user_name> <host_name>= <path_to_command_binary>
# cat /etc/sudoers | tail -n1 <user_name> <host_name>= <path_to_command_binary>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 27 章 使用 RHEL 系统角色管理 systemd 单元 复制链接链接已复制到粘贴板!
通过使用 systemd RHEL 系统角色,您可以自动化某些与 systemd 相关的任务,并远程执行它们。您可以对以下操作使用角色:
- 管理服务
- 部署单元
- 部署置入文件
27.1. 使用 systemd RHEL 系统角色管理服务 复制链接链接已复制到粘贴板!
您可以使用 systemd RHEL 系统角色自动并远程管理 systemd 单元,如启动或启用服务。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:根据您要执行的操作,只使用变量。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.systemd/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
27.2. 使用 systemd RHEL 系统角色部署 systemd 置入文件 复制链接链接已复制到粘贴板!
systemd 在从其他位置读取单元的设置之上应用置入文件。因此,您可以使用置入文件修改单元设置,而无需更改原始单元文件。通过使用 systemd RHEL 系统角色,您可以自动化部署置入文件的过程。
角色使用硬编码的文件名 99-override.conf ,将置入文件存储在 /etc/systemd/system/<name>._<unit_type>/ 中。请注意,它会在目标目录中使用此名称覆盖现有文件。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
使用 systemd 置入文件内容创建一个 Jinja2 模板。例如,使用以下内容创建
~/sshd.service.conf.j2文件:{{ ansible_managed | comment }} [Unit] After= After=network.target sshd-keygen.target network-online.target{{ ansible_managed | comment }} [Unit] After= After=network.target sshd-keygen.target network-online.targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此置入文件在
After设置中指定与原始/usr/lib/systemd/system/sshd.service文件以及network-online.target文件相同的单元。使用这个额外目标,sshd在网络接口激活并分配了 IP 地址后启动。这确保sshd可以绑定到所有 IP 地址。对文件名使用
<name>.<unit_type>.conf.j2约定。例如,要为sshd.service单元添加一个置入文件,您必须将文件命名为sshd.service.conf.j2。将文件与 playbook 放在同一个目录中。创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
systemd_dropins: <list_of_files>- 指定要以 YAML 列表格式部署的置入文件的名称。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.systemd/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证角色是否将置入文件放在了正确的位置:
ansible managed-node-01.example.com -m command -a 'ls /etc/systemd/system/sshd.service.d/' 99-override.conf
# ansible managed-node-01.example.com -m command -a 'ls /etc/systemd/system/sshd.service.d/' 99-override.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
27.3. 使用 systemd RHEL 系统角色部署 systemd 单元 复制链接链接已复制到粘贴板!
您可以为自定义应用程序创建单元文件,systemd 从 /etc/systemd/system/ 目录中读取这些文件。通过使用 systemd RHEL 系统角色,您可以自动部署自定义单元文件。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
使用自定义 systemd 单元文件内容创建一个 Jinja2 模板。例如,使用服务的内容创建
~/example.service.j2文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对文件名使用
<name>.<unit_type>.j2约定。例如,要创建example.service单元,您必须将文件命名为example.service.j2。将文件与 playbook 放在同一个目录中。创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.systemd/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证该服务是否已启用并启动:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
27.4. 使用 systemd RHEL 系统角色部署 systemd 用户单元 复制链接链接已复制到粘贴板!
您可以为自定义应用程序创建每个用户的单元文件,systemd 从 /home/<username>/.config/systemd/user/ 目录读取这些文件。通过使用 systemd RHEL 系统角色,您可以为单个用户自动部署自定义单元文件。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 - 您在 playbook 中为 systemd 单元指定的用户已存在。
流程
使用自定义 systemd 单元文件内容创建一个 Jinja2 模板。例如,使用服务的内容创建
~/example.service.j2文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对文件名使用
<name>.<unit_type>.j2约定。例如,要创建example.service单元,您必须将文件命名为example.service.j2。将文件与 playbook 放在同一个目录中。创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要systemdRHEL 系统角色不会创建新用户,如果您在 playbook 中指定了一个不存在的用户,则它会返回一个错误。有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.systemd/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证该服务是否已启用并启动:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 28 章 使用 RHEL 系统角色配置时间同步 复制链接链接已复制到粘贴板!
Network Time Protocol(NTP)和 Precision Time Protocol (PTP)是通过网络同步计算机时钟的标准。网络中准确的时间同步非常重要,因为某些服务依赖它。例如,Kerberos 只容许服务器和客户端之间很少的时间差异,以防止重播攻击。
您可以在 playbook 的 timesync_ntp_provider 变量中设置要配置的时间服务。如果没有设置此变量,角色会根据以下因素决定时间服务:
-
在 RHEL 8 及更新版本上:
chronyd -
在 RHEL 6 和 7 上:
chronyd(默认)或者如果已安装了ntpd。
28.1. 使用 timesync RHEL 系统角色配置通过 NTP 的时间同步 复制链接链接已复制到粘贴板!
Network Time Protocol(NTP)通过网络,将主机的时间与 NTP 服务器同步。在 IT 网络中,服务依赖于正确的系统时间,例如,出于安全和日志记录目的。通过使用 timesync RHEL 系统角色,您可以在网络中自动配置 Red Hat Enterprise Linux NTP 客户端,并保持时间同步。
timesync RHEL 系统角色在受管主机上替换了指定的或检测到的提供商服务的配置。因此,如果没有在 playbook 中指定,所有设置都会丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
pool: <yes|no>- 将源标记为 NTP 池,而不是单个主机。在这种情况下,服务预期名称解析为可能会随时间变化的多个 IP 地址。
iburst: yes- 启用快速初始同步。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.timesync/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示时间源的详情:
如果受管节点运行
chronyd服务,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果受管节点运行
ntpd服务,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
28.2. 使用 timesync RHEL 系统角色,通过 NTP 配置与 NTS 的时间同步 复制链接链接已复制到粘贴板!
Network Time Protocol(NTP)通过网络,将主机的时间与 NTP 服务器同步。通过使用 Network Time Security (NTS)机制,客户端建立到服务器的 TLS 加密连接,并验证 NTP 数据包。在 IT 网络中,服务依赖于正确的系统时间,例如,出于安全和日志记录目的。通过使用 timesync RHEL 系统角色,您可以在网络中自动配置 Red Hat Enterprise Linux NTP 客户端,并保持通过 NTS 的时间同步。
请注意,您不能将 NTS 服务器与非 NTS 服务器混合使用。在混合配置中,NTS 服务器是可信的,客户端不会回退到未经身份验证的 NTP 源,因为它们可能被中间人(MITM)攻击所利用。详情请查看您系统上 chrony.conf (5) 手册页中的 authselectmode 参数描述。
timesync RHEL 系统角色在受管主机上替换了指定的或检测到的提供商服务的配置。因此,如果没有在 playbook 中指定,所有设置都会丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 -
受管节点使用
chronyd。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
iburst: yes- 启用快速初始同步。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.timesync/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
如果受管节点运行
chronyd服务:显示时间源的详情:
ansible managed-node-01.example.com -m command -a 'chronyc sources' MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* ptbtime1.ptb.de 1 6 17 55 -13us[ -54us] +/- 12ms ^- ptbtime2.ptb.de 1 6 17 56 -257us[ -297us] +/- 12ms
# ansible managed-node-01.example.com -m command -a 'chronyc sources' MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* ptbtime1.ptb.de 1 6 17 55 -13us[ -54us] +/- 12ms ^- ptbtime2.ptb.de 1 6 17 56 -257us[ -297us] +/- 12msCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于启用了 NTS 的源,显示特定于 NTP 源身份验证的信息:
ansible managed-node-01.example.com -m command -a 'chronyc -N authdata' Name/IP address Mode KeyID Type KLen Last Atmp NAK Cook CLen ========================================================================= ptbtime1.ptb.de NTS 1 15 256 229 0 0 8 100 ptbtime2.ptb.de NTS 1 15 256 230 0 0 8 100
# ansible managed-node-01.example.com -m command -a 'chronyc -N authdata' Name/IP address Mode KeyID Type KLen Last Atmp NAK Cook CLen ========================================================================= ptbtime1.ptb.de NTS 1 15 256 229 0 0 8 100 ptbtime2.ptb.de NTS 1 15 256 230 0 0 8 100Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
Cook列中报告的 cookies 是否大于 0。
如果受管节点运行
ntpd服务,请输入:ansible managed-node-01.example.com -m command -a 'ntpq -p' remote refid st t when poll reach delay offset jitter ============================================================================== *ptbtime1.ptb.de .PTB. 1 8 2 64 77 23.585 967.902 0.684 -ptbtime2.ptb.de .PTB. 1 8 30 64 78 24.653 993.937 0.765# ansible managed-node-01.example.com -m command -a 'ntpq -p' remote refid st t when poll reach delay offset jitter ============================================================================== *ptbtime1.ptb.de .PTB. 1 8 2 64 77 23.585 967.902 0.684 -ptbtime2.ptb.de .PTB. 1 8 30 64 78 24.653 993.937 0.765Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 29 章 使用 RHEL 系统角色配置系统以进行会话记录 复制链接链接已复制到粘贴板!
使用 tlog RHEL 系统角色以自动的方式记录和监控受管节点上的终端会话活动。您可以使用 SSSD 服务将记录配置为为每个用户或用户组进行。
在 tlog RHEL 系统角色中记录解决方案的会话由以下组件组成:
-
tlog工具 - 系统安全性服务守护进程(SSSD)
- 可选: Web 控制台界面
29.1. 使用 tlog RHEL 系统角色为单个用户配置会话记录 复制链接链接已复制到粘贴板!
准备并应用一个 Ansible playbook 来配置 RHEL 系统,以便将记录数据的会话记录到 systemd 日志中。
因此,您可以在用户会话期间、登录到控制台中或通过 SSH 时,启用记录特定用户的终端输出和输入。
playbook 安装 tlog-rec-session,一个终端会话 I/O 日志记录程序,其充当用户的登录 shell。角色创建一个 SSSD 配置丢弃文件,此文件定义登录 shell 应用于哪些用户和组。另外,如果系统上安装了 cockpit 软件包,playbook 也会安装 cockpit-session-recording 软件包,它是一个 Cockpit 模块,供您在 web 控制台界面中查看和播放记录。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow tlog_scope_sssd: <value>-
一些值指定只记录某些用户和组,而不是all或none。 tlog_users_sssd: <list_of_users>- 您要记录会话的用户的 YAML 列表。请注意,如果不存在,角色不会添加用户。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查 SSSD 置入文件的内容:
cat /etc/sssd/conf.d/sssd-session-recording.conf
# cat /etc/sssd/conf.d/sssd-session-recording.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以看到该文件包含您在 playbook 中设置的参数。
- 以其会话将被记录的用户的身份登录,执行某些操作,然后退出。
以
root用户身份:显示记录的会话的列表:
journalctl _COMM=tlog-rec-sessio Nov 12 09:17:30 managed-node-01.example.com -tlog-rec-session[1546]: {"ver":"2.3","host":"managed-node-01.example.com","rec":"07418f2b0f334c1696c10cbe6f6f31a6-60a-e4a2","user":"demo-user",... ...# journalctl _COMM=tlog-rec-sessio Nov 12 09:17:30 managed-node-01.example.com -tlog-rec-session[1546]: {"ver":"2.3","host":"managed-node-01.example.com","rec":"07418f2b0f334c1696c10cbe6f6f31a6-60a-e4a2","user":"demo-user",... ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下一步需要
rec(记录 ID)字段的值。请注意,由于 15 个字符的限制,
_COMM字段的值被缩短了。回放会话:
tlog-play -r journal -M TLOG_REC=<recording_id>
# tlog-play -r journal -M TLOG_REC=<recording_id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
29.2. 使用 tlog RHEL 系统角色将某些用户和组从会话记录中排除 复制链接链接已复制到粘贴板!
您可以使用 tlog RHEL 系统角色中的 tlog_exclude_users_sssd 和 tlog_exclude_groups_sssd 角色变量将用户或组从记录的会话中排除,并记录在 systemd 日志中。
playbook 安装 tlog-rec-session,一个终端会话 I/O 日志记录程序,其充当用户的登录 shell。角色创建一个 SSSD 配置丢弃文件,此文件定义登录 shell 应用于哪些用户和组。另外,如果系统上安装了 cockpit 软件包,playbook 也会安装 cockpit-session-recording 软件包,它是一个 Cockpit 模块,供您在 web 控制台界面中查看和播放记录。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow tlog_scope_sssd: <value>-
值
all指定您要记录所有用户和组。 tlog_exclude_users_sssd: <user_list>- 您要从会话记录中排除的用户的 YAML 列表。
tlog_exclude_groups_sssd: <group_list>您要从会话记录中排除的组的 YAML 列表。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.tlog/README.md文件。
验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查 SSSD 置入文件的内容:
cat /etc/sssd/conf.d/sssd-session-recording.conf
# cat /etc/sssd/conf.d/sssd-session-recording.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以看到该文件包含您在 playbook 中设置的参数。
- 以其会话将被记录的用户的身份登录,执行某些操作,然后退出。
以
root用户身份:显示记录的会话的列表:
journalctl _COMM=tlog-rec-sessio Nov 12 09:17:30 managed-node-01.example.com -tlog-rec-session[1546]: {"ver":"2.3","host":"managed-node-01.example.com","rec":"07418f2b0f334c1696c10cbe6f6f31a6-60a-e4a2","user":"demo-user",... ...# journalctl _COMM=tlog-rec-sessio Nov 12 09:17:30 managed-node-01.example.com -tlog-rec-session[1546]: {"ver":"2.3","host":"managed-node-01.example.com","rec":"07418f2b0f334c1696c10cbe6f6f31a6-60a-e4a2","user":"demo-user",... ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下一步需要
rec(记录 ID)字段的值。请注意,由于 15 个字符的限制,
_COMM字段的值被缩短了。回放会话:
tlog-play -r journal -M TLOG_REC=<recording_id>
# tlog-play -r journal -M TLOG_REC=<recording_id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 30 章 使用 RHEL 系统角色配置 IPsec VPN 连接 复制链接链接已复制到粘贴板!
VPN 是一个加密连接,用于通过不受信任的网络安全地传输流量。通过使用 vpn RHEL 系统角色,您可以自动化创建 VPN 配置的过程。
vpn RHEL 系统角色只支持 Libreswan (其是一个 IPsec 实现)作为 VPN 提供者。
30.1. 使用 vpn RHEL 系统角色使用 PSK 身份验证配置 IPsec 主机到主机的 VPN 复制链接链接已复制到粘贴板!
您可以使用 IPsec ,通过 VPN 直接将主机互联。主机可以使用预共享密钥(PSK)进行相互验证。通过使用 vpn RHEL 系统角色,您可以自动化创建带有 PSK 身份验证的 IPsec 主机到主机连接的过程。
默认情况下,角色创建一个基于隧道的 VPN。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
hosts: <list>定义一个 YAML 字典,其中包含您想要在它们之间配置 VPN 的主机。如果条目不是一个 Ansible 管理的节点,则您必须在
hostname参数中指定其完全限定域名(FQDN)或 IP 地址,例如:... - hosts: ... external-host.example.com: hostname: 192.0.2.1... - hosts: ... external-host.example.com: hostname: 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 角色在每个受管节点上配置 VPN 连接。连接被命名为
<host_A>-to-<host_B>,例如managed-node-01.example.com-to-managed-node-02.example.com。请注意,角色不能在外部(未管理的)节点上配置 Libreswan。您必须在这些主机上手动创建配置。auth_method: psk-
在主机之间启用 PSK 身份验证。角色在控制节点上使用
openssl来创建 PSK。 auto: <start-up_method>-
指定连接的启动方法。有效值是
add、ondemand、start和ignore。详情请查看安装了 Libreswan 的系统上的ipsec.conf (5)手册页。此变量的默认值为 null,这意味着没有自动启动操作。 vpn_manage_firewall: true-
定义角色在受管节点上的
firewalld服务中打开所需的端口。 vpn_manage_selinux: true- 定义角色在 IPsec 端口上设置所需的 SELinux 端口类型。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认连接已成功启动,例如:
ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"' ... 006 #3: "managed-node-01.example.com-to-managed-node-02.example.com", type=ESP, add_time=1741857153, inBytes=38622, outBytes=324626, maxBytes=2^63B, id='@managed-node-02.example.com'
# ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"' ... 006 #3: "managed-node-01.example.com-to-managed-node-02.example.com", type=ESP, add_time=1741857153, inBytes=38622, outBytes=324626, maxBytes=2^63B, id='@managed-node-02.example.com'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,只有在 VPN 连接活跃时,这个命令才会成功。如果将 playbook 中的
auto变量设置为start以外的值,您可能需要首先手动激活受管节点上的连接。
您可以使用 IPsec ,通过 VPN 直接将主机互联。例如,要通过最大程度减少被截获或破坏的控制消息的风险来增强安全性,您可以为数据流量和控制流量配置单独的连接。通过使用 vpn RHEL 系统角色,您可以自动化创建带有单独的数据和控制平面及 PSK 身份验证的 IPsec 主机到主机连接的过程。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
hosts: <list>定义一个 YAML 字典,其中包含您想要在它们之间配置 VPN 的主机。连接被命名为
<name>-<IP_address_A>-to-<IP_address_B>,例如control_plane_vpn-203.0.113.1-to-198.51.100.2。角色在每个受管节点上配置 VPN 连接。请注意,角色不能在外部(未管理的)节点上配置 Libreswan。您必须在这些主机上手动创建配置。
auth_method: psk-
在主机之间启用 PSK 身份验证。角色在控制节点上使用
openssl来创建预共享密钥。 auto: <start-up_method>-
指定连接的启动方法。有效值是
add、ondemand、start和ignore。详情请查看安装了 Libreswan 的系统上的ipsec.conf (5)手册页。此变量的默认值为 null,这意味着没有自动启动操作。 vpn_manage_firewall: true-
定义角色在受管节点上的
firewalld服务中打开所需的端口。 vpn_manage_selinux: true- 定义角色在 IPsec 端口上设置所需的 SELinux 端口类型。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认连接已成功启动,例如:
ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"' ... 006 #3: "control_plane_vpn-203.0.113.1-to-198.51.100.2", type=ESP, add_time=1741860073, inBytes=0, outBytes=0, maxBytes=2^63B, id='198.51.100.2'
# ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"' ... 006 #3: "control_plane_vpn-203.0.113.1-to-198.51.100.2", type=ESP, add_time=1741860073, inBytes=0, outBytes=0, maxBytes=2^63B, id='198.51.100.2'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,只有在 VPN 连接活跃时,这个命令才会成功。如果将 playbook 中的
auto变量设置为start以外的值,您可能需要首先手动激活受管节点上的连接。
30.3. 使用 vpn RHEL 系统角色使用基于证书的身份验证配置 IPsec 网格 VPN 复制链接链接已复制到粘贴板!
Libreswan 支持创建一个机会网格,以便在每个主机上带有单个配置的大量主机之间建立 IPsec 连接。将主机添加到网格中不需要更新现有主机上的配置。为提高安全性,请在 Libreswan 中使用基于证书的身份验证。
通过使用 vpn RHEL 系统角色,您可以在受管节点之间自动化配置带有基于证书的身份验证的 VPN 网格。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 您可以为每个受管节点准备一个 PKCS #12 文件:
每个文件包含:
- 证书颁发机构(CA)证书
- 节点的私钥
- 节点的客户端证书
-
文件被命名为
<managed_node_name_as_in_the_inventory>.p12。 - 文件存储在与 playbook 相同的目录中。
流程
编辑
~/inventory文件,并附加cert_name变量:managed-node-01.example.com cert_name=managed-node-01.example.com managed-node-02.example.com cert_name=managed-node-02.example.com managed-node-03.example.com cert_name=managed-node-03.example.com
managed-node-01.example.com cert_name=managed-node-01.example.com managed-node-02.example.com cert_name=managed-node-02.example.com managed-node-03.example.com cert_name=managed-node-03.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
cert_name变量设置为每个主机的证书中使用的通用名称(CN)字段的值。通常,CN 字段被设置为完全限定域名(FQDN)。将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create命令打开编辑器后,以<key>: <value>格式输入敏感数据:pkcs12_pwd: <password>
pkcs12_pwd: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
opportunistic: true-
在多个主机之间启用机会网格。
policies变量定义哪些子网和主机流量必须或可以加密,它们中哪些应该继续使用明文连接。 auth_method: cert- 启用基于证书的身份验证。这要求您在清单中指定每个受管节点的证书的昵称。
policies: <list_of_policies>以 YAML 列表格式定义 Libreswan 策略。
默认策略是
private-or-clear。要将它改为private,上面的 playbook 包含默认cidr条目的一个相应策略。如果 Ansible 控制节点与受管节点在同一个 IP 子网中,要防止执行 playbook 期间丢失 SSH 连接,请为控制节点的 IP 地址添加一个
clear策略。例如,如果应该为192.0.2.0/24子网配置网格,并且控制节点使用 IP 地址192.0.2.1,则您需要一个用于192.0.2.1/32的clear策略,如 playbook 中所示。有关策略的详情,请查看安装了 Libreswan 的系统上的
ipsec.conf (5)手册页。vpn_manage_firewall: true-
定义角色在受管节点上的
firewalld服务中打开所需的端口。 vpn_manage_selinux: true- 定义角色在 IPsec 端口上设置所需的 SELinux 端口类型。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在网格的一个节点上,ping 另一个节点来激活连接:
ping managed-node-02.example.com
[root@managed-node-01]# ping managed-node-02.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确认连接是否处于活跃状态:
ipsec trafficstatus 006 #2: "private#192.0.2.0/24"[1] ...192.0.2.2, type=ESP, add_time=1741938929, inBytes=372408, outBytes=545728, maxBytes=2^63B, id='CN=managed-node-02.example.com'
[root@managed-node-01]# ipsec trafficstatus 006 #2: "private#192.0.2.0/24"[1] ...192.0.2.2, type=ESP, add_time=1741938929, inBytes=372408, outBytes=545728, maxBytes=2^63B, id='CN=managed-node-02.example.com'Copy to Clipboard Copied! Toggle word wrap Toggle overflow