Menu Close
Settings Close

Language and Page Formatting Options

使用 RHEL 中的系统角色管理和配置任务

Red Hat Enterprise Linux 9

使用 Red Hat Ansible Automation Platform playbook 应用 RHEL 系统角色来执行系统管理任务

摘要

本文档论述了在 Red Hat Enterprise Linux 9 中使用 Ansible 配置系统角色。本文档侧重于:RHEL System Roles 是 Ansible 角色、模块和 playbook 的集合,它提供了一个稳定的、一致的配置界面来管理和配置 Red Hat Enterprise Linux。它们被设计为与多个 RHEL 9 主发行版本兼容。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。

  • 关于特定内容的简单评论:

    1. 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
    2. 用鼠标指针高亮显示您想评论的文本部分。
    3. 点在高亮文本上弹出的 Add Feedback
    4. 按照显示的步骤操作。
  • 要通过 Bugzilla 提交反馈,请创建一个新的问题单:

    1. 进入 Bugzilla 网站。
    2. 在 Component 中选择 Documentation
    3. Description 中输入您要提供的信息。包括文档相关部分的链接。
    4. Submit Bug

第 1 章 RHEL 系统角色入门

本节介绍 RHEL 系统角色是什么。另外,它介绍了如何通过 Ansible playbook 应用特定角色来执行各种系统管理任务。

1.1. RHEL 系统角色简介

RHEL 系统角色是 Ansible 角色和模块的集合。RHEL 系统角色提供了一个配置界面,用于远程管理多个 RHEL 系统。这个界面允许在多个 RHEL 版本间管理系统配置,以及处理新的主发行版本。

在 Red Hat Enterprise Linux 9 中,该接口目前由以下角色组成:

  • 证书问题和续订
  • 内核设置
  • 指标
  • 网络绑定磁盘加密客户端和网络 Bound 磁盘加密服务器
  • 网络
  • postfix
  • SSH 客户端
  • SSH 服务器
  • 系统范围加密策略
  • 终端会话记录

所有这些角色都由 AppStream 存储库中的 rhel-system-roles 软件包提供。

其他资源

1.2. RHEL 系统角色术语

您可以在本文档中找到以下术语:

Ansible playbook
Playbook 是 Ansible 的配置、部署和编配语言。它们可以描述您希望远程系统强制使用的策略,或者在一般的 IT 进程中选择一组步骤。
控制节点
安装了 Ansible 的任何机器。您可以从任何控制节点运行命令和 playbook,调用 /usr/bin/ansible 或 /usr/bin/ansible-playbook。您可以使用任意安装了 Python 的计算机作为控制节点 - 笔记本电脑、共享桌面和服务器都可以运行 Ansible。但是,您不能使用 Windows 机器作为控制节点。您可以拥有多个控制节点。
清单(Inventory)
受管节点列表。清单文件有时也称为"hostfile"。您的清单可以为每个受管节点指定像 IP 地址等信息。清单也可以管理受管节点,创建并嵌套组以更轻松地进行扩展。如需了解更多有关清单的信息,请参阅使用清单一 节。
受管节点
使用 Ansible 管理的网络设备、服务器或两者。受管节点有时也称为 "hosts(主机)"。Ansible 未安装到受管节点上。

1.3. 应用一个角色

以下流程描述了如何应用特定角色。

先决条件

  • 确保 rhel-system-roles 软件包安装在您要用作控制节点的系统上:

    # dnf install rhel-system-roles
    1. 安装 Ansible Core 软件包:

      # dnf install ansible-core

      Ansible Core 软件包提供了 ansible-playbook CLI、Ansible Vault 功能以及 RHEL Ansible 内容所需的基本模块和过滤器。

  • 确保您能够创建 Ansible 清单。

    清单表示主机、主机组,以及 Ansible playbook 使用的一些配置参数。

    playbook 通常为人类可读,并以 iniyamljson 和其他文件格式定义。

  • 确保您能够创建 Ansible playbook。

    Playbook 代表 Ansible 的配置、部署和编配语言。通过使用 playbook,您可以声明和管理远程机器的配置,部署多个远程机器,编配任何手动排序进程的步骤。

    playbook 是一个或多个 play 的列表。每个 play 都可以包括 Ansible 变量、任务或角色。

    playbook 是人类可读的,并以 yaml 格式定义。

流程

  1. 创建所需的包含您要管理的主机和组的 Ansible 清单。以下是一个使用名为 inventory.ini 的文件的示例,其包含一组名为 webservers 的主机:

    [webservers]
    host1
    host2
    host3
  2. 创建一个 Ansible playbook,包括所需角色。以下示例演示了如何通过 playbook 的 roles: 选项来使用角色:

    以下示例演示了如何通过角色( roles: 选项)来使用给定 play:

    ---
    - hosts: webservers
      roles:
    
         - rhel-system-roles.network
         - rhel-system-roles.postfix
    注意

    每个角色都包括 README 文件,该文件记录如何使用角色和支持的参数值。您还可以在角色的文档目录中找到特定角色的示例 playbook。这些文档目录默认由 rhel-system-roles 软件包提供,并可在以下位置找到:

    /usr/share/doc/rhel-system-roles/SUBSYSTEM/

    SUBSYSTEM 替换为所需角色的名称,如 postfix, metrics, network, tlog, 或 ssh

  3. 要在特定主机上执行 playbook,您必须执行以下一个操作:

    • 编辑 playbook ,以使用 hosts: host1[,host2,…​]hosts: all,并执行该命令:

      # ansible-playbook name.of.the.playbook
    • 编辑清单,以确保在组中定义了您要使用的主机,并执行命令:

      # ansible-playbook -i name.of.the.inventory name.of.the.playbook
    • 在执行 ansible-playbook 命令时指定所有主机:

      # ansible-playbook -i host1,host2,... name.of.the.playbook
      重要

      请注意,-i 标志指定所有可用主机的清单。如果您有多个目标主机,但希望选择其中一个运行 playbook 的主机,您可以在 playbook 中添加变量,以便能够选择主机。例如:

      Ansible Playbook | example-playbook.yml:
      
      
      - hosts: "{{ target_host }}"
        roles:
           - rhel-system-roles.network
           - rhel-system-roles.postfix

      Playbook 执行命令:

      # ansible-playbook -i host1,..hostn -e target_host=host5 example-playbook.yml

1.4. 其他资源



[1] 本文档会使用 rhel-system-roles 软件包自动安装。

第 2 章 安装 RHEL 系统角色

在开始使用系统角色前,您必须在您的系统中安装它。

2.1. 在系统中安装 RHEL 系统角色

要使用 RHEL 系统角色,请在系统中安装所需的软件包。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要用作控制节点的系统中安装了 Ansible 软件包。

流程

  1. 在您要用作控制节点的系统上安装 rhel-system-roles 软件包:

    # dnf install rhel-system-roles
  2. 安装 Ansible Core 软件包:

    # dnf install ansible-core

Ansible Core 软件包提供了 ansible-playbook CLI、Ansible Vault 功能以及 RHEL Ansible 内容所需的基本模块和过滤器。

因此,您可以创建一个 Ansible playbook。

其他资源

第 3 章 更新软件包以启用 RHEL 系统角色的自动化

从 RHEL 9.0 GA 发行版本中,Ansible Engine 不再被支持。相反,这个和将来的 RHEL 发行版本包括 Ansible Core。

您可以在 RHEL 9.0 GA 中使用 Ansible Core,以启用由红帽产品编写或生成的 Ansible 自动化内容。

Ansible Core 包含 Ansible 命令行工具,如 ansible-playbookansible 命令,以及一组小型内置 Ansible 插件

3.1. Ansible Engine 和 Ansible Core 之间的区别

在 RHEL 8.5 和更早版本中,您可以访问包含 Ansible Engine 2.9 的独立 Ansible 存储库,以便根据您的红帽系统启用自动化。

当在没有 Ansible 订阅的情况下使用 Ansible Engine 的支持范围时,仅限于运行由红帽产品创建或生成的 Ansible playbook,如 RHEL 系统角色、Insights 修复 playbook 和 OpenSCAP Ansible 修复 playbook。

在 RHEL 8.6 及更新版本版本中,Ansible Core 替换了 Ansible Engine。ansible-core 软件包包含在 RHEL 9 AppStream 存储库中,以启用红帽提供的自动化内容。RHEL 中对 Ansible Core 的支持范围与之前的 RHEL 版本相同:

  • 支持仅限于任何由红帽产品包括或生成的 Ansible playbook、角色、模块,如 RHEL 系统角色,或修复由 Insights 生成的 playbook。
  • 使用 Ansible Core,您可以获取支持的 RHEL Ansible 内容的所有功能,如 RHEL 系统角色和 Insights 修复 playbook。

RHEL 8.6 中仍可使用 Ansible Engine 软件仓库;但是,它不会接收任何安全或错误修复更新,且可能与 RHEL 8.6 及之后的版本中包含的 Ansible 自动化内容不兼容。

您需要一个 Ansible Automation Platform 订阅来支持底层平台和 Core-maintained 模块的额外支持。

3.2. 从 Ansible Engine 迁移到 Ansible Core

先决条件

  • 有对一个或多个受管节点(您要使用 RHEL 系统角色配置的系统)的访问权限。

    • 列出受管节点的清单文件。

流程

  1. 卸载 Ansible Engine:

    # dnf remove ansible
  2. 禁用 ansible-2-for-rhel-8-x86_64-rpms 存储库:

    # subscription-manager repos --disable ansible-2-for-rhel-8-x86_64-rpms
  3. 安装 Ansible Core,它包括在 RHEL 8 AppStream 存储库中:

    # dnf install ansible-core

验证

  • 检查您的系统中是否存在 ansible-core 软件包:

    # dnf info ansible-core

如果您的系统中确实存在 ansible-core 软件包,命令输出有关软件包名称、版本、发行版本、大小等信息:

Available Packages
Name         : ansible-core
Version      : 2.12.2
Release      : 1.fc34
Architecture : noarch
Size         : 2.4 M
Source       : ansible-core-2.12.2-1.fc34.src.rpm
Repository   : updates
Summary      : A radically simple IT automation system
URL          : http://ansible.com

第 4 章 安装和使用 Collections

4.1. Ansible Collections 简介

Ansible Collections 是一种发布、维护和使用自动化的新方法。通过组合多种类型的 Ansible 内容,如 playbook、角色、模块和插件,您可以从灵活性和可扩展性的改进中受益。

Ansible Collections 是传统 RHEL 系统角色格式的一个选项。以 Ansible Collection 格式使用 RHEL 系统角色与以传统 RHEL 系统角色格式使用它几乎相同。区别是 Ansible Collections 使用 完全限定集合名称 (FQCN)的概念,其由 名字空间集合名称 组成。我们使用的 名字空间redhat集合名称rhel_system_roles。因此,虽然 Kernel Settings 角色的传统 RHEL 系统角色格式显示为 rhel-system-roles.kernel_settings,而使用 Kernel Settings 角色的 Collection 完全限定集合名称 将显示为 redhat.rhel_system_roles.kernel_settings

名字空间集合名称 的组合确保对象是唯一的。它也确保对象在 Ansible Collections 和名字空间之间共享,且没有任何冲突。

其他资源

  • 要通过访问 Automation Hub 来使用红帽认证的集合,您必须有一个 Ansible Automation Platform(AAP 订阅)。

4.2. Collections 结构

Collections 是 Ansible 内容的软件包格式。数据结构如下:

  • docs/:集合的本地文档,以及示例(如果角色提供了文档)
  • galaxy.yml:将成为 Ansible Collection 软件包一部分的 MANIFEST.json 的源数据
  • playbooks/: playbook 位于此处

    • tasks/:包含用于 include_tasks/import_tasks 的"任务列表文件"
  • plugins/:此处提供所有 Ansible 插件和模块,各自位于其子目录中

    • modules/:Ansible 模块
    • modules_utils/:用于开发模块的通用代码
    • lookup/:搜索插件
    • filter/:Jinja2 过滤器插件
    • connection/:所需的连接插件(如果不使用默认的)
  • roles/:Ansible 角色的目录
  • test/:对集合的内容进行测试

4.3. 使用 CLI 安装 Collections

集合是 Ansible 内容的分发格式,可包含 playbook、角色、模块和插件。

您可以通过 Ansible Galaxy、浏览器或使用命令行来安装 Collections。

先决条件

  • 访问一个或多个 受管节点
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
    • 列出受管节点的清单文件。

流程

  • 通过 RPM 软件包安装集合:

    # dnf install rhel-system-roles

安装完成后,角色作为 redhat.rhel_system_roles.<role_name> 提供。另外,您可以在 /usr/share/ansible/collections/ansible_collections/redhat/rhel_system_roles/roles/<role_name>/README.md 找到每个角色的文档。

验证步骤

要验证 Collections 是否已成功安装,您可以在 localhost 上应用 kernel_settings:

  1. 将一个 tests_default.yml 复制到您的工作目录中。

    $ cp /usr/share/ansible/collections/ansible_collections/redhat/rhel_system_roles/tests/kernel_settings/tests_default.yml .
  2. 编辑文件,将"hosts: all"替换为"hosts: localhost",使 playbook 仅在本地系统上运行。
  3. 在检查模式下运行 ansible-playbook。这不会更改系统上的任何设置。

    $ ansible-playbook --check tests_default.yml

该命令返回值 failed=0

其他资源

  • ansible-playbook 手册页。

4.4. 从 Automation Hub 安装 Collections

如果使用 Automation Hub,您可以安装托管在 Automation Hub 上的 RHEL 系统角色集合。

先决条件

  • 访问一个或多个 受管节点
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
    • 列出受管节点的清单文件。

流程

  1. 定义 Red Hat Automation Hub 作为 ansible.cfg 配置文件中内容的默认源。请参阅 将 Red Hat Automation Hub 配置为内容的主源
  2. 从 Automation Hub 安装 redhat.rhel_system_roles 集合:

    # ansible-galaxy collection install redhat.rhel_system_roles

    安装完成后,角色作为 redhat.rhel_system_roles.<role_name> 提供。另外,您可以在 /usr/share/ansible/collections/ansible_collections/redhat/rhel_system_roles/roles/<role_name>/README.md 找到每个角色的文档。

验证步骤

要验证 Collections 是否已成功安装,您可以在 localhost 上应用 kernel_settings

  1. 将一个 tests_default.yml 复制到您的工作目录中。

    $ cp /usr/share/ansible/collections/ansible_collections/redhat/rhel_system_roles/tests/kernel_settings/tests_default.yml .
  2. 编辑文件,将"hosts: all"替换为"hosts: localhost",使 playbook 仅在本地系统上运行。
  3. 在检查模式下运行 ansible-playbook。这不会更改系统上的任何设置。

    $ ansible-playbook --check tests_default.yml

    您可以看到命令返回值 failed=0

其他资源

  • ansible-playbook 手册页。

4.5. 使用集合部署 Terminal Session Recording RHEL 系统角色

以下是一个使用 Collections 的示例,准备和应用 playbook,以便在一组单独计算机上部署日志解决方案。

先决条件

  • Galaxy 集合已安装。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    ---
    - name: Deploy session recording
      hosts: all
      vars:
        tlog_scope_sssd: some
        tlog_users_sssd:
          - recordeduser
    
      roles:
        - redhat.rhel-system-roles.tlog

    其中,

    • tlog_scope_sssd:

      • some 指定您只记录某些用户和组,而不是 allnone
    • tlog_users_sssd:

      • recorduser 指定您要记录其会话的用户。请注意,这不会为您添加用户。您必须自行设置该用户。
  2. 另外,还可以验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i IP_Address /path/to/file/playbook.yml -v

因此,playbook 会在您指定的系统中安装 Terminal Session Recording 角色。它还创建一个 SSSD 配置丢弃文件,可供您定义的用户和组使用。SSSD 解析并读取这些用户和组以便以 shell 用户身份覆盖 tlog 会话。另外,如果系统上安装了 cockpit 软件包,playbook 也会安装 cockpit-session-recording 软件包,它是一个 Cockpit 模块,供您在 web 控制台界面中查看和播放记录。

验证步骤

  1. 测试 /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.
  2. 验证系统是否向日志发送信息:

要验证 SSSD 配置文件是否在系统中创建了,请执行以下步骤:

  1. 进入创建 SSSD 配置丢弃文件的文件夹:

    # cd /etc/sssd/conf.d
  2. 检查文件内容:

    # cat sssd-session-recording.conf

您可以看到该文件包含您在 playbook 中设置的参数。

第 5 章 RHEL 中的 Ansible IPMI 模块

5.1. rhel_mgmt 集合

智能平台管理接口(IPMI)是一组标准协议的规范,用来与基板管理控制器(BMC)设备通信。IPMI 模块允许您启用和支持硬件管理自动化。IPMI 模块由以下产品提供:

  • rhel_mgmt Collection。软件包名称为 ansible-collection-redhat-rhel_mgmt
  • RHEL 8 AppStream,作为新 ansible-collection-redhat-rhel_mgmt 软件包的一部分。

rhel_mgmt 集合中提供以下 IPMI 模块:

  • ipmi_boot:引导设备顺序的管理
  • ipmi_power:机器的电源管理

用于 IPMI 模块的必要参数有:

  • ipmi_boot 参数:
模块名称描述

name

BMC 的主机名或 IP 地址

password

连接到 BMC 的密码

bootdev

在下次引导时使用的设备

* 网络

* 软盘

* 硬盘

* 安全

* 光盘

* 设置

* 默认

User

连接到 BMC 的用户名

  • ipmi_power 参数:
模块名称描述

name

BMC 主机名或 IP 地址

password

连接到 BMC 的密码

user

连接到 BMC 的用户名

状态

检查机器是否处于所需的状态

* 开

* 关

* 关闭

* 重置

* 启动

5.2. 使用 CLI 安装 rhel mgmt Collection

您可以使用命令行安装 rhel_mgmt Collection。

先决条件

  • ansible-core 软件包已安装 。

流程

  • 通过 RPM 软件包安装集合:

    # yum install ansible-collection-redhat-rhel_mgmt

    安装完成后,IPMI 模块位于 redhat.rhel_mgmt Ansible 集合中。

其他资源

  • ansible-playbook 手册页。

5.3. 使用 ipmi_boot 模块的示例

以下示例演示了如何在 playbook 中使用 ipmi_boot 模块来为下次引导设置引导设备。为了简单起见,示例使用与 Ansible 控制主机和受管主机相同的主机,从而在执行 playbook 的同一主机上执行模块。

先决条件

  • rhel_mgmt 集合已安装。
  • python3-pyghmi 软件包中的 pyghmi 库已安装在以下位置之一:

    • 执行 playbook 的主机。
    • 受管主机。如果您使用 localhost 作为受管主机,请在您要执行 playbook 的主机上安装 python3-pyghmi 软件包。
  • 您要控制的 IPMI BMC 可以从您执行 playbook 的主机访问,或从受管主机(如果不使用 localhost 作为受管主机)访问。请注意,其 BMC 由模块配置的主机通常与执行该模块的主机(Ansible 受管主机)不同,因为模块使用 IPMI 协议通过网络联系 BMC。
  • 您拥有使用适当访问级别访问 BMC 的凭证。

流程

  1. 创建包含以下内容的 playbook.yml 文件:

    ---
    - name: Sets which boot device will be used on next boot
      hosts: localhost
        tasks:
        - redhat.rhel_mgmt.ipmi_boot:
           name: bmc.host.example.com
             user: admin_user
             password: basics
             bootdev: hd
  2. 针对 localhost 执行 playbook:

    # ansible-playbook playbook.yml

因此,输出会返回值 "success"。

5.4. 使用 ipmi_power 模块的示例

本示例演示了如何在 playbook 中使用 ipmi_boot 模块来检查系统是否已开启。为了简单起见,示例使用与 Ansible 控制主机和受管主机相同的主机,从而在执行 playbook 的同一主机上执行模块。

先决条件

  • rhel_mgmt 集合已安装。
  • python3-pyghmi 软件包中的 pyghmi 库已安装在以下位置之一:

    • 执行 playbook 的主机。
    • 受管主机。如果您使用 localhost 作为受管主机,请在您要执行 playbook 的主机上安装 python3-pyghmi 软件包。
  • 您要控制的 IPMI BMC 可以从您执行 playbook 的主机访问,或从受管主机(如果不使用 localhost 作为受管主机)访问。请注意,其 BMC 由模块配置的主机通常与执行该模块的主机(Ansible 受管主机)不同,因为模块使用 IPMI 协议通过网络联系 BMC。
  • 您拥有使用适当访问级别访问 BMC 的凭证。

流程

  1. 创建包含以下内容的 playbook.yml 文件:

    ---
    - name: Turn the host on
      hosts: localhost
        tasks:
        - redhat.rhel_mgmt.ipmi_power:
           name: bmc.host.example.com
             user: admin_user
             password: basics
             state: on
  2. 执行 playbook:

    # ansible-playbook playbook.yml

输出返回值 "true"。

第 6 章 使用 Ansible 角色永久配置内核参数

您可以使用 Kernel Settings 角色一次在多个客户端上配置内核参数。这个解决方案:

  • 提供带有有效输入设置的友好接口。
  • 保留所有预期的内核参数。

从控制计算机运行 Kernel Settings 角色后,内核参数将立即应用于受管系统,并在重新启动后保留。

重要

请注意,通过 RHEL 频道提供的 RHEL 系统角色可在默认 AppStream 软件仓库中作为 RPM 软件包提供给 RHEL 客户。RHEL 系统角色还可以通过 Ansible Automation Hub 为客户提供 Ansible 订阅的集合。

6.1. 内核设置角色简介

RHEL System Roles(系统角色)是一组角色,为远程管理多个系统提供一致的配置接口。

RHEL 系统角色使用内核设置系统角色自动配置内核。rhel-system-roles 软件包包含这个系统角色以及参考文档。

要将内核参数以自动化方式应用到一个或多个系统,请在 playbook 中使用 System Roles 角色和您选择的一个或多个角色变量。playbook 是一个或多个人类可读的 play 的列表,采用 YAML 格式编写。

使用您可以配置的 Kernel Settings 角色:

  • 使用 kernel_settings_sysctl 角色变量的内核参数
  • 使用 kernel_settings_sysfs 角色变量的各种内核子系统、硬件设备和设备驱动程序
  • systemd 服务管理器的 CPU 相关性,并使用 kernel_settings_systemd_cpu_affinity 角色变量处理其分叉
  • 内核内存子系统使用 kernel_settings_transparent_hugepageskernel_settings_transparent_hugepages_defrag 角色变量透明巨页

其他资源

6.2. 使用 kernel Settings 角色应用所选内核参数

按照以下步骤准备并应用 Ansible playbook 来远程配置内核参数,从而对多个受管操作系统产生持久性。

先决条件

  • root 权限。
  • RHEL 订阅授权,您将在控制机器上安装 ansible-corerhel-system-roles 软件包。
  • 受管主机清单存在于控制计算机上,Ansible 能够连接它们。
重要

RHEL 8.0 - 8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook; 连接器,如 dockerpodman; 以及插件和模块的整个环境。有关如何获取并安装 Ansible Engine 的信息,请参阅如何下载和安装 Red Hat Ansible Engine?

RHEL 8.6 和 9.0 引入了 Ansible Core(以 ansible-core RPM 提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。AppStream 存储库提供 ansible-core,它的范围有限。如需更多信息,请参阅 RHEL 9 AppStream 中包含的 ansible-core 软件包的范围

步骤

  1. 另外,还可查看 清单(inventory)文件 :

    #  cat /home/jdoe/<ansible_project_name>/inventory
    [testingservers]
    pdoe@192.168.122.98
    fdoe@192.168.122.226
    
    [db-servers]
    db1.example.com
    db2.example.com
    
    [webservers]
    web1.example.com
    web2.example.com
    192.0.2.42

    该文件定义 [testingservers] 组和其他组。它允许您对特定的系统集合更有效地运行 Ansible。

  2. 创建配置文件来为 Ansible 操作设置默认值和特权升级。

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      #  vi /home/jdoe/<ansible_project_name>/ansible.cfg
    2. 将以下内容插入到文件中:

      [defaults]
      inventory = ./inventory
      
      [privilege_escalation]
      become = true
      become_method = sudo
      become_user = root
      become_ask_pass = true

      [defaults] 部分指定受管主机清单文件的路径。[privilege_escalation] 部分定义用户特权转移到指定受管主机上的 root。这对成功配置内核参数是必需的。运行 Ansible playbook 时,会提示您输入用户密码。用户在连接到受管主机后,通过 sudo 自动切换为 root

  3. 创建使用 Kernel Settings 角色的 Ansible playbook。

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      #  vi /home/jdoe/<ansible_project_name>/kernel-roles.yml

      此文件代表一个 playbook,通常包含了一组有特定顺序的任务(也称为 play )列表。这些任何会根据 inventory 文件中选择的特定管理主机进行。

    2. 将以下内容插入到文件中:

      ---
      -
        hosts: testingservers
        name: "Configure kernel settings"
        roles:
          - rhel-system-roles.kernel_settings
        vars:
          kernel_settings_sysctl:
            - name: fs.file-max
              value: 400000
            - name: kernel.threads-max
              value: 65536
          kernel_settings_sysfs:
            - name: /sys/class/net/lo/mtu
              value: 65000
          kernel_settings_transparent_hugepages: madvise

      name 键是可选的。它将一个任意字符串作为标签与该 play 关联,并确定该 play 的用途。Play 中的 hosts 键指定对其运行 play 的主机。此键的值或值可以作为被管理的主机的单独名称提供,也可以作为 inventory 文件中定义的一组主机提供。

      vars 部分代表包含所选内核参数名称和值的变量列表。

      roles 键指定系统角色将配置 vars 部分中提到的参数和值。

      注意

      您可以修改 playbook 中的内核参数及其值以符合您的需要。

  4. (可选)验证 play 中的语法是否正确。

    #  ansible-playbook --syntax-check kernel-roles.yml
    
    playbook: kernel-roles.yml

    本例演示了对 playbook 的成功验证。

  5. 执行 playbook。

    #  ansible-playbook kernel-roles.yml
    
    ...
    
    BECOME password:
    
    PLAY [Configure kernel settings] **********************************************************************************
    
    
    
    PLAY RECAP ********************************************************************************************************
    fdoe@192.168.122.226       : ok=10   changed=4    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0
    pdoe@192.168.122.98        : ok=10   changed=4    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0

    在 Ansible 运行 playbook 之前,会提示您输入密码,以便受管主机上的用户可以切换到 root,这在配置内核参数时是必需的。

    recap 部分显示 play 成功完成所有受管主机 (failed=0),并且已应用了 4 个内核参数 (changed=4)。

  6. 重启您的受管主机并检查受影响的内核参数,以验证是否应用了更改并在重启后保留。

其他资源

第 7 章 使用 RHEL 系统角色配置网络连接

网络 RHEL 系统角色可让管理员使用 Ansible 自动执行与网络相关的配置和管理任务。

7.1. 使用接口名称的 RHEL 系统角色配置静态以太网连接

此流程描述了如何使用网络 RHEL 系统角色通过运行 Ansible playbook 为 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

在 Ansible 控制节点上运行此步骤。

先决条件

  • ansible-corerhel-system-roles 软件包在控制节点上安装。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则此用户在受管节点上具有合适的 sudo 权限。
  • 主机使用 NetworkManager 配置网络。

步骤

  1. 如果 playbook 中要对其执行的主机还没有嵌套,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/ethernet-static-IP.yml playbook:

    ---
    - name: Configure an Ethernet connection with static IP
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: rhel-system-roles.network
    
        vars:
          network_connections:
            - name: enp7s0
              interface_name: enp7s0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 192.0.2.1/24
                  - 2001:db8:1::1/64
                gateway4: 192.0.2.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 192.0.2.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              state: up
  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/ethernet-static-IP.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/ethernet-static-IP.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md
  • ansible-playbook(1) 手册页

7.2. 使用设备路径的 RHEL 系统角色配置静态以太网连接

此流程描述了如何使用 RHEL 系统角色通过运行 Ansible playbook 为与特定设备匹配的设备远程添加带有静态 IP 地址的以太网连接。

您可以使用以下命令识别设备路径:

# udevadm info /sys/class/net/<device_name> | grep ID_PATH=

此流程会为与 PCI ID 0000:00:0[1-3].0 表达式匹配的设备(但不包括设置 0000:00:02.0)进行以下设置 :

  • 静态 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

在 Ansible 控制节点上运行此步骤。

先决条件

  • ansible-corerhel-system-roles 软件包在控制节点上安装。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则此用户在受管节点上具有合适的 sudo 权限。
  • 主机使用 NetworkManager 配置网络。

步骤

  1. 如果 playbook 中要对其执行的主机还没有嵌套,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/ethernet-dynamic-IP.yml playbook:

    ---
    - name: Configure an Ethernet connection with dynamic IP
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: rhel-system-roles.network
    
        vars:
          network_connections:
            - name: example
              match:
                path:
                  - pci-0000:00:0[1-3].0
                  - &!pci-0000:00:02.0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 192.0.2.1/24
                  - 2001:db8:1::1/64
                gateway4: 192.0.2.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 192.0.2.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              state: up

    本例中的 match 参数定义了,将 play 应用到与 PCI ID 0000:00:0[1-3].0 匹配的设备,但不包括 0000:00:02.0。有关可以使用的特殊修饰符和通配符的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件中的 match 参数描述。

  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/ethernet-dynamic-IP.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/ethernet-dynamic-IP.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件
  • ansible-playbook(1) 手册页

7.3. 使用接口名称的 RHEL 系统角色配置动态以太网连接

此流程描述了如何使用 RHEL 系统角色通过运行 Ansible playbook 来为 enp7s0 接口远程添加动态以太网连接。在这个设置中,网络连接从 DHCP 服务器请求这个连接的 IP 设置。在 Ansible 控制节点上运行此步骤。

先决条件

  • 网络中有 DHCP 服务器。
  • ansible-corerhel-system-roles 软件包在控制节点上安装。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则此用户在受管节点上具有合适的 sudo 权限。
  • 主机使用 NetworkManager 配置网络。

步骤

  1. 如果 playbook 中要对其执行的主机还没有嵌套,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/ethernet-dynamic-IP.yml playbook:

    ---
    - name: Configure an Ethernet connection with dynamic IP
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: rhel-system-roles.network
    
        vars:
          network_connections:
            - name: enp7s0
              interface_name: enp7s0
              type: ethernet
              autoconnect: yes
              ip:
                dhcp4: yes
                auto6: yes
              state: up
  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/ethernet-dynamic-IP.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/ethernet-dynamic-IP.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件
  • ansible-playbook(1) 手册页

7.4. 使用设备路径的 RHEL 系统角色配置动态以太网连接

此流程描述了如何使用 RHEL 系统角色通过运行 Ansible playbook 为与特定设备路径匹配的设备远程添加动态以太网连接。使用动态 IP 设置时,网络连接会从 DHCP 服务器请求这个连接的 IP 设置。在 Ansible 控制节点上运行此步骤。

您可以使用以下命令识别设备路径:

# udevadm info /sys/class/net/<device_name> | grep ID_PATH=

先决条件

  • 网络中有 DHCP 服务器。
  • ansible-corerhel-system-roles 软件包在控制节点上安装。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则此用户在受管节点上具有合适的 sudo 权限。
  • 主机使用 NetworkManager 配置网络。

步骤

  1. 如果 playbook 中要对其执行的主机还没有嵌套,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/ethernet-dynamic-IP.yml playbook:

    ---
    - name: Configure an Ethernet connection with dynamic IP
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: rhel-system-roles.network
    
        vars:
          network_connections:
            - name: example
              match:
                path:
                  - pci-0000:00:0[1-3].0
                  - &!pci-0000:00:02.0
              type: ethernet
              autoconnect: yes
              ip:
                dhcp4: yes
                auto6: yes
              state: up

    本例中的 match 参数定义了,将 play 应用到与 PCI ID 0000:00:0[1-3].0 匹配的设备,但不包括 0000:00:02.0。有关可以使用的特殊修饰符和通配符的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件中的 match 参数描述。

  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/ethernet-dynamic-IP.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/ethernet-dynamic-IP.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件
  • ansible-playbook(1) 手册页

7.5. 使用 RHEL 系统角色配置 VLAN 标记

您可以使用网络 RHEL 系统角色配置 VLAN 标记。这个流程描述了如何在这个以太网连接之上添加以太网连接 ID 为 10 的 VLAN 。作为子设备,VLAN 连接包含 IP、默认网关和 DNS 配置。

根据您的环境,相应地进行调整。例如:

  • 要在其他连接中将 VLAN 用作端口(如绑定),请省略 ip 属性,并在子配置中设置 IP 配置。
  • 若要在 VLAN 中使用 team、bridge 或 bond 设备,请调整您在 VLAN 中使用的端口的 interface_name类型 属性。

先决条件

  • ansible-corerhel-system-roles 软件包在控制节点上安装。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则此用户在受管节点上具有合适的 sudo 权限。

步骤

  1. 如果 playbook 中要对其执行的主机还没有嵌套,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/vlan-ethernet.yml playbook:

    ---
    - name: Configure a VLAN that uses an Ethernet connection
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: rhel-system-roles.network
    
        vars:
          network_connections:
            # Add an Ethernet profile for the underlying device of the VLAN
            - name: enp1s0
              type: ethernet
              interface_name: enp1s0
              autoconnect: yes
              state: up
              ip:
                dhcp4: no
                auto6: no
    
            # Define the VLAN profile
            - name: enp1s0.10
              type: vlan
              ip:
                address:
                  - "192.0.2.1/24"
                  - "2001:db8:1::1/64"
                gateway4: 192.0.2.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 192.0.2.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              vlan_id: 10
              parent: enp1s0
              state: up

    VLAN 配置文件中的 parent 属性将 VLAN 配置为在 enp1s0 设备之上运行。

  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/vlan-ethernet.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/vlan-ethernet.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件
  • ansible-playbook(1) 手册页

7.6. 使用 RHEL 系统角色配置网桥

您可以使用网络 RHEL 系统角色配置 Linux 网桥。这个流程描述了如何配置使用两个以太网设备的网桥,并设置 IPv4 和 IPv6 地址、默认网关和 DNS 配置。

注意

在网桥上设置 IP 配置,而不是在 Linux 网桥的端口上设置。

先决条件

  • ansible-corerhel-system-roles 软件包在控制节点上安装。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则此用户在受管节点上拥有合适的 sudo 权限。
  • 在服务器中安装两个或者两个以上物理或者虚拟网络设备。

步骤

  1. 如果您要在其上执行 playbook 中指令的主机还没有被列入清单,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/bridge-ethernet.yml playbook:

    ---
    - name: Configure a network bridge that uses two Ethernet ports
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: rhel-system-roles.network
    
        vars:
          network_connections:
            # Define the bridge profile
            - name: bridge0
              type: bridge
              interface_name: bridge0
              ip:
                address:
                  - "192.0.2.1/24"
                  - "2001:db8:1::1/64"
                gateway4: 192.0.2.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 192.0.2.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              state: up
    
            # Add an Ethernet profile to the bridge
            - name: bridge0-port1
              interface_name: enp7s0
              type: ethernet
              controller: bridge0
              port_type: bridge
              state: up
    
            # Add a second Ethernet profile to the bridge
            - name: bridge0-port2
              interface_name: enp8s0
              type: ethernet
              controller: bridge0
              port_type: bridge
              state: up
  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/bridge-ethernet.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/bridge-ethernet.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件
  • ansible-playbook(1) 手册页

7.7. 使用 RHEL 系统角色配置网络绑定

您可以使用网络 RHEL 系统角色配置网络绑定。这个步骤描述了如何在使用两个以太网设备的主动备份模式中配置绑定,并设置 IPv4 和 IPv6 地址、默认网关和 DNS 配置。

注意

在绑定上设置 IP 配置,而不是在 Linux 绑定的端口上设置。

先决条件

  • ansible-core 软件包和 rhel-system-roles 软件包安装在控制节点上。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则此用户在受管节点上具有合适的 sudo 权限。
  • 在服务器中安装两个或者两个以上物理或者虚拟网络设备。

步骤

  1. 如果 playbook 中要对其执行的主机还没有嵌套,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/bond-ethernet.yml playbook:

    ---
    - name: Configure a network bond that uses two Ethernet ports
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: rhel-system-roles.network
    
        vars:
          network_connections:
            # Define the bond profile
            - name: bond0
              type: bond
              interface_name: bond0
              ip:
                address:
                  - "192.0.2.1/24"
                  - "2001:db8:1::1/64"
                gateway4: 192.0.2.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 192.0.2.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              bond:
                mode: active-backup
              state: up
    
            # Add an Ethernet profile to the bond
            - name: bond0-port1
              interface_name: enp7s0
              type: ethernet
              controller: bond0
              state: up
    
            # Add a second Ethernet profile to the bond
            - name: bond0-port2
              interface_name: enp8s0
              type: ethernet
              controller: bond0
              state: up
  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/bond-ethernet.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/bond-ethernet.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件
  • ansible-playbook(1) 手册页

7.8. 使用 RHEL 系统角色通过 802.1X 网络身份验证配置静态以太网连接

使用网络 RHEL 系统角色,您可以自动创建使用 802.1X 标准验证客户端的以太网连接。此流程描述了如何通过运行 Ansible playbook 为 enp1s0 接口远程添加以下以太网连接配置:

  • 静态 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
  • 使用 TLS 可扩展身份验证协议(EAP)的 802.1X 网络身份验证.

在 Ansible 控制节点上运行此步骤。

先决条件

  • ansible-corerhel-system-roles 软件包在控制节点上安装。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则您必须在受管节点上具有合适的 sudo 权限。
  • 网络支持 802.1X 网络身份验证。
  • 受管节点使用 NetworkManager。
  • control 节点上存在 TLS 身份验证所需的以下文件:

    • 客户端密钥存储在 /srv/data/client.key 文件中。
    • 客户端证书存储在 /srv/data/client.crt 文件中。
    • 证书颁发机构(CA)证书存储在 /srv/data/ca.crt 文件中。

步骤

  1. 如果要在其上执行 playbook 中指令的主机还没有被列入清单,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/enable-802.1x.yml playbook:

    ---
    - name: Configure an Ethernet connection with 802.1X authentication
      hosts: node.example.com
      become: true
      tasks:
        - name: Copy client key for 802.1X authentication
          copy:
            src: "/srv/data/client.key"
            dest: "/etc/pki/tls/private/client.key"
            mode: 0600
    
        - name: Copy client certificate for 802.1X authentication
          copy:
            src: "/srv/data/client.crt"
            dest: "/etc/pki/tls/certs/client.crt"
    
        - name: Copy CA certificate for 802.1X authentication
          copy:
            src: "/srv/data/ca.crt"
            dest: "/etc/pki/ca-trust/source/anchors/ca.crt"
    
        - include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              - name: enp1s0
                type: ethernet
                autoconnect: yes
                ip:
                  address:
                    - 192.0.2.1/24
                    - 2001:db8:1::1/64
                  gateway4: 192.0.2.254
                  gateway6: 2001:db8:1::fffe
                  dns:
                    - 192.0.2.200
                    - 2001:db8:1::ffbb
                  dns_search:
                    - example.com
                ieee802_1x:
                  identity: user_name
                  eap: tls
                  private_key: "/etc/pki/tls/private/client.key"
                  private_key_password: "password"
                  client_cert: "/etc/pki/tls/certs/client.crt"
                  ca_cert: "/etc/pki/ca-trust/source/anchors/ca.crt"
                  domain_suffix_match: example.com
                state: up
  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/enable-802.1x.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/ethernet-static-IP.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件
  • /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件
  • ansible-playbook(1) 手册页

7.9. 使用系统角色在现有连接上设置默认网关

您可以使用网络 RHEL 系统角色设置默认网关。

重要

当您运行使用 Networking RHEL 系统角色的 play 时,如果设置的值与 play 中指定的名称不匹配,则系统角色会覆盖具有相同名称的连接配置集。因此,始终在剧本中指定网络连接配置文件的整个配置,即使 IP 配置已经存在。否则,角色会将这些值重置为默认值。

根据它是否已存在,流程使用如下设置创建或更新 enp1s0 连接配置文件:

  • 静态 IPv4 地址 - 198.51.100.20 ,子网掩码为 /24
  • 静态 IPv6 地址 - 2001:db8:1::1/64 子网掩码
  • IPv4 默认网关 - 198.51.100.254
  • IPv6 默认网关 - 2001:db8:1::fffe
  • IPv4 DNS 服务器 - 198.51.100.200
  • IPv6 DNS 服务器 - 2001:db8:1::ffbb
  • DNS 搜索域 - example.com

先决条件

  • ansible-corerhel-system-roles 软件包在控制节点上安装。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则此用户在受管节点上具有合适的 sudo 权限。

步骤

  1. 如果要在其上执行 playbook 中指令的主机还没有被列入清单,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/ethernet-connection.yml playbook:

    ---
    - name: Configure an Ethernet connection with static IP and default gateway
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: rhel-system-roles.network
    
        vars:
          network_connections:
            - name: enp1s0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 198.51.100.20/24
                  - 2001:db8:1::1/64
                gateway4: 198.51.100.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 198.51.100.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              state: up
  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/ethernet-connection.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/ethernet-connection.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md
  • ansible-playbook(1) 手册页

7.10. 使用 RHEL 系统角色配置静态路由

您可以使用网络 RHEL 系统角色配置静态路由。

重要

当您运行使用 Networking RHEL 系统角色的 play 时,如果设置的值与 play 中指定的名称不匹配,则系统角色会覆盖具有相同名称的连接配置集。因此,始终在剧本中指定网络连接配置文件的整个配置,即使 IP 配置已经存在。否则,角色会将这些值重置为默认值。

根据它是否已存在,流程使用以下设置创建或更新 enp7s0 连接配置文件:

  • 静态 IPv4 地址 - 198.51.100.20 ,子网掩码为 /24
  • 静态 IPv6 地址 - 2001:db8:1::1/64 子网掩码
  • IPv4 默认网关 - 198.51.100.254
  • IPv6 默认网关 - 2001:db8:1::fffe
  • IPv4 DNS 服务器 - 198.51.100.200
  • IPv6 DNS 服务器 - 2001:db8:1::ffbb
  • DNS 搜索域 - example.com
  • 静态路由:

    • 192.0.2.0/24,网关为 198.51.100.1
    • 203.0.113.0/24,网关为 198.51.100.2

先决条件

  • ansible-corerhel-system-roles 软件包在控制节点上安装。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则此用户在受管节点上具有合适的 sudo 权限。

步骤

  1. 如果要在其上执行 playbook 中指令的主机还没有被列入清单,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/add-static-routes.yml playbook:

    ---
    - name: Configure an Ethernet connection with static IP and additional routes
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: rhel-system-roles.network
    
        vars:
          network_connections:
            - name: enp7s0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 198.51.100.20/24
                  - 2001:db8:1::1/64
                gateway4: 198.51.100.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 198.51.100.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
                route:
                  - network: 192.0.2.0
                    prefix: 24
                    gateway: 198.51.100.1
                  - network: 203.0.113.0
                    prefix: 24
                    gateway: 198.51.100.2
              state: up
  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/add-static-routes.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/add-static-routes.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

验证步骤

  • 显示路由表:

    # ip -4 route
    default via 198.51.100.254 dev enp7s0 proto static metric 100
    192.0.2.0/24 via 198.51.100.1 dev enp7s0 proto static metric 100
    203.0.113.0/24 via 198.51.100.2 dev enp7s0 proto static metric 100
    ...

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件
  • ansible-playbook(1) 手册页

7.11. 使用 RHEL 系统角色设置 ethtool 功能

您可以使用网络 RHEL 系统角色配置 NetworkManager 连接的 ethtool 功能。

重要

当您运行使用 Networking RHEL 系统角色的 play 时,如果设置的值与 play 中指定的名称不匹配,则系统角色会覆盖具有相同名称的连接配置集。因此,始终在剧本中指定网络连接配置文件的整个配置,即使 IP 配置已经存在。否则,角色会将这些值重置为默认值。

根据它是否已存在,流程使用如下设置创建或更新 enp1s0 连接配置文件:

  • 静态 IPv4 地址 - 198.51.100.20 ,子网掩码为 /24
  • 静态 IPv6 地址 - 2001:db8:1::1 ,子网掩码为 /64
  • IPv4 默认网关 - 198.51.100.254
  • IPv6 默认网关 - 2001:db8:1::fffe
  • IPv4 DNS 服务器 - 198.51.100.200
  • IPv6 DNS 服务器 - 2001:db8:1::ffbb
  • DNS 搜索域 - example.com
  • ethtool 功能:

    • 通用接收卸载(GRO):禁用
    • 通用分段卸载(GSO):启用
    • TX 流控制传输协议(SCTP)段:禁用

先决条件

  • ansible-core 软件包和 rhel-system-roles 软件包安装在控制节点上。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则此用户在受管节点上具有合适的 sudo 权限。

步骤

  1. 如果要在其上执行 playbook 中指令的主机还没有被列入清单,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/configure-ethernet-device-with-ethtool-features.yml playbook:

    ---
    - name: Configure an Ethernet connection with ethtool features
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: rhel-system-roles.network
    
        vars:
          network_connections:
            - name: enp1s0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 198.51.100.20/24
                  - 2001:db8:1::1/64
                gateway4: 198.51.100.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 198.51.100.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              ethtool:
                features:
                  gro: "no"
                  gso: "yes"
                  tx_sctp_segmentation: "no"
              state: up
  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/configure-ethernet-device-with-ethtool-features.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/configure-ethernet-device-with-ethtool-features.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件
  • ansible-playbook(1) 手册页

7.12. 使用 RHEL 系统角色配置 ethtool coalesce 设置

您可以使用网络 RHEL 系统角色配置 NetworkManager 连接的 ethtool coalesce 设置。

重要

当您运行使用 Networking RHEL 系统角色的 play 时,如果设置的值与 play 中指定的名称不匹配,则系统角色会覆盖具有相同名称的连接配置集。因此,始终在剧本中指定网络连接配置文件的整个配置,即使 IP 配置已经存在。否则,角色会将这些值重置为默认值。

根据它是否已存在,流程使用如下设置创建或更新 enp1s0 连接配置文件:

  • 静态 IPv4 地址 - 198.51.100.20 ,子网掩码为 /24
  • 静态 IPv6 地址 - 2001:db8:1::1/64 子网掩码
  • IPv4 默认网关 - 198.51.100.254
  • IPv6 默认网关 - 2001:db8:1::fffe
  • IPv4 DNS 服务器 - 198.51.100.200
  • IPv6 DNS 服务器 - 2001:db8:1::ffbb
  • DNS 搜索域 - example.com
  • ethtool coalesce 设置:

    • RX 帧:128
    • TX 帧:128

先决条件

  • ansible-corerhel-system-roles 软件包在控制节点上安装。
  • 如果您在运行 playbook 时使用了与 root 不同的远程用户,则此用户在受管节点上具有合适的 sudo 权限。

步骤

  1. 如果要在其上执行 playbook 中指令的主机还没有被列入清单,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/configure-ethernet-device-with-ethtoolcoalesce-settings.yml playbook:

    ---
    - name: Configure an Ethernet connection with ethtool coalesce settings
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: rhel-system-roles.network
    
        vars:
          network_connections:
            - name: enp1s0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 198.51.100.20/24
                  - 2001:db8:1::1/64
                gateway4: 198.51.100.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 198.51.100.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              ethtool:
                coalesce:
                  rx_frames: 128
                  tx_frames: 128
              state: up
  3. 运行 playbook:

    • 要以 root 用户身份连接到受管主机,请输入:

      # ansible-playbook -u root ~/configure-ethernet-device-with-ethtoolcoalesce-settings.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/configure-ethernet-device-with-ethtoolcoalesce-settings.yml

      --ask-become-pass 选项可确保 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户的 sudo 密码。

    如果没有指定 -u user_name 选项,ansible-playbook 以当前登录到控制节点的用户身份连接到受管主机。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md
  • ansible-playbook(1) 手册页

第 8 章 系统角色中的 Postfix 角色变量

Postfix 角色变量允许用户安装、配置和启动 Postfix 邮件传输代理(MTA)。

本节中定义了以下角色变量:

  • postfix_conf:它包括所有支持的 Postfix 配置参数的键/值对。默认情况下,postfix_conf 没有值。
For example: `postfix_conf`:
              relayhost: "example.com"
  • postfix_check:它将确定启动 Postfix 之前是否执行了检查以验证配置更改。默认值为 true。
For example: `postfix_check: true`
  • postfix_backup :它将确定是否创建了配置的一个备份副本。默认情况下,postfix _backup 值为 false。

要覆盖以前的备份,请运行以下命令:

cp /etc/postfix/main.cf /etc/postfix/main.cf.backup

如果 postfix_backup 值更改为 true,则还必须将 postfix_backup_multiple 值设为 false。

For example: postfix_backup: true
              postfix_backup_multiple: false
  • postfix_backup_multiple:它决定角色是否会创建一个配置的时间戳备份副本。

要保留多个备份副本,请运行以下命令:

cp /etc/postfix/main.cf /etc/postfix/main.cf.$(date -Isec)

默认情况下,postfix _backup_multiple 的值为 true。postfix_backup_multiple:true 设置将覆盖 postfix_backup。如果要使用 postfix_backup,您必须设置 postfix_backup_multiple:false

重要

不能删除配置参数。在运行 Postfix 角色之前,请将 postfix_conf 设置为所有必需的配置参数,并使用文件模块来删除 /etc/postfix/main.cf

8.1. 其他资源

  • /usr/share/doc/rhel-system-roles/postfix/README.md

第 9 章 使用系统角色配置 SElinux

9.1. SELinux 系统角色简介

RHEL 系统角色是 Ansible 角色和模块的集合,可为远程管理多个 RHEL 系统提供一致的配置界面。SELinux 系统角色启用以下操作:

  • 清理与 SELinux 布尔值、文件上下文、端口和登录相关的本地策略修改。
  • 设置 SELinux 策略布尔值、文件上下文、端口和登录。
  • 在指定文件或目录中恢复文件上下文。
  • 管理 SELinux 模块。

下表提供了 SELinux 系统角色中可用的输入变量概述。

表 9.1. SELinux 系统角色变量

角色变量描述CLI 的替代方案

selinux_policy

选择保护目标进程或多级别安全保护的策略。

/etc/selinux/config中的 SELINUXTYPE

selinux_state

切换 SELinux 模式。

/etc/selinux/config 中的 setenforceSELINUX.

selinux_booleans

启用和禁用 SELinux 布尔值。

setsebool

selinux_fcontexts

添加或删除 SELinux 文件上下文映射。

semanage fcontext

selinux_restore_dirs

在文件系统树中恢复 SELinux 标签。

restorecon -R

selinux_ports

在端口上设置 SELinux 标签。

semanage port

selinux_logins

将用户设置为 SELinux 用户映射。

semanage login

selinux_modules

安装、启用、禁用或删除 SELinux 模块。

semodule

rhel-system-roles 软件包安装的 /usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml 示例 playbook 演示了如何在 enforcing 模式下设置目标策略。playbook 还应用多个本地策略修改,并在 /tmp/test_dir/ 目录中恢复文件上下文。

有关 SELinux 角色变量的详细参考,请安装 rhel-system-roles 软件包,并参阅 /usr/share/doc/rhel-system-roles/selinux/ 目录中的 README.mdREADME.html 文件。

其他资源

9.2. 使用 SELinux 系统角色在多个系统上应用 SELinux 设置

按照以下步骤,在已验证的 SELinux 设置中准备并应用 Ansible playbook。

先决条件

  • 对一个或多个 受管节点 的访问和权限,这些节点是您要使用 SELinux 系统角色进行配置的系统。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
    • 列出受管节点的清单文件。
重要

RHEL 8.0-8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook、连接器(如 dockerpodman )以及许多插件和模块。有关如何获取并安装 Ansible Engine 的详情,请参考如何下载并安装 Red Hat Ansible Engine 知识库文章。

RHEL 8.6 和 9.0 引入了 Ansible Core(作为 ansible-core 软件包提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。RHEL 通过 AppStream 软件仓库提供此软件包,它有一个有限的支持范围。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 及更新的 AppStream 软件仓库文档中的 Ansible Core 软件包的支持范围

  • 列出受管节点的清单文件。

流程

  1. 准备您的 playbook。您可以从头开始,或修改作为 rhel-system-roles 软件包的一部分安装的示例 playbook:

    # cp /usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml my-selinux-playbook.yml
    # vi my-selinux-playbook.yml
  2. 更改 playbook 的内容,使其适合您的场景。例如,以下部分确保系统安装并启用 selinux-local-1.pp SELinux 模块:

    selinux_modules:
    - { path: "selinux-local-1.pp", priority: "400" }
  3. 保存更改,然后退出文本编辑器。
  4. host1host2host3 系统上运行您的 playbook:

    # ansible-playbook -i host1,host2,host3 my-selinux-playbook.yml

其他资源

  • 如需更多信息,请安装 rhel-system-roles 软件包,并查看 /usr/share/doc/rhel-system-roles/selinux//usr/share/ansible/roles/rhel-system-roles.selinux/ 目录。

第 10 章 使用日志记录系统角色

作为系统管理员,您可以使用日志记录系统角色将 RHEL 主机配置为日志服务器,从很多客户端系统收集日志。

10.1. 日志系统角色

使用日志记录系统角色,您可以在本地和远程主机上部署日志配置。

要在一个或多个系统中应用日志记录系统角色,您可以在 playbook 中定义日志配置。playbook 是一个或多个 play 的列表。playbook 是人类可读的,它们采用 YAML 格式编写。如需有关 playbook 的更多信息,请参阅 Ansible 文档中的 使用 playbook

您要根据 playbook 配置的系统集合在 清单文件中 定义。如需有关创建和使用清单的更多信息,请参阅 Ansible 文档中的如何构建您的清单

日志记录解决方案提供多种读取日志和多个日志记录输出的方法。

例如,日志记录系统可接受以下输入:

  • 本地文件、
  • systemd/journal
  • 网络中的另一个日志记录系统。

另外,日志记录系统还可有以下输出:

  • 日志存储在 /var/log 目录中的本地文件中,
  • 日志被发送到 Elasticsearch ,
  • 日志被转发到另一个日志系统。

使用日志系统角色,您可以组合输入和输出以适合您的场景。例如,您可以配置一个日志解决方案,将来自 日志 的输入存储在本地文件中,而从文件读取的输入则被转发到另一个日志系统,并存储在本地日志文件中。

10.2. 日志记录系统角色参数

在日志系统角色 playbook 中,您可以在 logging_inputs 参数中定义输入,在 logging_outputs 参数中定义输出,以及在 logging_flows 参数中定义输入和输出之间的关系。Logging 系统角色使用附加选项处理这些变量来配置日志记录系统。您还可以启用加密。

注意

目前,日志记录系统角色中唯一可用的日志记录系统是 Rsyslog

  • logging_inputs :日志解决方案的输入列表。

    • name :输入的唯一名称。用于 logging_flows : 输入列表以及生成的 config 文件名称的一部分。
    • type :输入元素的类型。type 指定与 roles/rsyslog/{tasks,vars}/inputs/ 中的目录名称相对应的任务类型。

      • basics :输入配置 systemd 日志或 unix 套接字的输入。

        • kernel_message :如果设为 true,则加载 imklog。默认值为 false
        • use_imuxsock:使用 imuxsock,而不是 imjournal。默认值为 false
        • ratelimit_burst:可以在 ratelimit_interval 内发出的最大消息数。如果 use_imuxsock 为 false,则默认为 20000。如果 use_imuxsock 为 true,则默认为 200
        • ratelimit_interval :评估 ratelimit_burst 的时间间隔。如果 use_imuxsock 为 false,则默认为 600 秒。如果 use_imuxsock 为 true,则默认为 0。0 表示关闭速率限制。
        • persist_state_interval :日志状态会保留每个 value 消息。默认为 10。仅在 use_imuxsock 为 false 时有效。
      • files :配置本地文件输入的输入。
      • remote :配置通过网络的其他日志系统输入的输入。
    • state :配置文件的状态。presentabsent。默认为 present
  • logging_outputs :日志解决方案的输出列表。

    • files :配置输出到本地文件的输出。
    • forwards :配置输出到另一个日志系统的输出。
    • remote_files :将另一个日志系统的输出配置到本地文件的输出。
  • logging_flows :定义 logging_inputslogging_outputs 之间关系的流列表。logging_flows 变量具有以下键:

    • name :流的唯一名称
    • inputslogging_inputs 名称值的列表
    • outputs:logging_outputs 名称值的列表。

其他资源

  • rhel-system-roles 软件包一起安装的文档在 /usr/share/ansible/roles/rhel-system-roles.logging/README.html

10.3. 应用本地日志记录系统角色

按照以下步骤准备和应用 Ansible playbook,在一组单独机器上配置日志解决方案。每台机器都会在本地记录日志。

先决条件

  • 对一个或多个 受管节点 的访问和权限,这些节点是您要使用日志系统角色配置的系统。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
重要

RHEL 8.0-8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook、连接器(如 dockerpodman )以及许多插件和模块。有关如何获取并安装 Ansible Engine 的详情,请参考如何下载并安装 Red Hat Ansible Engine 知识库文章。

RHEL 8.6 和 9.0 引入了 Ansible Core(作为 ansible-core 软件包提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。RHEL 通过 AppStream 软件仓库提供此软件包,它有一个有限的支持范围。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 及更新的 AppStream 软件仓库文档中的 Ansible Core 软件包的支持范围

  • 列出受管节点的清单文件。
注意

您不必安装 rsyslog 软件包,因为在部署时系统角色会安装 rsyslog

流程

  1. 创建定义所需角色的 playbook:

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      # vi logging-playbook.yml
    2. 插入以下内容:

      ---
      - name: Deploying basics input and implicit files output
        hosts: all
        roles:
          - rhel-system-roles.logging
        vars:
          logging_inputs:
            - name: system_input
              type: basics
          logging_outputs:
            - name: files_output
              type: files
          logging_flows:
            - name: flow1
              inputs: [system_input]
              outputs: [files_output]
  2. 对特定清单运行 playbook:

    # ansible-playbook -i inventory-file /path/to/file/logging-playbook.yml

    其中:

    • inventory-file 是清单文件。
    • logging-playbook.yml 是您使用的 playbook。

验证

  1. 测试 /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.
  2. 验证系统是否向日志发送信息:

    1. 发送测试信息:

      # logger test
    2. 查看 /var/log/messages 日志,例如:

      # cat /var/log/messages
      Aug  5 13:48:31 hostname root[6778]: test

      其中 'hostname' 是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为 root

10.4. 过滤本地日志系统角色中的日志

您可以部署一个日志解决方案,该方案基于 rsyslog 属性的过滤器过滤日志。

先决条件

  • 对一个或多个 受管节点 的访问和权限,这些节点是您要使用日志系统角色配置的系统。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • 安装了 Red Hat Ansible Core
    • rhel-system-roles 软件包已安装
    • 列出受管节点的清单文件。
注意

您不必安装 rsyslog 软件包,因为系统管理员在部署时会安装 rsyslog

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    ---
    - name: Deploying files input and configured files output
      hosts: all
      roles:
        - linux-system-roles.logging
      vars:
        logging_inputs:
          - name: files_input
            type: basics
        logging_outputs:
          - name: files_output0
            type: files
            property: msg
            property_op: contains
            property_value: error
            path: /var/log/errors.log
          - name: files_output1
            type: files
            property: msg
            property_op: "!contains"
            property_value: error
            path: /var/log/others.log
        logging_flows:
          - name: flow0
            inputs: [files_input]
            outputs: [files_output0, files_output1]

    使用这个配置,包含 error 字符串的所有消息都会记录在 /var/log/errors.log 中,所有其他消息都记录在 /var/log/others.log 中。

    您可以将 error 属性值替换为您要过滤的字符串。

    您可以根据您的偏好修改变量。

  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file /path/to/file/playbook.yml

验证

  1. 测试 /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.
  2. 验证系统是否向日志发送包含 error 字符串的信息:

    1. 发送测试信息:

      # logger error
    2. 查看 /var/log/errors.log 日志,例如:

      # cat /var/log/errors.log
      Aug  5 13:48:31 hostname root[6778]: error

      其中 hostname 是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为 root

其他资源

  • rhel-system-roles 软件包一起安装的文档在 /usr/share/ansible/roles/rhel-system-roles.logging/README.html

10.5. 使用日志记录系统角色应用远程日志解决方案

按照以下步骤准备并应用 Red Hat Ansible Core playbook 来配置远程日志记录解决方案。在本 playbook 中,一个或多个客户端从 systemd-journal 获取日志,并将它们转发到远程服务器。服务器从 remote_rsyslogremote_files 接收远程输入,并将日志输出到由远程主机名命名的目录中的本地文件。

先决条件

  • 对一个或多个 受管节点 的访问和权限,这些节点是您要使用日志系统角色配置的系统。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
    • 列出受管节点的清单文件。
注意

您不必安装 rsyslog 软件包,因为系统管理员在部署时会安装 rsyslog

流程

  1. 创建定义所需角色的 playbook:

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      # vi logging-playbook.yml
    2. 将以下内容插入到文件中:

      ---
      - name: Deploying remote input and remote_files output
        hosts: server
        roles:
          - rhel-system-roles.logging
        vars:
          logging_inputs:
            - name: remote_udp_input
              type: remote
              udp_ports: [ 601 ]
            - name: remote_tcp_input
              type: remote
              tcp_ports: [ 601 ]
          logging_outputs:
            - name: remote_files_output
              type: remote_files
          logging_flows:
            - name: flow_0
              inputs: [remote_udp_input, remote_tcp_input]
              outputs: [remote_files_output]
      
      - name: Deploying basics input and forwards output
        hosts: clients
        roles:
          - rhel-system-roles.logging
        vars:
          logging_inputs:
            - name: basic_input
              type: basics
          logging_outputs:
            - name: forward_output0
              type: forwards
              severity: info
              target: _host1.example.com_
              udp_port: 601
            - name: forward_output1
              type: forwards
              facility: mail
              target: _host1.example.com_
              tcp_port: 601
          logging_flows:
            - name: flows0
              inputs: [basic_input]
              outputs: [forward_output0, forward_output1]
      
      [basic_input]
      [forward_output0, forward_output1]

      其中 host1.example.com 是日志服务器。

      注意

      您可以修改 playbook 中的参数以符合您的需要。

      警告

      日志解决方案只适用于在服务器或者客户端系统的 SELinux 策略中定义的端口并在防火墙中打开。默认 SELinux 策略包括端口 601、514、6514、10514 和 20514。要使用其他端口,请修改客户端和服务器系统上的 SELinux 策略。目前还不支持通过系统角色配置防火墙。

  2. 创建列出您的服务器和客户端的清单文件:

    1. 创建新文件并在文本编辑器中打开该文件,例如:

      # vi inventory.ini
    2. 将以下内容插入到清单文件中:

      [servers]
      server ansible_host=host1.example.com
      [clients]
      client ansible_host=host2.example.com

      其中:

      • host1.example.com 是日志服务器。
      • host2.example.com 是日志客户端。
  3. 对清单运行 playbook。

    # ansible-playbook -i /path/to/file/inventory.ini /path/to/file/_logging-playbook.yml

    其中:

    • inventory.ini 是清单文件。
    • logging-playbook.yml 是您创建的 playbook。

验证

  1. 在客户端和服务器系统上测试 /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.
  2. 验证客户端系统向服务器发送信息:

    1. 在客户端系统中发送测试信息:

      # logger test
    2. 在服务器系统上,查看 /var/log/messages 日志,例如:

      # cat /var/log/messages
      Aug  5 13:48:31 host2.example.com root[6778]: test

      其中 host2.example.com 是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为 root

其他资源

10.6. 使用带有 TLS 的日志系统角色

传输层安全性(TLS)是一种加密协议,旨在在计算机网络上安全地进行通信。

作为管理员,您可以使用 Logging RHEL 系统角色使用红帽 Ansible Automation Platform 配置日志的安全传输。

10.6.1. 配置带有 TLS 的客户端日志

您可以使用日志系统角色在 RHEL 系统上配置日志,这些日志记录在本地计算机上,并通过运行 Ansible playbook 将日志转发到带有 TLS 的远程日志系统。

此流程对 Ansible 清单中所有客户端组中的主机配置 TLS。TLS 对信息的传输进行加密,确保日志在网络安全传输。

先决条件

  • 您有在要配置 TLS 的受管节点上运行 playbook 的权限。
  • 受管节点列在控制节点上的清单文件中。
  • ansiblerhel-system-roles 软件包已安装在控制节点上。

流程

  1. 使用以下内容创建一个 playbook.yml 文件:

    ---
    - name: Deploying files input and forwards output with certs
      hosts: clients
      roles:
        - rhel-system-roles.logging
      vars:
        logging_pki_files:
          - ca_cert_src: /local/path/to/ca_cert.pem
            cert_src: /local/path/to/cert.pem
            private_key_src: /local/path/to/key.pem
        logging_inputs:
          - name: input_name
            type: files
            input_log_path: /var/log/containers/*.log
        logging_outputs:
          - name: output_name
            type: forwards
            target: your_target_host
            tcp_port: 514
            tls: true
            pki_authmode: x509/name
            permitted_server: 'server.example.com'
        logging_flows:
          - name: flow_name
            inputs: [input_name]
            outputs: [output_name]

    playbook 使用以下参数:

    logging_pki_files
    使用这个参数您可以配置 TLS,并且必须传递 ca_cert_srccert_srcprivate_key_src 参数。
    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,则会将其复制到该位置。
    tls
    使用此参数可确保在网络上安全地传输日志。如果不想要安全包装程序,您可设置 tls: true
  2. 验证 playbook 语法:

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file playbook.yml

10.6.2. 配置带有 TLS 的服务器日志

您可以使用日志系统角色在 RHEL 系统中将日志配置为服务器,并通过运行 Ansible playbook 从带有 TLS 的远程日志系统接收日志。

此流程对 Ansible 清单中主机组中的所有主机配置 TLS。

先决条件

  • 您有在要配置 TLS 的受管节点上运行 playbook 的权限。
  • 受管节点列在控制节点上的清单文件中。
  • ansiblerhel-system-roles 软件包已安装在控制节点上。

流程

  1. 使用以下内容创建一个 playbook.yml 文件:

    ---
    - name: Deploying remote input and remote_files output with certs
      hosts: server
      roles:
        - rhel-system-roles.logging
      vars:
        logging_pki_files:
          - ca_cert_src: /local/path/to/ca_cert.pem
            cert_src: /local/path/to/cert.pem
            private_key_src: /local/path/to/key.pem
        logging_inputs:
          - name: input_name
            type: remote
            tcp_ports: 514
            tls: true
            permitted_clients: ['clients.example.com']
        logging_outputs:
          - name: output_name
            type: remote_files
            remote_log_path: /var/log/remote/%FROMHOST%/%PROGRAMNAME:::secpath-replace%.log
            async_writing: true
            client_count: 20
            io_buffer_size: 8192
        logging_flows:
          - name: flow_name
            inputs: [input_name]
            outputs: [output_name]

    playbook 使用以下参数:

    logging_pki_files
    使用这个参数您可以配置 TLS,并且必须传递 ca_cert_srccert_srcprivate_key_src 参数。
    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,则会将其复制到该位置。
    tls
    使用此参数可确保在网络上安全地传输日志。如果不想要安全包装程序,您可设置 tls: true
  2. 验证 playbook 语法:

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file playbook.yml

10.7. 使用带有 RELP 的日志系统角色

可靠的事件日志协议(RELP)是一种通过 TCP 网络记录数据和消息的网络协议。它确保了事件消息的可靠传递,您可以在不容许任何消息丢失的环境中使用它。

RELP 发送者以命令的形式传输日志条目,接收者在处理后确认这些条目。为确保一致性,RELP 将事务数保存到传输的命令中,以便进行任何类型的消息恢复。

您可以考虑在 RELP 客户端和 RELP Server 间的远程日志系统。RELP 客户端将日志传送给远程日志系统,RELP 服务器接收由远程日志系统发送的所有日志。

管理员可以使用日志系统角色将日志系统配置为可靠地发送和接收日志条目。

10.7.1. 配置带有 RELP 的客户端日志

您可以使用日志系统角色在 RHEL 系统中配置日志,这些日志记录在本地机器上,并通过运行 Ansible playbook 来将日志传送到带有 RELP 的远程日志系统。

此流程对 Ansible 清单中 客户端 组中的所有主机配置 RELP。RELP 配置使用传输层安全(TLS)来加密消息传输,保证日志在网络上安全传输。

先决条件

  • 您有在要配置 RELP 的受管节点上运行 playbook 的权限。
  • 受管节点列在控制节点上的清单文件中。
  • ansiblerhel-system-roles 软件包已安装在控制节点上。

流程

  1. 使用以下内容创建一个 playbook.yml 文件:

    ---
    - name: Deploying basic input and relp output
      hosts: clients
      roles:
        - rhel-system-roles.logging
      vars:
        logging_inputs:
          - name: basic_input
            type: basics
        logging_outputs:
          - name: relp_client
            type: relp
            target: _logging.server.com_
            port: 20514
            tls: true
            ca_cert: _/etc/pki/tls/certs/ca.pem_
            cert: _/etc/pki/tls/certs/client-cert.pem_
            private_key: _/etc/pki/tls/private/client-key.pem_
            pki_authmode: name
            permitted_servers:
              - '*.server.example.com'
        logging_flows:
          - name: _example_flow_
            inputs: [basic_input]
            outputs: [relp_client]

    playbook 使用以下设置:

    • target :这是一个必需的参数,用于指定运行远程日志系统的主机名。
    • port :远程日志记录系统正在监听的端口号。
    • tls :确保日志在网络上安全地传输。如果您不想要安全打包程序,可以将 tls 变量设置为 false。在与 RELP 工作时,默认的 tls 参数被设置为 true,且需要密钥/证书和 triplets {ca_certcertprivate_key} 和/或 {ca_cert_src,cert_src,private_key_src}。

      • 如果设置了 {ca_cert_src, cert_src ,private_key_src} triplet ,默认位置 /etc/pki/tls/certs/etc/pki/tls/private 被用作受管节点上的目的地,来从控制节点传输文件。在这种情况下,文件名与 triplet 中的原始名称相同
      • 如果设置了 {ca_certcertprivate_key} triplet,则在日志配置之前,文件应位于默认路径上。
      • 如果同时设置了 triplet,则会将文件从本地路径从控制节点传输到受管节点的特定路径。
    • 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:接受身份验证模式为 namefingerprint
    • permitted_servers :日志客户端允许通过 TLS 连接和发送日志的服务器列表。
    • inputs :日志输入字典列表。
    • outputs:日志输出字典列表。
  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 运行 playbook:

    # ansible-playbook -i inventory_file playbook.yml

10.7.2. 配置带有 RELP 的服务器日志

您可以使用日志系统角色将 RHEL 系统中的日志配置为服务器,并通过运行 Ansible playbook 从带有 RELP 的远程日志系统接收日志。

此流程对 Ansible 清单中 服务器 组中的所有主机配置 RELP。RELP 配置使用 TLS 加密消息传输,以保证在网络上安全地传输日志。

先决条件

  • 您有在要配置 RELP 的受管节点上运行 playbook 的权限。
  • 受管节点列在控制节点上的清单文件中。
  • ansiblerhel-system-roles 软件包已安装在控制节点上。

流程

  1. 使用以下内容创建一个 playbook.yml 文件:

    ---
    - name: Deploying remote input and remote_files output
      hosts: server
      roles:
        - rhel-system-roles.logging
      vars:
        logging_inputs:
          - name: relp_server
            type: relp
            port: 20514
            tls: true
            ca_cert: _/etc/pki/tls/certs/ca.pem_
            cert: _/etc/pki/tls/certs/server-cert.pem_
            private_key: _/etc/pki/tls/private/server-key.pem_
            pki_authmode: name
            permitted_clients:
              - '_*example.client.com_'
        logging_outputs:
          - name: _remote_files_output_
            type: _remote_files_
        logging_flows:
          - name: _example_flow_
            inputs: _relp_server_
            outputs: _remote_files_output_

    playbook 使用以下设置:

    • port :远程日志记录系统正在监听的端口号。
    • tls :确保日志在网络上安全地传输。如果您不想要安全打包程序,可以将 tls 变量设置为 false。在与 RELP 工作时,默认的 tls 参数被设置为 true,且需要密钥/证书和 triplets {ca_certcertprivate_key} 和/或 {ca_cert_src,cert_src,private_key_src}。

      • 如果设置了 {ca_cert_src, cert_src ,private_key_src} triplet ,默认位置 /etc/pki/tls/certs/etc/pki/tls/private 被用作受管节点上的目的地,来从控制节点传输文件。在这种情况下,文件名与 triplet 中的原始名称相同
      • 如果设置了 {ca_certcertprivate_key} triplet,则在日志配置之前,文件应位于默认路径上。
      • 如果同时设置了 triplet,则会将文件从本地路径从控制节点传输到受管节点的特定路径。
    • 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:接受身份验证模式为 namefingerprint
    • permitted_clients:日志记录服务器允许通过 TLS 连接和发送日志的客户端列表。
    • inputs :日志输入字典列表。
    • outputs:日志输出字典列表。
  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 运行 playbook:

    # ansible-playbook -i inventory_file playbook.yml

10.8. 其他资源

第 11 章 使用 SSH 系统角色配置安全通信

作为管理员,您可以使用 SSHD 系统角色配置 SSH 服务器和 SSH 系统角色,以使用 Ansible Core 软件包同时在任意数量的 RHEL 系统中配置 SSH 客户端。

11.1. SSH 服务器系统角色变量

在 SSH Server 系统角色 playbook 中,您可以根据您的首选项和限制定义 SSH 配置文件的参数。

如果您没有配置这些变量,则系统角色会生成与 RHEL 默认值匹配的 sshd_config 文件。

在所有情况下,布尔值在 sshd 配置中都正确呈现为 yesno。您可以使用 list 来定义多行配置项。例如:

sshd_ListenAddress:
  - 0.0.0.0
  - '::'

呈现为:

ListenAddress 0.0.0.0
ListenAddress ::

SSH 服务器系统角色的变量

sshd_enable
如果设置为 False,则角色将被完全禁用。默认值为 True
sshd_skip_defaults
如果设置为 True,则系统角色不会应用默认值。相反,您可以使用 sshd dict 或 sshd_Key 变量来指定完整的配置默认值集合。默认值为 False
sshd_manage_service
如果设置为 False,则服务不会被管理,这意味着它不会在引导时启用,也不会启动或重新加载。除非在容器内或 AIX 中运行,否则默认为 True,因为 Ansible 服务模块目前不支持对 AIX 的 启用
sshd_allow_reload
如果设置为 False,则sshd 不会在配置更改后重新加载。这可帮助进行故障排除。要应用更改后的配置,请手动重新加载 sshd。默认为与 sshd_manage_service 相同的值,但 AIX 除外,其中 sshd_manage_service 默认为 False,但 sshd_allow_reload 默认为 True
sshd_install_service

如果设置为 True,该角色将为 sshd 服务安装服务文件。这会覆盖操作系统中提供的文件。除非您要配置第二个实例,否则不要设置为 True,您也可以更改 sshd_service 变量,。默认值为 False

该角色使用以下变量指向的文件作为模板:

sshd_service_template_service (default: templates/sshd.service.j2)
sshd_service_template_at_service (default: templates/sshd@.service.j2)
sshd_service_template_socket (default: templates/sshd.socket.j2)
sshd_service
此变量更改 sshd 服务名称,这对于配置第二个 sshd 服务实例非常有用。
sshd

包含配置的字典。例如:

sshd:
  Compression: yes
  ListenAddress:
    - 0.0.0.0
sshd_OptionName

您可以使用由 sshd_ 前缀和选项名称而不是 dict 组成的简单变量来定义选项。简单的变量覆盖 sshd 字典中的值。例如:

sshd_Compression: no
sshd_matchsshd_match_1sshd_match_9
字典列表或 只是匹配部分的字典。请注意,这些变量不会覆盖 sshd 字典中定义的匹配块。所有源都会反映在生成的配置文件中。

SSH 服务器系统角色的辅助变量

您可以使用这些变量来覆盖与每个支持的平台对应的默认值。

sshd_packages
您可以使用此变量来覆盖安装的软件包的默认列表。
sshd_config_ownersshd_config_groupsshd_config_mode
您可以使用这些变量为该角色生成的 openssh 配置文件设置所有权和权限。
sshd_config_file
此角色保存生成的 openssh 服务器配置的路径。
sshd_config_namespace

此变量的默认值为 null,这意味着角色定义配置文件的整个内容,包括系统默认值。或者,您也可以使用此变量从其他角色或从不支随时可访问目录的系统上的单个 playbook 中的多个位置调用此角色。sshd_skip_defaults 变量将被忽略,本例中没有使用系统默认值。

设置此变量时,角色会将您指定的配置放置在给定命名空间下的现有配置段中。如果您的场景需要多次应用角色,您需要为每个应用程序选择不同的命名空间。

注意

openssh 配置文件的限制仍然适用。例如,对大多数配置选项,只有配置文件中指定的第一个选项有效。

从技术上讲,角色会将段放在"Match all"块中,除非它们包含其他匹配块,以确保无论现有配置文件中之前匹配的块如何都将应用它们。这允许从不同角色调用中配置任何不冲突的选项。

sshd_binary
opensshsshd 可执行文件的路径。
sshd_service
sshd 服务的名称。默认情况下,此变量包含目标平台所使用的 sshd 服务的名称。当角色使用 sshd_install_service 变量时,您还可以使用它来设置自定义 sshd 服务的名称。
sshd_verify_hostkeys
默认值为 auto。当设置为 auto 时,这将列出生成的配置文件中存在的所有主机密钥,并生成所有不存在的路径。此外,权限和文件所有者被设置为默认值。如果该角色用于部署阶段来确保服务能够在第一次尝试时启动,则这非常有用。若要禁用此检查,可将此变量设置为空列表 []
sshd_hostkey_owner,sshd_hostkey_group,sshd_hostkey_mode
使用这些变量来设置 sshd_verify_hostkeys 的主机密钥的所有权和权限。
sshd_sysconfig
在基于 RHEL 的系统上,这个变量配置 sshd 服务的其它详细信息。如果设置为 true,则此角色还会根据以下配置来管理 /etc/sysconfig/sshd 配置文件:默认值为 false
sshd_sysconfig_override_crypto_policy
在 RHEL 中,当设为 true 时,这个变量会覆盖系统范围的加密策略。默认值为 false
sshd_sysconfig_use_strong_rng
在基于 RHEL 的系统上,此变量可以强制 sshd 使用给定的字节数作为参数来重新设置 openssl 随机数字生成器的种子。默认值为 0,它会禁用此功能。如果系统没有硬件随机数字生成器,请不要打开此选项。

11.2. 使用 SSH 服务器系统角色配置 OpenSSH 服务器

您可以通过运行 Ansible playbook,使用 SSH 服务器系统角色来配置多个 SSH 服务器。

注意

您可以将 SSH Server 系统角色与其他系统角色结合使用,用于更改 SSH 和 SSHD 配置,如身份管理 RHEL 系统角色。要防止配置被覆盖,请确保 SSH Server 角色使用命名空间(RHEL 8 及更早版本)或置入目录(RHEL 9)。

先决条件

  • 可以访问一个或多个 受管节点,它们是您要使用 SSHD 系统角色来配置的系统。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
重要

RHEL 8.0-8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook、连接器(如 dockerpodman )以及许多插件和模块。有关如何获取并安装 Ansible Engine 的详情,请参考如何下载并安装 Red Hat Ansible Engine 知识库文章。

RHEL 8.6 和 9.0 引入了 Ansible Core(作为 ansible-core 软件包提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。RHEL 通过 AppStream 软件仓库提供此软件包,它有一个有限的支持范围。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 及更新的 AppStream 软件仓库文档中的 Ansible Core 软件包的支持范围

  • 列出受管节点的清单文件。

流程

  1. 复制 SSH 服务器系统角色的示例 playbook:

    # cp /usr/share/doc/rhel-system-roles/sshd/example-root-login-playbook.yml path/custom-playbook.yml
  2. 使用文本编辑器打开复制的 playbook,例如:

    # vim path/custom-playbook.yml
    
    ---
    - hosts: all
      tasks:
      - name: Configure sshd to prevent root and password login except from particular subnet
        include_role:
          name: rhel-system-roles.sshd
        vars:
          sshd:
            # root login and password login is enabled only from a particular subnet
            PermitRootLogin: no
            PasswordAuthentication: no
            Match:
            - Condition: "Address 192.0.2.0/24"
              PermitRootLogin: yes
              PasswordAuthentication: yes

    playbook 将受管节点配置为 SSH 服务器,以便:

    • 禁用密码和 root 用户登录
    • 只对子网 192.0.2.0/24 启用密码和 root 用户登录

    您可以根据您的偏好修改变量。如需了解更多详细信息,请参阅 SSH 服务器系统角色变量

  3. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check path/custom-playbook.yml
  4. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file path/custom-playbook.yml
    
    ...
    
    PLAY RECAP
    **************************************************
    
    localhost : ok=12 changed=2 unreachable=0 failed=0
    skipped=10 rescued=0 ignored=0

验证

  1. 登录到 SSH 服务器:

    $ ssh user1@10.1.1.1

    其中:

    • user1 是 SSH 服务器上的用户。
    • 10.1.1.1 是 SSH 服务器的 IP 地址。
  2. 检查 SSH 服务器上的 sshd_config 文件的内容:

    $ vim /etc/ssh/sshd_config
    
    # Ansible managed
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_ed25519_key
    AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
    AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
    AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
    AcceptEnv XMODIFIERS
    AuthorizedKeysFile .ssh/authorized_keys
    ChallengeResponseAuthentication no
    GSSAPIAuthentication yes
    GSSAPICleanupCredentials no
    PasswordAuthentication no
    PermitRootLogin no
    PrintMotd no
    Subsystem sftp /usr/libexec/openssh/sftp-server
    SyslogFacility AUTHPRIV
    UsePAM yes
    X11Forwarding yes
    Match Address 192.0.2.0/24
      PasswordAuthentication yes
      PermitRootLogin yes
  3. 检查您是否可以以 root 用户身份从 192.0.2.0/24 子网连接到服务器:

    1. 确定您的 IP 地址:

      $ hostname -I
      192.0.2.1

      如果 IP 地址在 192.0.2.1 - 192.0.2.254 范围内,您可以连接到服务器。

    2. root 用户身份连接到服务器:

      $ ssh root@10.1.1.1

其他资源

  • /usr/share/doc/rhel-system-roles/sshd/README.md 文件。
  • ansible-playbook(1) 手册页。

11.3. SSH 客户端系统角色变量

在 SSH 客户端系统角色 playbook 中,您可以根据您的首选项和限制定义客户端 SSH 配置文件的参数。

如果没有配置这些变量,系统角色会生成一个与 RHEL 默认值匹配的全局 ssh_config 文件。

在所有情况下,布尔值在 ssh 配置中都正确地呈现为 yesno。您可以使用 list 来定义多行配置项。例如:

LocalForward:
  - 22 localhost:2222
  - 403 localhost:4003

呈现为:

LocalForward 22 localhost:2222
LocalForward 403 localhost:4003
注意

配置选项区分大小写。

SSH 客户端系统角色的变量

ssh_user
您可以定义系统角色修改用户特定配置的现有用户名。用户特定配置保存在给定用户的 ~/.ssh/config 中。默认值为 null,它会修改所有用户的全局配置。
ssh_skip_defaults
默认值为 auto。如果设置为 auto,则系统角色将写入系统范围的配置文件 /etc/ssh/ssh_config,并在其中保留定义 RHEL 的默认值。例如,通过定义 ssh_drop_in_name 变量来创建一个随时可访问的配置文件,将自动禁用 ssh_skip_defaults 变量。
ssh_drop_in_name

定义 drop-in 配置文件的名称,该文件放在系统范围的 drop-in 目录中。该名称在模板 /etc/ssh/ssh_config.d/{ssh_drop_in_name}.conf 中使用,以引用要修改的配置文件。如果系统不支持 drop-in 目录,则默认值为 null。如果系统支持 drop-in 目录,则默认值为 00-ansible

警告

如果系统不支持 drop-in 目录,设置此选项将使 play 失败。

建议的格式是 NN-name,其中 NN 是用于订购配置文件的两位数字,name 是内容或文件所有者的任何描述性名称。

ssh
包含配置选项和其相应值的字典。
ssh_OptionName
您可以使用由 ssh_ 前缀和选项名称而不是字典组成的简单变量来定义选项。简单的变量覆盖 ssh 字典中的值。
ssh_additional_packages
此角色会自动安装 opensshopenssh-clients 软件包,这是最常见用例所需要的。如果您需要安装其他软件包,例如 openssh-keysign 以用于基于主机的身份验证,您可以在此变量中指定它们。
ssh_config_file

角色保存产生的配置文件的路径。默认值:

  • 如果系统有一个 drop-in 目录,则默认值通过模板 /etc/ssh/ssh_config.d/{ssh_drop_in_name}.conf 来定义。
  • 如果系统没有随时可访问的目录,则默认值为 /etc/ssh/ssh_config
  • 如果定义了 ssh_user 变量,则默认值为 ~/.ssh/config
ssh_config_owner,ssh_config_group,ssh_config_mode
所创建的配置文件的所有者、组和模式。默认情况下,文件的所有者是 root:root,模式是 0644。如果定义了 ssh_user,则模式为 0600,所有者和组派生自 ssh_user 变量中指定的用户名。

11.4. 使用 SSH 客户端系统角色配置 OpenSSH 客户端

您可以通过运行 Ansible playbook,使用 SSH 客户端系统角色来配置多个 SSH 客户端。

注意

您可以将 SSH 客户端系统角色用于更改 SSH 和 SSHD 配置的其他系统角色,例如 Identity Management RHEL 系统角色。要防止配置被覆盖,请确保 SSH 客户端角色使用置入目录(默认为 RHEL 8)。

先决条件

  • 访问一个或多个 受管节点(您要使用 SSH 客户端系统角色配置的系统)。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
重要

RHEL 8.0-8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook、连接器(如 dockerpodman )以及许多插件和模块。有关如何获取并安装 Ansible Engine 的详情,请参考如何下载并安装 Red Hat Ansible Engine 知识库文章。

RHEL 8.6 和 9.0 引入了 Ansible Core(作为 ansible-core 软件包提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。RHEL 通过 AppStream 软件仓库提供此软件包,它有一个有限的支持范围。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 及更新的 AppStream 软件仓库文档中的 Ansible Core 软件包的支持范围

  • 列出受管节点的清单文件。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    ---
    - hosts: all
      tasks:
      - name: "Configure ssh clients"
        include_role:
          name: rhel-system-roles.ssh
        vars:
          ssh_user: root
          ssh:
            Compression: true
            GSSAPIAuthentication: no
            ControlMaster: auto
            ControlPath: ~/.ssh/.cm%C
            Host:
              - Condition: example
                Hostname: example.com
                User: user1
          ssh_ForwardX11: no

    此 playbook 使用以下配置在受管节点上配置 root 用户的 SSH 客户端首选项:

    • 压缩已启用。
    • ControlMaster 多路复用设置为 auto
    • 连接到 example.com 主机的example 别名是 user1
    • example 主机别名已创建,它表示使用 user1 用户名连接到 example.com 主机。
    • X11 转发被禁用。

    另外,您还可以根据您的偏好修改这些变量。如需了解更多详细信息,请参阅 SSH 系统角色变量

  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check path/custom-playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file path/custom-playbook.yml

验证

  • 通过在文本编辑器中打开 SSH 配置文件来验证受管节点是否具有正确的配置,例如:

    # vi ~root/.ssh/config

    在应用了上述示例 playbook 后,配置文件应具有以下内容:

    # Ansible managed
    Compression yes
    ControlMaster auto
    ControlPath ~/.ssh/.cm%C
    ForwardX11 no
    GSSAPIAuthentication no
    Host example
      Hostname example.com
      User user1

11.5. 对非独占配置使用 SSH 服务器系统角色

通常,应用 SSH Server 系统角色会覆盖整个配置。如果您之前调整了配置,例如使用不同的系统角色或 playbook,这可能会出现问题。要仅将 SSH Server 系统角色应用于所选配置选项,同时保留其他选项,您可以使用非排除的配置。

在 RHEL 8 和更早版本中,您可以使用配置段来应用非独占配置。如需更多信息,请参阅 RHEL 8 文档中的 对非独占配置使用 SSH 服务器系统角色

在 RHEL 9 中,您可以使用随时可访问目录中的文件来应用非独占配置。默认配置文件已放入随时可访问的目录中,存为 /etc/ssh/sshd_config.d/00-ansible_system_role.conf

先决条件

  • 访问一个或多个 受管节点 (您要使用 SSH Server 系统角色配置的系统)。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-core 软件包已安装 。
    • 列出受管节点的清单文件。
    • 不同 RHEL 系统角色的 playbook。如需更多信息,请参阅 应用角色

流程

  1. 在 playbook 中添加带有 sshd_config_file 变量的配置段:

    ---
    - hosts: all
      tasks:
      - name: <Configure sshd to accept some useful environment variables>
        include_role:
          name: rhel-system-roles.sshd
        vars:
          sshd_config_file: /etc/ssh/sshd_config.d/<42-my-application>.conf
          sshd:
            # Environment variables to accept
            AcceptEnv:
              LANG
              LS_COLORS
              EDITOR

    sshd_config_file 变量中,定义 SSH Server 系统角色在其中写入配置选项的 .conf 文件。

    使用两位前缀,例如 42- 来指定应用配置文件的顺序。

    将 playbook 应用到清单时,角色会将以下配置选项添加到 sshd_config_file 变量定义的文件中。

    # Ansible managed
    #
    AcceptEnv LANG LS_COLORS EDITOR

验证

  • 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml -i inventory_file

其他资源

  • /usr/share/doc/rhel-system-roles/sshd/README.md 文件。
  • ansible-playbook(1) 手册页。

第 12 章 使用 VPN RHEL 系统角色使用 IPsec 配置 VPN 连接

使用 VPN 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 系统上配置 VPN 连接。您可以使用它来设置主机到主机、网络到网络、VPN 远程访问服务器和网格配置。

对于主机到主机连接,角色使用默认参数在 vpn_connections 列表中的每一对主机之间设置 VPN 通道,包括根据需要生成密钥。另外,您还可以将其配置为在列出的所有主机之间创建 机会主义网格配置。该角色假定 hosts 下的主机名称与 Ansible 清单中使用的主机的名称相同,并且您可以使用这些名称来配置通道。

注意

VPN RHEL 系统角色目前只支持 Libreswan(一个 IPsec 实现)作为 VPN 供应商。

12.1. 使用 VPN 系统角色创建带有 IPsec 的主机到主机的 VPN

您可以通过在控制节点上运行 Ansible playbook 来使用 VPN 系统角色配置主机到主机的连接,这将配置清单文件中列出的所有受管节点。

先决条件

  • 对一个或多个 受管节点 的访问和权限,受管节点是您要使用 VPN 系统角色配置的系统。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
重要

RHEL 8.0-8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook、连接器(如 dockerpodman )以及许多插件和模块。有关如何获取并安装 Ansible Engine 的详情,请参考如何下载并安装 Red Hat Ansible Engine 知识库文章。

RHEL 8.6 和 9.0 引入了 Ansible Core(作为 ansible-core 软件包提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。RHEL 通过 AppStream 软件仓库提供此软件包,它有一个有限的支持范围。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 及更新的 AppStream 软件仓库文档中的 Ansible Core 软件包的支持范围

  • 列出受管节点的清单文件。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    - name: Host to host VPN
      hosts: managed_node1, managed_node2
      roles:
        - rhel-system-roles.vpn
      vars:
        vpn_connections:
          - hosts:
              managed_node1:
              managed_node2:

    此 playbook 使用系统角色自动生成的密钥进行预共享密钥身份验证,来配置 managed_node1-to-managed_node2 的连接。

  2. 可选:通过将以下部分添加到主机的 vpn_connections 列表中,配置从受管主机到清单文件中未列出的外部主机的连接:

        vpn_connections:
          - hosts:
              managed_node1:
              managed_node2:
              external_node:
                hostname: 192.0.2.2

    这将配置另外两个连接:managed_node1-to-external_nodemanaged_node2-to-external_node

注意

连接仅在受管节点上配置,而不在外部节点上配置。

  1. 可选:您可以使用 vpn_connections 中的额外部分为受管节点指定多个 VPN 连接,如控制平面和数据平面:

    - name: Multiple VPN
      hosts: managed_node1, managed_node2
      roles:
        - rhel-system-roles.vpn
      vars:
        vpn_connections:
          - name: control_plane_vpn
            hosts:
              managed_node1:
                hostname: 192.0.2.0 # IP for the control plane
              managed_node2:
                hostname: 192.0.2.1
          - name: data_plane_vpn
            hosts:
              managed_node1:
                hostname: 10.0.0.1 # IP for the data plane
              managed_node2:
                hostname: 10.0.0.2
  2. 可选:您可以根据您的偏好修改变量。详情请查看 /usr/share/doc/rhel-system-roles/vpn/README.md 文件。
  3. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check /path/to/file/playbook.yml -i /path/to/file/inventory_file
  4. 在清单文件上运行 playbook:

    # ansible-playbook -i /path/to/file/inventory_file /path/to/file/playbook.yml

验证

  1. 在受管节点上,确认连接已成功载入:

    # ipsec status | grep connection.name

    connection.name 替换为来自此节点的连接的名称,如 managed_node1-to-managed_node2

注意

默认情况下,从每个系统的角度来看,角色为其创建的每个连接生成一个描述性名称。例如,当在 managed_node1managed_node2 之间创建连接时,此连接在 managed_node1 上的描述性名称为 managed_node1-to-managed_node2,但在 managed_node2 上,连接的描述性名称为 managed_node2-to-managed_node1

  1. 在受管节点上,确认连接是否成功启动:

    # ipsec trafficstatus | grep connection.name
  2. 可选:如果连接没有成功加载,请输入以下命令来手动添加连接。这将提供更具体的信息,说明连接未能建立的原因:

    # ipsec auto --add connection.name
    注意

    加载和启动连接过程中可能出现的任何错误都会在日志中报告,这些错误可以在 /var/log/pluto.log 中找到。由于这些日志难以解析,因此请尝试手动添加连接来获得日志消息,而不是从标准输出中获得。

12.2. 使用 VPN 系统角色创建带有 IPsec 的机会主义网格 VPN 连接

您可以使用 VPN 系统角色来配置机会主义网格 VPN 连接,该连接通过在控制节点上运行 Ansible playbook 来使用证书进行身份验证,它将配置清单文件中列出的所有受管节点。

通过在 playbook 中定义 auth_method: cert 参数来配置用证书进行身份验证。VPN 系统角色假设 IPsec 网络安全服务(NSS)加密库(在 /etc/ipsec.d 目录中定义)包含必要的证书。默认情况下,节点名称用作证书的昵称。在本例中,这是 managed_node1。您可以使用清单中的 cert_name 属性来定义不同的证书名称。

在以下示例流程中,控制节点(您要从其运行 Ansible playbook 的系统)与两个受管节点(192.0.2.0/24)共享相同的无类别域间路由(CIDR)数,并且 IP 地址为 192.0.2.7。因此,控制节点属于为 CIDR 192.0.2.0/24 自动创建的私有策略。

为防止在操作期间出现 SSH 连接丢失,控制节点的清晰策略包含在策略列表中。请注意,在策略列表中还有一个项 CIDR 等于 default。这是因为此 playbook 覆盖了默认策略中的规则,以使其为私有,而非私有或清晰。

先决条件

  • 对一个或多个 受管节点 的访问和权限,受管节点是您要使用 VPN 系统角色配置的系统。

    • 在所有受管节点上,/etc/ipsec.d 目录中的 NSS 数据库包含对等身份验证所需的所有证书。默认情况下,节点名称用作证书的昵称。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
重要

RHEL 8.0-8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook、连接器(如 dockerpodman )以及许多插件和模块。有关如何获取并安装 Ansible Engine 的详情,请参考如何下载并安装 Red Hat Ansible Engine 知识库文章。

RHEL 8.6 和 9.0 引入了 Ansible Core(作为 ansible-core 软件包提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。RHEL 通过 AppStream 软件仓库提供此软件包,它有一个有限的支持范围。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 及更新的 AppStream 软件仓库文档中的 Ansible Core 软件包的支持范围

  • 列出受管节点的清单文件。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    - name: Mesh VPN
      hosts: managed_node1, managed_node2, managed_node3
      roles:
        - rhel-system-roles.vpn
      vars:
        vpn_connections:
          - opportunistic: true
            auth_method: cert
            policies:
              - policy: private
                cidr: default
              - policy: private-or-clear
                cidr: 198.51.100.0/24
              - policy: private
                cidr: 192.0.2.0/24
              - policy: clear
                cidr: 192.0.2.7/32
  2. 可选:您可以根据您的偏好修改变量。详情请查看 /usr/share/doc/rhel-system-roles/vpn/README.md 文件。
  3. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  4. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file /path/to/file/playbook.yml

12.3. 其他资源

  • 有关 VPN 系统角色使用的参数详情以及角色的附加信息,请查看 /usr/share/doc/rhel-system-roles/vpn/README.md 文件。
  • 有关 ansible-playbook 命令的详情,请查看 ansible-playbook(1) 手册页。

第 13 章 设置跨系统的自定义加密策略

作为管理员,您可以使用 Cryptographic 策略 RHEL 系统角色快速并一致地使用 Ansible Core 软件包在许多不同的系统中配置自定义加密策略。

13.1. 加密策略系统角色变量和事实

在 Cryptographic Policies System Role playbook 中,您可以根据您的首选项和限制定义加密策略配置文件的参数。

如果没有配置任何变量,系统角色不会配置系统,只会报告事实。

Cryptographic Policies 系统角色选择的变量

crypto_policies_policy
确定系统角色应用到受管节点的加密策略。有关不同加密策略的详情,请参阅 系统范围的加密策略
crypto_policies_reload
如果设置为 yes,则目前受影响的服务 ipsecbindsshd 服务,在应用加密策略后重新加载。默认值为 yes
crypto_policies_reboot_ok
如果设置为 yes,在系统角色更改了加密策略后需要重新启动,它会将 crypto_policies_reboot_required 设置为 yes。默认值为 no

由 Cryptographic Policies 系统角色设置的事实

crypto_policies_active
列出当前选择的策略。
crypto_policies_available_policies
列出系统上所有可用的策略。
crypto_policies_available_subpolicies
列出系统上所有可用的子策略。

13.2. 使用 Cryptographic Policies 系统角色设置自定义加密策略

您可以使用 Cryptographic Policies 系统角色配置大量受管节点,从单一控制节点一致。

先决条件

  • 对一个或多个 受管节点 的访问和权限,受管节点是您要使用加密策略系统角色配置的系统。
  • 对控制节点的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
重要

RHEL 8.0-8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook、连接器(如 dockerpodman )以及许多插件和模块。有关如何获取并安装 Ansible Engine 的详情,请参考如何下载并安装 Red Hat Ansible Engine 知识库文章。

RHEL 8.6 和 9.0 引入了 Ansible Core(作为 ansible-core 软件包提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。RHEL 通过 AppStream 软件仓库提供此软件包,它有一个有限的支持范围。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 及更新的 AppStream 软件仓库文档中的 Ansible Core 软件包的支持范围

  • 列出受管节点的清单文件。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    ---
    - hosts: all
      tasks:
      - name: Configure crypto policies
        include_role:
          name: rhel-system-roles.crypto_policies
        vars:
          - crypto_policies_policy: FUTURE
          - crypto_policies_reboot_ok: true

    您可以将 FUTURE 值替换为您首选的加密策略,例如:DEFAULTLEGACYFIPS:OSPP.

    crypto_policies_reboot_ok: true 变量会导致系统在系统角色更改加密策略后重启系统。

    如需了解更多详细信息,请参阅 加密策略系统角色变量和事实

  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file playbook.yml

验证

  1. 在控制节点上,创建另一个 playbook,例如,名为 verify_playbook.yml:

    - hosts: all
      tasks:
     - name: Verify active crypto policy
       include_role:
         name: rhel-system-roles.crypto_policies
    
     - debug:
         var: crypto_policies_active

    此 playbook 不更改系统上的任何配置,只报告受管节点上的活动策略。

  2. 运行同一个清单文件上的 playbook:

    # ansible-playbook -i inventory_file verify_playbook.yml
    
    TASK [debug] **************************
    ok: [host] => {
        "crypto_policies_active": "FUTURE"
    }

    "crypto_policies_active": 变量显示受管节点上的活动策略。

13.3. 其他资源

第 14 章 使用 Clevis 和 Tang 系统角色

14.1. Clevis 和 Tang 系统角色介绍

RHEL 系统角色是 Ansible 角色和模块的集合,可为远程管理多个 RHEL 系统提供一致的配置界面。

您可以使用 Ansible 角色使用 Clevis 和 Tang 自动部署基于策略的解密(PBD)解决方案。rhel-system-roles 包中包含了这些系统角色、相关的例子以及参考文档。

Network Bound Disk Encryption Client 系统角色可让您自动部署多个 Clevis 客户端。请注意,Network Bound Disk Encryption Client 角色只支持 Tang 绑定,您目前不能在 TPM2 绑定中使用它。

Network Bound Disk Encryption Client 角色需要已经使用 LUKS 加密的卷。此角色支持将 LUKS 加密卷绑定到一个或多个网络绑定(NBDE)服务器 - Tang 服务器。您可以使用密码短语保留现有的卷加密,或者将其删除。删除密码短语后,您只能使用 NBDE 解锁卷。当卷最初是使用在置备系统后会删除的临时密钥或密码进行加密时,这非常有用,

如果您同时提供密语和密钥文件,角色将使用您首先提供的那一个。如果找不到任何有效密语或密码,它将尝试从现有的绑定中检索密码短语。

PBD 将绑定定义为设备到插槽的映射。这意味着对同一个设备你可以有多个绑定。默认插槽是插槽 1。

Network Bound Disk Encryption Client 角色也提供了 state 变量。使用 present 值来创建新绑定或更新现有绑定。与 clevis luks bind 命令不同,您可以使用 state: present 来覆盖其设备插槽中的现有绑定。absent 的值会删除指定的绑定。

使用 Network Bound Disk Encryption Server 系统角色,您可以部署和管理 Tang 服务器作为自动磁盘加密解决方案的一部分。此角色支持以下功能:

  • 轮转 Tang 密钥
  • 部署和备份 Tang 密钥

其他资源

  • 有关网络绑定磁盘加密(NBDE)角色变量的详细参考,请安装 rhel-system-roles 软件包,并查看 /usr/share/doc/rhel-system-roles/nbde_client//usr/share/doc/rhel-system-roles/nbde_server/ 目录中的 README.mdREADME.html 文件。
  • 关于系统角色 playbook 示例,请安装 rhel-system-roles 软件包,并查看 /usr/share/ansible/roles/rhel-system-roles.nbde_server/examples/ 目录。
  • 有关 RHEL 系统角色的更多信息,请参阅 RHEL 系统角色简介

14.2. 使用 NBDE 服务器系统角色设置多个 Tang 服务器

按照以下步骤准备和应用包含您的 Tang 服务器设置的 Ansible playbook。

先决条件

  • 访问一个或多个受管节点 (要使用 NBDE 服务器系统角色配置的系统)。
  • 对控制节点的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
重要

RHEL 8.0-8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook、连接器(如 dockerpodman )以及许多插件和模块。有关如何获取并安装 Ansible Engine 的详情,请参考如何下载并安装 Red Hat Ansible Engine 知识库文章。

RHEL 8.6 和 9.0 引入了 Ansible Core(作为 ansible-core 软件包提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。RHEL 通过 AppStream 软件仓库提供此软件包,它有一个有限的支持范围。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 及更新的 AppStream 软件仓库文档中的 Ansible Core 软件包的支持范围

  • 列出受管节点的清单文件。

步骤

  1. 准备包含 Tang 服务器设置的 playbook。您可以从头开始,或使用 /usr/share/ansible/roles/rhel-system-roles.nbde_server/examples/ 目录中的一个 playbook 示例。

    # cp /usr/share/ansible/roles/rhel-system-roles.nbde_server/examples/simple_deploy.yml ./my-tang-playbook.yml
  2. 在您选择的文本编辑器中编辑 playbook,例如:

    # vi my-tang-playbook.yml
  3. 添加所需参数。以下 playbook 示例确保部署 Tang 服务器和密钥轮转:

    ---
    - hosts: all
    
      vars:
        nbde_server_rotate_keys: yes
    
      roles:
        - rhel-system-roles.nbde_server
  4. 应用完成的 playbook:

    # ansible-playbook -i inventory-file my-tang-playbook.yml

    其中: * inventory-file 是清单文件。* logging-playbook.yml 是您使用的 playbook。

重要

通过使用在安装了 Clevis 的系统上的 grubby 工具来确保 Tang pin 的网络可用:

# grubby --update-kernel=ALL --args="rd.neednet=1"

其他资源

  • 如需更多信息,请安装 rhel-system-roles 软件包,并查看 /usr/share/doc/rhel-system-roles/nbde_server/usr/share/ansible/roles/rhel-system-roles.nbde_server/ 目录。

14.3. 使用 NBDE 客户端系统角色设置多个 Clevis 客户端

按照步骤准备和应用包含 Clevis 客户端设置的 Ansible playbook。

注意

NBDE 客户端系统角色仅支持 Tang 绑定。这意味着您目前无法将其用于 TPM2 绑定。

先决条件

  • 访问一个或多个受管节点(您要使用 NBDE 客户端系统角色配置的系统)。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。
  • Ansible Core 软件包安装在控制机器上。
  • rhel-system-roles 软件包安装在您要运行 playbook 的系统中。

流程

  1. 准备包含 Clevis 客户端设置的 playbook。您可以从头开始,或使用 /usr/share/ansible/roles/rhel-system-roles.nbde_client/examples/ 目录中的一个 playbook 示例。

    # cp /usr/share/ansible/roles/rhel-system-roles.nbde_client/examples/high_availability.yml ./my-clevis-playbook.yml
  2. 在您选择的文本编辑器中编辑 playbook,例如:

    # vi my-clevis-playbook.yml
  3. 添加所需参数。以下 playbook 示例配置 Clevis 客户端,以便在两个 Tang 服务器中至少有一个可用时自动解锁两个 LUKS 加密卷:

    ---
    - hosts: all
    
      vars:
        nbde_client_bindings:
          - device: /dev/rhel/root
            encryption_key_src: /etc/luks/keyfile
            servers:
              - http://server1.example.com
              - http://server2.example.com
          - device: /dev/rhel/swap
            encryption_key_src: /etc/luks/keyfile
            servers:
              - http://server1.example.com
              - http://server2.example.com
    
      roles:
        - rhel-system-roles.nbde_client
  4. 应用完成的 playbook:

    # ansible-playbook -i host1,host2,host3 my-clevis-playbook.yml
重要

通过使用在安装了 Clevis 的系统上的 grubby 工具来确保在早期引导期间 Tang pin 的网络可用:

# grubby --update-kernel=ALL --args="rd.neednet=1"

其他资源

  • 有关 NBDE 客户端系统角色的参数和附加信息,请安装 rhel-system-roles 软件包,并查看 /usr/share/doc/rhel-system-roles/nbde_client//usr/share/ansible/roles/rhel-system-roles.nbde_client/ 目录。

第 15 章 使用 RHEL 系统角色请求证书

您可以使用证书发行和续订系统角色来发布和管理证书。

本章涵盖了以下主题:

15.1. 证书颁发和续订系统角色

使用证书颁发和续订系统角色,您可以使用 Ansible Core 管理发布和续订 TLS 和 SSL 证书。

该角色使用 certmonger 作为证书提供者,目前支持发布和续订自签名证书及使用 IdM 集成认证机构(CA)。

您可以通过证书颁发和续订系统角色使用 Ansible playbook 中的以下变量:

certificate_wait
来指定任务是否应该等待要发布的证书。
certificate_requests
来表示要发布的每个证书及其参数。

其他资源

  • 请参阅 /usr/share/ansible/roles/rhel-system-roles.certificate/README.md 文件。
  • 请参阅 RHEL 系统角色入门

15.2. 使用证书颁发和续订系统角色请求新的自签名证书

有了证书颁发和续订系统角色,您可以使用 Ansible Core 来发布自签名的证书。

此过程使用 certmonger 提供者,并通过 getcert 命令请求证书。

注意

默认情况下,certmonger 会在证书过期前自动尝试续订证书。您可以通过将 Ansible playbook 中的 auto_renew 参数设为 no 来禁用此功能。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。

    有关 RHEL 系统角色以及如何应用它们的详情,请参阅 RHEL 系统角色入门

流程

  1. 可选:创建一个清单文件,如 inventory.file

    $ touch inventory.file
  2. 打开清单文件并定义要请求证书的主机,例如:

    [webserver]
    server.idm.example.com
  3. 创建 playbook 文件,如 request-certificate.yml:

    • hosts 设置为包含您要对其请求证书的主机,如 webserver
    • certificate_requests 变量设置为包含以下内容:

      • name 参数设为所需证书的名称,如 mycert
      • dns 参数设为要在证书中包含的域,如 *.example.com
      • ca 参数设为 self-sign
    • roles 下设置 rhel-system-roles.certificate 角色。

      这是本例的 playbook 文件:

      ---
      - hosts: webserver
      
        vars:
          certificate_requests:
            - name: mycert
              dns: "*.example.com"
              ca: self-sign
      
        roles:
          - rhel-system-roles.certificate
  4. 保存该文件。
  5. 运行 playbook:

    $ ansible-playbook -i inventory.file request-certificate.yml

其他资源

  • 请参阅 /usr/share/ansible/roles/rhel-system-roles.certificate/README.md 文件。
  • 请参阅 ansible-playbook(1) 手册页。

15.3. 使用证书颁发和续订系统角色从 IdM CA 请求一个新的证书

有了证书颁发和续订系统角色,在使用带有集成证书认证机构(CA)的 IdM 服务器的同时,您可以使用 anible-core 来发布证书。因此,当使用 IdM 作为 CA 时,您可以高效且一致地为多个系统管理证书信任链。

此过程使用 certmonger 提供者,并通过 getcert 命令请求证书。

注意

默认情况下,certmonger 会在证书过期前自动尝试续订证书。您可以通过将 Ansible playbook 中的 auto_renew 参数设为 no 来禁用此功能。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。

    有关 RHEL 系统角色以及如何应用它们的详情,请参阅 RHEL 系统角色入门

流程

  1. 可选:创建一个清单文件,如 inventory.file

    $ touch inventory.file
  2. 打开清单文件并定义要请求证书的主机,例如:

    [webserver]
    server.idm.example.com
  3. 创建 playbook 文件,如 request-certificate.yml:

    • hosts 设置为包含您要对其请求证书的主机,如 webserver
    • certificate_requests 变量设置为包含以下内容:

      • name 参数设为所需证书的名称,如 mycert
      • dns 参数设要在证书中包含的域,如 www.example.com
      • principal 参数设为指定 Kerberos 主体,如 HTTP/www.example.com@EXAMPLE.COM
      • ca 参数设为 ipa
    • roles 下设置 rhel-system-roles.certificate 角色。

      这是本例的 playbook 文件:

      ---
      - hosts: webserver
        vars:
          certificate_requests:
            - name: mycert
              dns: www.example.com
              principal: HTTP/www.example.com@EXAMPLE.COM
              ca: ipa
      
        roles:
          - rhel-system-roles.certificate
  4. 保存该文件。
  5. 运行 playbook:

    $ ansible-playbook -i inventory.file request-certificate.yml

其他资源

  • 请参阅 /usr/share/ansible/roles/rhel-system-roles.certificate/README.md 文件。
  • 请参阅 ansible-playbook(1) 手册页。

15.4. 指定在使用证书颁发和续订系统角色前或之后要运行的命令

有了证书系统颁发和续订角色,您可以在证书发布或更新前后使用 Ansible Core 来执行命令。

在以下示例中,管理员确保在为 www.example.com 发布或更新自签名证书前停止 httpd 服务,然后再重启该服务。

注意

默认情况下,certmonger 会在证书过期前自动尝试续订证书。您可以通过将 Ansible playbook 中的 auto_renew 参数设为 no 来禁用此功能。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。

    有关 RHEL 系统角色以及如何应用它们的详情,请参阅 RHEL 系统角色入门

流程

  1. 可选:创建一个清单文件,如 inventory.file

    $ touch inventory.file
  2. 打开清单文件并定义要请求证书的主机,例如:

    [webserver]
    server.idm.example.com
  3. 创建 playbook 文件,如 request-certificate.yml:

    • hosts 设置为包含您要对其请求证书的主机,如 webserver
    • certificate_requests 变量设置为包含以下内容:

      • name 参数设为所需证书的名称,如 mycert
      • dns 参数设要在证书中包含的域,如 www.example.com
      • ca 参数设为您要用来发布证书的 CA,如 self-sign
      • run_before 参数设为在签发或续订证书之前要执行的命令,如 systemctl stop httpd.service
      • run_after 参数设为在签发或续订此证书后要执行的命令,如 systemctl start httpd.service
    • roles 下设置 rhel-system-roles.certificate 角色。

      这是本例的 playbook 文件:

      ---
      - hosts: webserver
        vars:
          certificate_requests:
            - name: mycert
              dns: www.example.com
              ca: self-sign
              run_before: systemctl stop httpd.service
              run_after: systemctl start httpd.service
      
        roles:
          - rhel-system-roles.certificate
  4. 保存该文件。
  5. 运行 playbook:

    $ ansible-playbook -i inventory.file request-certificate.yml

其他资源

  • 请参阅 /usr/share/ansible/roles/rhel-system-roles.certificate/README.md 文件。
  • 请参阅 ansible-playbook(1) 手册页。

第 16 章 使用 RHEL 系统角色配置 kdump

要使用 Ansible 管理 kdump,您可以使用内核转储角色,这是 RHEL 8 中可用的 RHEL 系统角色之一。

通过使用内核转储角色,您可以指定保存系统内存内容的位置,以便稍后进行分析。

有关 RHEL 系统角色的更多信息,以及如何应用它们,请参阅 RHEL 系统角色简介

16.1. 内核转储 RHEL 系统角色

内核转储系统角色允许您在多个系统中设置基本内核转储参数。

16.2. 内核转储角色参数

用于内核转储的 RHEL 系统角色的参数有:

角色变量描述

kdump_path

写入 vmcore 的路径。如果 kdump_target 不是 null,则路径相对于那个转储目标。否则,它必须是 root 文件系统的绝对路径。

其他资源

  • makedumpfile(8)手册页。
  • 有关 kdump 中使用的参数详情,以及内核转储系统角色的额外信息,请参阅 /usr/share/ansible/roles/rhel-system-roles.tlog/README.md 文件。

16.3. 使用 RHEL 系统角色配置 kdump

您可以通过运行 Ansible playbook 在多个系统中使用内核转储系统角色设置基本内核转储参数。

警告

内核转储角色通过替换 /etc/kdump.conf 文件,完全替换了受管主机的 kdump 配置。另外,如果应用了内核转储角色,则之前的所有 kdump 设置也会被替换,即使它们没有被角色变量指定,也会替换 /etc/sysconfig/kdump 文件。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。
  • 您有一个清单文件,其中列出了您要在其上部署 kdump 的系统。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    ---
    - hosts: kdump-test
      vars:
        kdump_path: /var/crash
      roles:
        - rhel-system-roles.kdump
  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file /path/to/file/playbook.yml

其他资源

  • 有关内核转储角色变量的详细参考,请参阅 /usr/share/doc/rhel-system-roles/kdump 目录中的 README.md 或 README.html 文件。
  • 请参阅 应用系统角色
  • rhel-system-roles 软件包安装的文档 /usr/share/ansible/roles/rhel-system-roles.kdump/README.html

第 17 章 使用 RHEL 系统角色管理本地存储

要使用 Ansible 管理 LVM 和本地文件系统(FS),您可以使用 Storage 角色,这是 RHEL 9 中可用的 RHEL 系统角色之一。

使用存储角色可让您自动管理多台机器上的磁盘和逻辑卷上的文件系统,以及从 RHEL 7.7 开始的所有 RHEL 版本。

有关 RHEL 系统角色的更多信息,以及如何应用它们,请参阅 RHEL 系统角色简介

17.1. Storage(存储)角色简介

Storage 角色可以管理:

  • 磁盘上未被分区的文件系统
  • 完整的 LVM 卷组,包括其逻辑卷和文件系统

使用 Storage 角色,您可以执行以下任务:

  • 创建文件系统
  • 删除文件系统
  • 挂载文件系统
  • 卸载文件系统
  • 创建 LVM 卷组
  • 删除 LVM 卷组
  • 创建逻辑卷
  • 删除逻辑卷
  • 创建 RAID 卷
  • 删除 RAID 卷
  • 创建带有 RAID 的 LVM 池
  • 删除带有 RAID 的 LVM 池

17.2. 在存储系统角色中识别存储设备的参数

您的存储角色配置仅影响您在以下变量中列出的文件系统、卷和池。

storage_volumes

在所有要管理的未分区磁盘中的文件系统列表。

当前不支持的分区。

storage_pools

要管理的池列表。

目前唯一支持的池类型是 LVM。使用 LVM 时,池代表卷组(VG)。每个池中都有一个要由角色管理的卷列表。对于 LVM,每个卷对应一个带文件系统的逻辑卷(LV)。

17.3. 在块设备中创建 XFS 文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储角色,来使用默认参数在块设备上创建 XFS 文件系统。

警告

存储角色只能在未分区、整个磁盘或逻辑卷(LV)上创建文件系统。它不能在分区中创建文件系统。

例 17.1. 在 /dev/sdb 上创建 XFS 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: xfs
  roles:
    - rhel-system-roles.storage
  • 卷名称(示例中为 barefs )目前是任意的。存储角色根据 disk: 属性下列出的磁盘设备来识别卷。
  • 您可以省略 fs_type: xfs 行,因为 XFS 是 RHEL 9 中的默认文件系统。
  • 要在 LV 上创建文件系统,请在 disks: 属性下提供 LVM 设置,包括括起的卷组。

    不要提供到 LV 设备的路径。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

17.4. 永久挂载文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储角色,以立即和永久挂载 XFS 文件系统。

例 17.2. 将 /dev/sdb 上的文件系统挂载到 /mnt/data 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: xfs
        mount_point: /mnt/data
  roles:
    - rhel-system-roles.storage
  • 此 playbook 将文件系统添加到 /etc/fstab 文件中,并立即挂载文件系统。
  • 如果 /dev/sdb 设备上的文件系统或挂载点目录不存在,则 playbook 会创建它们。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

17.5. 管理逻辑卷的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储角色在卷组中创建 LVM 逻辑卷。

例 17.3. 在 myvg 卷组中创建 mylv 逻辑卷的 playbook

- hosts: all
  vars:
    storage_pools:
      - name: myvg
        disks:
          - sda
          - sdb
          - sdc
        volumes:
          - name: mylv
            size: 2G
            fs_type: ext4
            mount_point: /mnt
  roles:
    - rhel-system-roles.storage
  • myvg 卷组由以下磁盘组成:

    • /dev/sda
    • /dev/sdb
    • /dev/sdc
  • 如果 myvg 卷组已存在,则 playbook 会将逻辑卷添加到卷组。
  • 如果 myvg 卷组不存在,则 playbook 会创建它。
  • playbook 在 mylv 逻辑卷上创建 Ext4 文件系统,并在 /mnt 上永久挂载文件系统。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

17.6. 启用在线块丢弃的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储角色,以挂载启用了在线块丢弃的 XFS 文件系统。

例 17.4. 一个 playbook,它在 /mnt/data/ 上启用在线块丢弃功能

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: xfs
        mount_point: /mnt/data
        mount_options: discard
  roles:
    - rhel-system-roles.storage

其他资源

17.7. 创建和挂载 Ext4 文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储角色来创建和挂载 Ext4 文件系统。

例 17.5. 在 /dev/sdb 上创建 Ext4 并挂载到 /mnt/data 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: ext4
        fs_label: label-name
        mount_point: /mnt/data
  roles:
    - rhel-system-roles.storage
  • playbook 在 /dev/sdb 磁盘上创建文件系统。
  • playbook 永久将文件系统挂载在 /mnt/data 目录。
  • 文件系统的标签是 label-name

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

17.8. 创建和挂载 ext3 文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储角色来创建和挂载 Ext3 文件系统。

例 17.6. 在 /dev/sdb 上创建 Ext3 ,并将其挂载到 /mnt/data 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: ext3
        fs_label: label-name
        mount_point: /mnt/data
  roles:
    - rhel-system-roles.storage
  • playbook 在 /dev/sdb 磁盘上创建文件系统。
  • playbook 永久将文件系统挂载在 /mnt/data 目录。
  • 文件系统的标签是 label-name

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

17.9. 使用存储 RHEL 系统角色调整现有 Ext4 或 Ext3 文件系统大小的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储角色来调整块设备上现有的 Ext4 或 Ext3 文件系统的大小。

例 17.7. 在磁盘上设置单个卷的 playbook

---
- name: Create a disk device mounted on /opt/barefs
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - /dev/sdb
	size: 12 GiB
        fs_type: ext4
        mount_point: /opt/barefs
  roles:
    - rhel-system-roles.storage
  • 如果上例中的卷已存在,若要调整卷大小,您需要运行相同的 playbook,只是参数 size 的值不同。例如:

例 17.8. 在 /dev/sdb上调整 ext4 大小的 playbook

---
- name: Create a disk device mounted on /opt/barefs
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - /dev/sdb
	size: 10 GiB
        fs_type: ext4
        mount_point: /opt/barefs
  roles:
    - rhel-system-roles.storage
  • 卷名称(示例中为 barefs)当前是任意的。Storage 角色根据 disk: 属性中列出的磁盘设备标识卷。
注意

在其他文件系统中使用 Resizing 操作可能会破坏您正在使用的设备上的数据。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

17.10. 使用存储 RHEL 系统角色在 LVM 上调整现有文件系统的大小的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储 RHEL 系统角色,以使用文件系统重新定义 LVM 逻辑卷大小。

警告

在其他文件系统中使用 Resizing 操作可能会破坏您正在使用的设备上的数据。

例 17.9. 调整 myvg 卷组中现有 mylv1 和 myvl2 逻辑卷大小的 playbook

---

- hosts: all
   vars:
    storage_pools:
      - name: myvg
        disks:
          - /dev/sda
          - /dev/sdb
          - /dev/sdc
        volumes:
            - name: mylv1
              size: 10 GiB
              fs_type: ext4
              mount_point: /opt/mount1
            - name: mylv2
              size: 50 GiB
              fs_type: ext4
              mount_point: /opt/mount2

- name: Create LVM pool over three disks
  incude_role:
    name: rhel-system-roles.storage
  • 此 playbook 调整以下现有文件系统的大小:

    • 挂载在 /opt/mount1 上的 mylv1 卷上的 Ext4 文件系统,大小调整为 10 GiB。
    • 挂载在 /opt/mount2 上的 mylv2 卷上的 Ext4 文件系统,大小调整为 50 GiB。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

17.11. 使用存储 RHEL 系统角色创建交换分区的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储角色来创建交换分区(如果不存在的话),或者使用默认参数在块设备上修改交换分区(如果已存在的话)。

例 17.10. 创建或修改 /dev/sdb 上现有 XFS 的 playbook

---
- name: Create a disk device with swap
- hosts: all
  vars:
    storage_volumes:
      - name: swap_fs
        type: disk
        disks:
          - /dev/sdb
	size: 15 GiB
        fs_type: swap
  roles:
    - rhel-system-roles.storage
  • 卷名称(示例中的 swap_fs )目前是任意的。存储角色根据 disk: 属性下列出的磁盘设备来识别卷。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

17.12. 使用存储系统角色配置 RAID 卷

使用存储系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上配置 RAID 卷。在本小节中,您将了解如何使用可用参数设置 Ansible playbook,以配置 RAID 卷以满足您的要求。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。
  • 您有一个清单文件详细描述了您要使用存储系统角色部署 RAID 卷的系统。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    - hosts: all
      vars:
        storage_safe_mode: false
        storage_volumes:
          - name: data
            type: raid
            disks: [sdd, sde, sdf, sdg]
            raid_level: raid0
            raid_chunk_size: 32 KiB
            mount_point: /mnt/data
            state: present
      roles:
        - name: rhel-system-roles.storage
    警告

    设备名称在某些情况下可能会改变,例如:当您在系统中添加新磁盘时。因此,为了避免数据丢失,我们不建议在 playbook 中使用特定的磁盘名称。

  2. 可选。验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory.file /path/to/file/playbook.yml

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

17.13. 使用存储系统角色使用 RAID 配置 LVM 池

使用 Storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上使用 RAID 配置 LVM 池。在本小节中,您将了解如何使用可用参数设置 Ansible playbook,以配置使用 RAID 的 LVM 池。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。
  • 您有一个清单文件详细描述了您要使用存储系统角色在其上配置带有 RAID 的 LVM 池的系统。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    - hosts: all
      vars:
        storage_safe_mode: false
        storage_pools:
          - name: my_pool
            type: lvm
            disks: [sdh, sdi]
            raid_level: raid1
            volumes:
              - name: my_pool
                size: "1 GiB"
                mount_point: "/mnt/app/shared"
                fs_type: xfs
                state: present
      roles:
        - name: rhel-system-roles.storage
    注意

    要使用 RAID 创建 LVM 池,您必须使用 raid_level 参数来指定 RAID 类型。

  2. 可选。验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory.file /path/to/file/playbook.yml

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

17.14. 使用存储 RHEL 系统角色在 LVM 上压缩和去掉重复数据的 VDO 卷的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储 RHEL 系统角色,以使用虚拟数据优化器(VDO)卷(VDO)卷来对逻辑管理器卷(LVM)启用压缩和去除重复数据。

例 17.11. 在 myvg 卷组中创建 mylv1 LVM VDO 卷的 playbook

---
- name: Create LVM VDO volume under volume group 'myvg'
  hosts: all
  roles:
    -rhel-system-roles.storage
  vars:
    storage_pools:
     - name: myvg
       disks:
         - /dev/sdb
       volumes:
         - name: mylv1
           compression: true
           deduplication: true
           vdo_pool_size: 10 GiB
           size: 30 GiB
           mount_point: /mnt/app/shared

在本例中,compressiondeduplication 池被设为 true,这指定使用 VDO。下面描述了这些参数的用法:

  • deduplication 用于去除存储在存储卷上的重复数据。
  • compression 用于压缩存储在存储卷上的数据,从而提高存储量。
  • vdo_pool_size 指定卷在设备上占用的实际大小。VDO 卷的虚拟大小由 size 参数设置。注:由于存储角色使用 LVM VDO,因此每个池中只有一个卷可以使用压缩和去除重复数据。

17.15. 使用存储系统角色创建 LUKS 加密卷

您可以使用存储角色来通过运行 Ansible playbook 创建和配置使用 LUKS 加密的卷。

先决条件

  • 对一个或多个 受管节点 的访问和权限,受管节点是您要使用加密策略系统角色配置的系统。
  • 对控制节点的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
重要

RHEL 8.0-8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook、连接器(如 dockerpodman )以及许多插件和模块。有关如何获取并安装 Ansible Engine 的详情,请参考如何下载并安装 Red Hat Ansible Engine 知识库文章。

RHEL 8.6 和 9.0 引入了 Ansible Core(作为 ansible-core 软件包提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。RHEL 通过 AppStream 软件仓库提供此软件包,它有一个有限的支持范围。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 及更新的 AppStream 软件仓库文档中的 Ansible Core 软件包的支持范围

  • 列出受管节点的清单文件。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    - hosts: all
      vars:
        storage_volumes:
          - name: barefs
            type: disk
            disks:
             - sdb
            fs_type: xfs
            fs_label: label-name
            mount_point: /mnt/data
            encryption: true
            encryption_password: your-password
      roles:
       - rhel-system-roles.storage
  2. 可选:验证 playbook 语法:

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory.file /path/to/file/playbook.yml

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.storage/README.md file

17.16. 使用存储 RHEL 系统角色以百分比形式表示池卷大小的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储系统角色,以表达作为池总大小的百分比的逻辑卷管理器卷(LVM)卷大小。

例 17.12. 将卷大小表示为池总大小百分比形式的 playbook

---
- name: Express volume sizes as a percentage of the pool's total size
  hosts: all
  roles
    - rhel-system-roles.storage
  vars:
    storage_pools:
    - name: myvg
      disks:
        - /dev/sdb
      volumes:
        - name: data
          size: 60%
          mount_point: /opt/mount/data
        - name: web
          size: 30%
          mount_point: /opt/mount/web
        - name: cache
          size: 10%
          mount_point: /opt/cache/mount

这个示例将 LVM 卷的大小指定为池大小的百分比,例如:"60%".另外,您还可以将卷的大小指定为人类可读的文件系统大小形式的池大小的百分比,如 "10g" 或 "50 GiB"。

17.17. 其他资源

  • /usr/share/doc/rhel-system-roles/storage/
  • /usr/share/ansible/roles/rhel-system-roles.storage/

第 18 章 使用 RHEL 系统角色配置时间同步

借助时间同步 RHEL 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上的多个目标机器上管理时间同步。

18.1. 时间同步系统角色

您可以使用时间同步 RHEL 系统角色在多个目标机器上管理时间同步。

Time synchronization 角色安装并配置 NTP 或 PTP 实现来作为 NTP 客户端或 PTP 副本操作,以便将系统时钟与 PTP 域中的 NTP 服务器或 grandmasters 同步。

请注意,使用 Time Synchronization 角色还有助于 迁移到 chrony,因为您可以在从 RHEL 6 开始的所有 Red Hat Enterprise Linux 版本上使用相同的 playbook,无论系统是否使用 ntpchrony 来实现 NTP 协议。

18.2. 为单一服务器池应用时间同步系统角色

以下示例演示了如何在只有一个服务器池的情况下应用 Time Synchronization 角色。

警告

Time synchronization 角色替换了受管主机上给定或检测到的供应商服务的配置。之前的设置即使没有在角色变量中指定,也会丢失。如果没有定义 timesync_ntp_provider 变量,唯一保留的设置就是供应商选择。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。
  • 您有一个清单文件,其中列出了您要在其上部署时间同步系统角色的系统。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    ---
    - hosts: timesync-test
      vars:
        timesync_ntp_servers:
          - hostname: 2.rhel.pool.ntp.org
            pool: yes
            iburst: yes
      roles:
        - rhel-system-roles.timesync
  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file /path/to/file/playbook.yml

18.3. 在客户端服务器上应用时间同步系统角色

您可以使用 Time synchronization 角色在 NTP 客户端上启用网络时间协议(NTS)。网络时间安全(NTS)是一个针对网络时间协议(NTP)指定的身份验证机制。它验证在服务器和客户端之间交换的 NTP 数据包是否未被更改。

警告

Time synchronization 角色替换了受管主机上给定或检测到的供应商服务的配置。即使未在角色变量中指定,之前的设置也会丢失。如果没有定义 timesync_ntp_provider 变量,唯一保留的设置就是供应商选择。

先决条件

  • 您不必在要部署 timesync 解决方案的系统上安装 Red Hat Ansible Automation Platform。
  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。
  • 您有一个清单文件,其中列出了您要在其上部署时间同步系统角色的系统。
  • chrony NTP 提供者版本为 4.0 或更高版本。

流程

  1. 使用以下内容创建一个 playbook.yml 文件:

    ---
    - hosts: timesync-test
      vars:
        timesync_ntp_servers:
          - hostname: ptbtime1.ptb.de
            iburst: yes
            nts: yes
      roles:
        - rhel-system-roles.timesync

    ptbtime1.ptb.de 是一个公共服务器的示例。您可能想要使用不同的公共服务器或您自己的服务器。

  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file /path/to/file/playbook.yml

验证

  1. 在客户端机器上执行测试:

    # chronyc -N authdata
    
    Name/IP address         Mode KeyID Type KLen Last Atmp  NAK Cook CLen
    =====================================================================
    ptbtime1.ptb.de         NTS     1   15  256  157    0    0    8  100
  2. 检查是否报告的 cookies 数量大于零。

其他资源

  • chrony.conf(5) 手册页

18.4. 时间同步系统角色变量

您可以将以下变量传递给 Time Synchronization 角色:

  • timesync_ntp_servers:
角色变量设置描述

hostname: host.example.com

服务器的主机名或地址

minpoll: number

最小轮询间隔。默认:6

maxpoll: number

最大轮询间隔。默认:10

iburst: yes

标志启用快速初始同步。默认: no

pool: yes

指示每个主机名解析地址都是一个单独的 NTP 服务器的标志。默认: no

nts: yes

用于启用网络时间安全性(NTS)的标记。默认:no。只支持 chrony >= 4.0。

其他资源

  • 有关 Time Synchronization 角色变量的详细参考,请安装 rhel-system-roles 软件包,并参阅 /usr/share/doc/rhel-system-roles/timesync 目录中的 README.md 或 README.html 文件。

第 19 章 使用 RHEL 系统角色监控性能

作为系统管理员,您可以使用 Metrics RHEL 系统角色监控系统性能。

19.1. 指标系统角色简介

RHEL 系统角色是 Ansible 角色和模块的集合,可为远程管理多个 RHEL 系统提供一致的配置界面。指标系统角色为本地系统配置性能分析服务,并可以选择包含要由本地系统监控的远程系统的列表。指标系统角色使您能够使用 pcp 来监控您的系统性能,而无需单独配置 pcp,因为 pcp 的设置和部署是由 playbook 来处理的。

表 19.1. 指标系统角色变量

角色变量描述用法示例

metrics_monitored_hosts

要通过目标主机分析的远程主机的列表。这些主机将在目标主机上记录指标,因此要确保每个主机的 /var/log 下有足够的磁盘空间。

metrics_monitored_hosts: ["webserver.example.com", "database.example.com"]

metrics_retention_days

在删除前配置性能数据保留的天数。

metrics_retention_days:14

metrics_graph_service

一个布尔值标志,使主机能够通过 pcpgrafana 设置性能数据可视化服务。默认设置为 false。

metrics_graph_service: no

metrics_query_service

一个布尔值标志,使主机能够通过 redis 设置时间序列查询服务,来查询记录的 pcp 指标。默认设置为 false。

metrics_query_service: no

metrics_provider

指定要用于提供指标的指标收集器。目前,pcp 是唯一受支持的指标提供者。

metrics_provider: "pcp"

注意

如需有关 metrics_connections 中使用的参数,以及有关指标系统角色的其他信息,请参阅 /usr/share/ansible/roles/rhel-system-roles.metrics/README.md 文件。

19.2. 使用指标系统角色以可视化方式监控本地系统

此流程描述了如何使用指标 RHEL 系统角色来监控您的本地系统,同时通过 Grafana 提供数据可视化。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要监控的机器上安装了 rhel-system-roles 软件包。

步骤

  1. 通过将以下内容添加到清单中,来在 /etc/ansible/hosts Ansible 清单中配置 localhost

    localhost ansible_connection=local
  2. 使用以下内容创建一个 Ansible playbook:

    ---
    - hosts: localhost
      vars:
        metrics_graph_service: yes
      roles:
        - rhel-system-roles.metrics
  3. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml
    注意

    由于 metrics_graph_service 布尔值被设置为 value="yes",因此会使用 pcp 自动安装并提供 Grafana ,并添加为数据源。

  4. 要查看机器上收集的指标的视图,请访问 grafanaweb 界面 ,如 访问 Grafana web UI 中所述。

19.3. 使用 metrics 系统角色设置监控其自身的独立系统

此流程描述了如何使用 metrics 系统角色设置一组机器来监控其自身。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要用来运行 playbook 的机器上安装了 rhel-system-roles 软件包。
  • 您已建立 SSH 连接。

步骤

  1. 将您要通过 playbook 监控的机器的名称或 IP 添加到 /etc/ansible/hosts Ansible 清单文件中括号内的标识组名称下:

    [remotes]
    webserver.example.com
    database.example.com
  2. 使用以下内容创建一个 Ansible playbook:

    ---
    - hosts: remotes
      vars:
        metrics_retention_days: 0
      roles:
        - rhel-system-roles.metrics
  3. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml -k

其中 -k 提示连接到远程系统的密码。

19.4. 使用 Metrics 系统角色通过本地机器监控机器的数量

此流程描述了如何使用指标系统角色设置本地机器来集中一组监控机器,同时通过 grafana 提供数据的可视化,并通过 redis 提供数据的查询。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要用来运行 playbook 的机器上安装了 rhel-system-roles 软件包。

步骤

  1. 使用以下内容创建一个 Ansible playbook:

    ---
    - hosts: localhost
      vars:
        metrics_graph_service: yes
        metrics_query_service: yes
        metrics_retention_days: 10
        metrics_monitored_hosts: ["database.example.com", "webserver.example.com"]
      roles:
        - rhel-system-roles.metrics
  2. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml
    注意

    由于 metrics_graph_servicemetrics_query_service 布尔值被设置为 value="yes",因此会使用pcp 来自动安装并提供 grafana ,并添加为带有 pcp 数据记录索引到 redis 的数据源,允许 pcp 查询语言用于复杂的数据查询。

  3. 要查看机器集中收集的指标的图形表示,并查询数据,请访问 grafana web 界面,如 访问 Grafana Web UI 中所述。

19.5. 在使用 Metrics 系统角色监控系统时设置身份验证

PCP 通过简单身份验证安全层(SASL)框架支持 scram-sha-256 验证机制。Metrics RHEL 系统角色使用 scram-sha-256 身份验证机制自动设置身份验证的步骤。这个步骤描述了如何使用 Metrics RHEL 系统角色设置身份验证。

先决条件

  • Ansible Core 软件包安装在控制机器上。
  • 您已在要用来运行 playbook 的机器上安装了 rhel-system-roles 软件包。

步骤

  1. 在您要为其设置身份验证的 Ansible playbook 中包含以下变量:

    ---
      vars:
        metrics_username: your_username
        metrics_password: your_password
  2. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml

验证步骤

  • 验证 sasl 配置:

    # pminfo -f -h "pcp://ip_adress?username=your_username" disk.dev.read
    Password:
    disk.dev.read
    inst [0 or "sda"] value 19540

    ip_adress 应替换为主机的 IP 地址。

19.6. 使用指标系统角色为 SQL Server 配置和启用指标集合

此流程描述了如何使用指标 RHEL 系统角色来自动化配置,并通过本地系统上的 pcp 启用 Microsoft SQL Server 的指标集合。

先决条件

步骤

  1. 通过将以下内容添加到清单中,来在 /etc/ansible/hosts Ansible 清单中配置 localhost

    localhost ansible_connection=local
  2. 创建一个包含以下内容的 Ansible playbook:

    ---
    - hosts: localhost
      roles:
        - role: rhel-system-roles.metrics
          vars:
            metrics_from_mssql: yes
  3. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml

验证步骤

  • 使用 pcp 命令来验证 SQL Server PMDA 代理(mssql)是否已加载并在运行:

    # pcp
    platform: Linux rhel82-2.local 4.18.0-167.el8.x86_64 #1 SMP Sun Dec 15 01:24:23 UTC 2019 x86_64
     hardware: 2 cpus, 1 disk, 1 node, 2770MB RAM
     timezone: PDT+7
     services: pmcd pmproxy
         pmcd: Version 5.0.2-1, 12 agents, 4 clients
         pmda: root pmcd proc pmproxy xfs linux nfsclient mmv kvm mssql
               jbd2 dm
     pmlogger: primary logger: /var/log/pcp/pmlogger/rhel82-2.local/20200326.16.31
         pmie: primary engine: /var/log/pcp/pmie/rhel82-2.local/pmie.log

第 20 章 使用 Microsoft SQL Server Ansible 角色配置 Microsoft SQL Server

作为管理员,您可以使用 Microsoft SQL Server Ansible 角色来安装、配置和启动 Microsoft SQL Server(SQL Server)。Microsoft SQL Server Ansible 角色优化您的操作系统,以提高 SQL Server 的性能和吞吐量。该角色使用推荐的设置来简化和自动化 RHEL 主机配置,以运行 SQL Server 工作负载。

20.1. 先决条件

  • 2 GB RAM
  • root 访问您要配置 SQL Server 的受管节点
  • 预配置的防火墙

    您必须启用对由 mssql_tcp_port 变量设置的 SQL Server TCP 端口的连接。如果没有定义这个变量,角色默认为 TCP 端口号 1443

    要添加新端口,请使用:

    # firewall-cmd --add-port=xxxx/tcp --permanent
    # firewall-cmd --reload

    xxxx 替换为 TCP 端口号,然后重新加载防火墙规则。

  • 可选 :创建包含 SQL 语句和存储进程的带有 .sql 扩展名的文件,来将它们输入到 SQL Server。

20.2. 安装 Microsoft SQL Server Ansible 角色

Microsoft SQL Server Ansible 角色是 ansible-collection-microsoft-sql 软件包的一部分。

先决条件

  • root 访问权限

流程

  1. 安装 Ansible Core,它包括在 RHEL 8 AppStream 存储库中:

    # dnf install ansible-core
  2. 安装 Microsoft SQL Server Ansible 角色:

    # dnf install ansible-collection-microsoft-sql

20.3. 使用 Microsoft SQL Server Ansible 角色安装和配置 SQL 服务器

您可以使用 Microsoft SQL Server Ansible 角色来安装和配置 SQL 服务器。

先决条件

  • Ansible 清单已创建

流程

  1. 创建一个扩展名为 .yml 的文件。例如,mssql-server.yml
  2. .yml 文件中添加以下内容:

    ---
    - hosts: all
      vars:
        mssql_accept_microsoft_odbc_driver_17_for_sql_server_eula: true
        mssql_accept_microsoft_cli_utilities_for_sql_server_eula: true
        mssql_accept_microsoft_sql_server_standard_eula: true
        mssql_password: <password>
        mssql_edition: Developer
        mssql_tcp_port: 1443
      roles:
        - microsoft.sql.server

    <password> 替换为您的 SQL Server 密码。

  3. 运行 mssql-server.yml ansible playbook:

    # ansible-playbook mssql-server.yml

20.4. TLS 变量

以下变量可用于配置传输级安全性(TLS)。

表 20.1. TLS 角色变量

角色变量描述

mssql_tls_enable

此变量启用或禁用 TLS 加密。

当变量设置为 true 时,Microsoft SQL Server Ansible 角色执行以下任务:

  • 将 TLS 证书复制到 SQL Server 上的 /etc/pki/tls/certs/
  • 将私钥复制到 SQL Server 上的 /etc/pki/tls/private/
  • 将 SQL Server 配置为使用 TLS 证书和私钥来加密连接
注意

您必须在 Ansible 控制节点上有 TLS 证书和私钥。

如果设置为 false ,则禁用 TLS 加密。该角色不会删除现有的证书和私钥文件。

mssql_tls_cert

要定义此变量,请输入 TLS 证书文件的路径。

mssql_tls_private_key

要定义此变量,请输入私钥文件的路径。

mssql_tls_version

定义此变量来选择要使用的 TSL 版本。

默认值为 1.2

mssql_tls_force

将此变量设为 true 以替换主机上的证书和私钥文件。这些文件必须在 /etc/pki/tls/certs//etc/pki/tls/private/ 目录下。

默认值为 false

20.5. 接受 MLService 的 EULA

您必须接受 Python 和 R 软件包开源分发的所有 EULA,才能安装所需的 SQL Server 机器学习服务(MLService)。

有关许可证条款,请参阅 /usr/share/doc/mssql-server

表 20.2. SQL Server 机器学习服务 EULA 变量

角色变量描述

mssql_accept_microsoft_sql_server_standard_eula

此变量决定是否接受安装 mssql-conf 软件包的条款和条件。

要接受条款和条件,请将这个变量设为 true

默认值为 false

20.6. 接受 Microsoft ODBC 17 的 EULA。

您必须接受所有 EULA,才能安装 Microsoft Open Database Connectivity(ODBC)驱动程序。

有关许可证条款,请参阅 /usr/share/doc/msodbcsql17/LICENSE.txt/usr/share/doc/mssql-tools/LICENSE.txt

表 20.3. Microsoft ODBC 17 EULA 变量

角色变量描述

mssql_accept_microsoft_odbc_driver_17_for_sql_server_eula

此变量决定是否接受安装 msodbcsql17 软件包的条款和条件。

要接受条款和条件,请将这个变量设为 true

默认值为 false

mssql_accept_microsoft_cli_utilities_for_sql_server_eula

此变量决定是否接受安装 mssql-tools 软件包的条款和条件。

要接受条款和条件,请将这个变量设为 true

默认值为 false

第 21 章 配置系统以使用终端会话记录 RHEL 系统角色

使用 Terminal Session Recording RHEL 系统角色,您可以使用 Red Hat Ansible Automation Platform 为 RHEL 上的终端会话记录配置系统。

21.1. Terminal Session Recording 系统角色

您可以使用 Terminal Session Recording RHEL 系统角色为 RHEL 上的终端会话记录配置 RHEL 系统。

您可以使用 SSSD 服务将记录配置为为每个用户或用户组进行。

其他资源

  • 有关 RHEL 中会话记录的详情,请参阅记录会话

21.2. Terminal Session Recording 系统角色的组件和参数

Session Recording 解决方案有以下组件:

  • tlog 工具
  • 系统安全性服务守护进程(SSSD)
  • 可选:Web 控制台界面

用于 Terminal Session Recording RHEL 系统角色的参数有:

角色变量描述

tlog_use_sssd (default: yes)

使用 SSSD 配置会话记录,这是管理记录的用户或组的首选方法

tlog_scope_sssd(默认值:none)

配置 SSSD 记录范围 - all / some / none

tlog_users_sssd(默认值:[])

要记录的用户的 YAML 列表

tlog_groups_sssd(默认值:[])

要记录的组的 YAML 列表

  • 有关 tlog 中使用的参数详情,以及 Terminal Session Recording 系统角色的附加信息,请参阅 /usr/share/ansible/roles/rhel-system-roles.tlog/README.md 文件。

21.3. 部署终端会话记录 RHEL 系统角色

按照以下步骤准备并应用 Ansible playbook 来配置 RHEL 系统,以将数据记录到 systemd 日志中。

先决条件

  • 您已设置了从控制节点访问的 SSH 密钥到配置 Terminal Session Recording 系统角色的目标系统。
  • 您至少有一个要配置 Terminal Session Recording 系统角色的系统。
  • Ansible Core 软件包安装在控制机器上。
  • rhel-system-roles 软件包安装在控制机器上。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    ---
    - name: Deploy session recording
      hosts: all
      vars:
        tlog_scope_sssd: some
        tlog_users_sssd:
          - recorded-user
    
      roles:
        - rhel-system-roles.tlog

    其中,

    • tlog_scope_sssd:

      • some 指定您只记录某些用户和组,而不是 allnone
    • tlog_users_sssd:

      • recorded-user 指定要记录会话的用户。请注意,这不会为您添加用户。您必须自行设置该用户。
  2. 另外,还可以验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i IP_Address /path/to/file/playbook.yml -v

因此,playbook 会在您指定的系统中安装 tlog RHEL 系统角色。该角色包括 tlog-rec-session (终端会话 I/O 日志记录程序),它充当用户的登录 shell。它还创建一个 SSSD 配置丢弃文件,可供您定义的用户和组使用。SSSD 解析并读取这些用户和组,并使用 tlog-rec-session 替换其用户 shell。另外,如果系统上安装了 cockpit 软件包,playbook 也会安装 cockpit-session-recording 软件包,它是一个 Cockpit 模块,供您在 web 控制台界面中查看和播放记录。

验证步骤

要验证 SSSD 配置文件是否在系统中创建了,请执行以下步骤:

  1. 进入创建 SSSD 配置丢弃文件的文件夹:

    # cd /etc/sssd/conf.d
  2. 检查文件内容:

    # cat /etc/sssd/conf.d/sssd-session-recording.conf

您可以看到该文件包含您在 playbook 中设置的参数。

21.4. 部署 Terminal Session Recording RHEL 系统角色以排除组或用户列表

您可以使用 Terminal Session Recording 系统角色来支持 SSSD 会话记录配置选项 exclude_usersexclude_groups。按照以下步骤准备和应用 Ansible playbook,来配置 RHEL 系统,以便在 systemd 日志中排除用户或组的会话记录。

先决条件

  • 您已设置了从控制节点访问到要配置 Terminal Session Recording 系统角色的目标系统的 SSH 密钥。
  • 您至少有一个要配置 Terminal Session Recording 系统角色的系统。
  • Ansible Core 软件包安装在控制机器上。
  • rhel-system-roles 软件包安装在控制机器上。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    ---
    - name: Deploy session recording excluding users and groups
      hosts: all
      vars:
        tlog_scope_sssd: all
        tlog_exclude_users_sssd:
          - jeff
          - james
        tlog_exclude_groups_sssd:
          - admins
    
      roles:
        - rhel-system-roles.tlog

    其中,

    • tlog_scope_sssd:

      • all :指定您要记录所有用户和组。
    • tlog_exclude_users_sssd:

      • user names:指定您要从会话记录中排除的用户的用户名。
    • tlog_exclude_groups_sssd:

      • admins 指定要从会话记录中排除的组。
  2. (可选)验证 playbook 语法;

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i IP_Address /path/to/file/playbook.yml -v

因此,playbook 会在您指定的系统中安装 tlog RHEL 系统角色。该角色包括 tlog-rec-session (终端会话 I/O 日志记录程序),它充当用户的登录 shell。它还会创建一个 /etc/sssd/conf.d/sssd-session-recording.conf SSSD 配置丢弃文件,供用户和组使用,但您定义为排除的用户和组除外。SSSD 解析并读取这些用户和组,并使用 tlog-rec-session 替换其用户 shell。另外,如果系统上安装了 cockpit 软件包,playbook 也会安装 cockpit-session-recording 软件包,它是一个 Cockpit 模块,供您在 web 控制台界面中查看和播放记录。

验证步骤

要验证 SSSD 配置文件是否在系统中创建了,请执行以下步骤:

  1. 进入创建 SSSD 配置丢弃文件的文件夹:

    # cd /etc/sssd/conf.d
  2. 检查文件内容:

    # cat sssd-session-recording.conf

您可以看到该文件包含您在 playbook 中设置的参数。

其他资源

21.5. 在 CLI 中使用部署的 Terminal Session Recording 系统角色记录会话

在您指定的系统中部署了 Terminal Session Recording 系统角色后,您可以使用命令行界面(CLI)记录用户终端会话。

先决条件

流程

  1. 创建一个用户并为这个用户分配密码:

    # useradd recorded-user
    # passwd recorded-user
  2. 以您刚刚创建的用户身份登录到该系统:

    # ssh recorded-user@localhost
  3. 当系统提示您输入 yes 或 no 进行身份验证时请输入 "yes"。
  4. 插入 record-user 的密码。

    系统显示有关记录会话的信息。

    ATTENTION! Your session is being recorded!
  5. 记录完会话后,请输入:

    # exit

    系统从用户注销并关闭与本地主机的连接。

用户会话会被记录,并被保存,您可以使用 journal 进行播放。

验证步骤

要在日志中查看您记录的会话,请执行以下步骤:

  1. 运行以下命令:

    # journalctl -o verbose -r
  2. 搜索 tlog-rec 记录的日志条目的 MESSAGE 字段。

    # journalctl -xel _EXE=/usr/bin/tlog-rec-session

21.6. 使用 CLI 监视记录的会话

您可以使用命令行界面(CLI)从日志中执行用户会话记录。

先决条件

流程

  1. 在 CLI 终端中,播放用户会话记录:

    # journalctl -o verbose -r
  2. 搜索 tlog 记录:

    $ /tlog-rec

    您可以查看详情,例如:

    • 用户会话记录的用户名
    • out_txt 字段,这是记录的会话的原始输出编码
    • 标识符号 TLOG_REC=ID_number
  3. 复制标识符号 TLOG_REC=ID_number
  4. 使用标识符号 TLOG_REC=ID_number 回放记录。

    # tlog-play -r journal -M TLOG_REC=ID_number

您可以看到记录的用户会话被回放。

第 22 章 使用系统角色配置高可用性集群

使用 HA 集群角色,您可以配置和管理使用 Pacemaker 高可用性集群资源管理器的高可用性集群。

注意

HA 系统角色目前不支持 SBD。

22.1. HA 集群系统角色变量

在 HA Cluster System Role playbook 中,您可以根据集群部署的要求为高可用性集群定义变量。

您可以为 HA 集群角色设置的变量如下。

ha_cluster_enable_repos
一个布尔值标志,它启用包含 HA Cluster System Role 所需的软件包的存储库。如果设置为 yes (此变量的默认值),则您必须在将用作集群成员的系统上拥有有效的 RHEL 和 RHEL 高可用性附加组件的订阅,否则系统角色将失败。
ha_cluster_cluster_present

布尔值标志(如果设为 yes )决定主机上的 HA 集群将根据传递给角色的变量进行配置。角色中没有指定且不受角色支持的任何集群配置都将丢失。

如果 ha_cluster_cluster_present 设为 no,则将从目标主机中删除所有 HA 集群配置。

此变量的默认值为 yes

以下示例 playbook 删除了 node1node2 上的所有集群配置

- hosts: node1 node2
  vars:
    ha_cluster_cluster_present: no

  roles:
    - rhel-system-roles.ha_cluster
ha_cluster_start_on_boot
确定是否将集群服务配置为在引导时启动的布尔值标志。此变量的默认值为 yes
ha_cluster_fence_agent_packages
要安装的隔离代理软件包列表。此变量的默认值为 fence-agents-allfence-virt
ha_cluster_extra_packages

要安装的其他软件包列表。此变量的默认值是 no packages。

此变量可用于安装角色未自动安装的其他软件包,如自定义资源代理。

可以将隔离代理指定为这个列表的成员。但是,ha_cluster_fence_agent_packages 是用于指定隔离代理的推荐的角色变量,因此其默认值会被覆盖。

ha_cluster_hacluster_password
指定 hacluster 用户的密码的字符串值。hacluster 用户对集群具有完全访问权限。建议您加密密码,如 使用 Ansible Vault 加密内容 中所述。没有默认密码值,必须指定此变量。
ha_cluster_corosync_key_src

Corosync authkey 文件的路径,它是 Corosync 通信的身份验证和加密密钥。强烈建议您对每个集群都有一个唯一的 authkey 值。密钥应为 256 字节的随机数据。

如果为此变量指定一个密钥,则建议您使用 vault 加密密钥,如 使用 Ansible Vault 加密内容 中所述。

如果没有指定密钥,则使用节点上已存在的密钥。如果节点没有相同的密钥,则一个节点的密钥将被分发到其他节点,以便所有节点都有相同的密钥。如果节点都没有密钥,则将生成一个新的密钥,并将其分发到节点。

如果设置了此变量,则忽略这个密钥的 ha_cluster_regenerate_keys

此变量的默认值为 null。

ha_cluster_pacemaker_key_src

Pacemaker authkey 文件的路径,它是 Pacemaker 通信的身份验证和加密密钥。强烈建议您对每个集群都有一个唯一的 authkey 值。密钥应为 256 字节的随机数据。

如果为此变量指定一个密钥,则建议您使用 vault 加密密钥,如 使用 Ansible Vault 加密内容 中所述。

如果没有指定密钥,则使用节点上已存在的密钥。如果节点没有相同的密钥,则一个节点的密钥将被分发到其他节点,以便所有节点都有相同的密钥。如果节点都没有密钥,则将生成一个新的密钥,并将其分发到节点。

如果设置了此变量,则忽略这个密钥的 ha_cluster_regenerate_keys

此变量的默认值为 null。

ha_cluster_fence_virt_key_src

fence-virtfence-xvm 预共享密钥文件的路径,它是 fence-virtfence-xvm 隔离代理验证密钥的位置。

如果为此变量指定一个密钥,则建议您使用 vault 加密密钥,如 使用 Ansible Vault 加密内容 中所述。

如果没有指定密钥,则使用节点上已存在的密钥。如果节点没有相同的密钥,则一个节点的密钥将被分发到其他节点,以便所有节点都有相同的密钥。如果节点都没有密钥,则将生成一个新的密钥,并将其分发到节点。如果 HA Cluster 系统角色以这种方式生成一个新密钥,您应该将该密钥复制到节点的 hypervisor 中,以确保隔离工作。

如果设置了此变量,则忽略这个密钥的 ha_cluster_regenerate_keys

此变量的默认值为 null。

ha_cluster_pcsd_public_key_srcr, ha_cluster_pcsd_private_key_src

pcsd TLS 证书和私钥的路径。如果没有指定,则使用节点上已存在的证书密钥对。如果没有证书密钥对,则会生成一个随机的新密钥对。

如果为此变量指定了私钥值,则建议您使用 vault 加密密钥,如 使用 Ansible Vault 加密内容 中所述。

如果设置了这些变量,则将忽略此证书密钥对的 ha_cluster_regenerate_keys

这些变量的默认值为 null。

ha_cluster_regenerate_keys

布尔值标志,当设置为 yes 时,其决定将重新生成预共享密钥和 TLS 证书。有关何时重新生成密钥和证书的更多信息,请参阅 ha_cluster_corosync_key_srcha_cluster_pacemaker_key_srcha_cluster_fence_virt_key_srcha_cluster_pcsd_public_key_srcha_cluster_pcsd_private_key_src 变量的描述。

此变量的默认值为 no

ha_cluster_pcs_permission_list

配置使用 pcsd 管理集群的权限。您使用这个变量配置的项目如下:

  • type - 用户
  • name - 用户或组名称
  • allow_list - 对指定的用户或组允许的操作:

    • read - 查看集群状态和设置
    • write - 修改集群设置,权限和 ACL 除外
    • grant - 修改集群权限和 ACL
    • full - 对集群的无限制访问,包括添加和删除节点,以及访问密钥和证书

      ::ha_cluster_pcs_permission_list 变量的结构及其默认值如下:

      ha_cluster_pcs_permission_list:
        - type: group
          name: hacluster
          allow_list:
            - grant
            - read
            - write
ha_cluster_cluster_name
集群的名称。这是一个字符串值,默认值为 my-cluster
ha_cluster_cluster_properties

Pacemaker 集群范围配置的集群属性集列表。仅支持一组集群属性。

一组集群属性的结构如下:

ha_cluster_cluster_properties:
  - attrs:
      - name: property1_name
        value: property1_value
      - name: property2_name
        value: property2_value

默认情况下,不设置任何属性。

以下示例 playbook 配置包含 node1node2 的集群,并设置 stonith-enabledno-quorum-policy 集群属性。

- hosts: node1 node2
  vars:
    ha_cluster_cluster_name: my-new-cluster
    ha_cluster_hacluster_password: password
    ha_cluster_cluster_properties:
      - attrs:
          - name: stonith-enabled
            value: 'true'
          - name: no-quorum-policy
            value: stop

  roles:
    - rhel-system-roles.ha_cluster
ha_cluster_resource_primitives

此变量定义由系统角色配置的 pacemaker 资源,包括 stonith 资源。您可以为每个资源配置的项目如下:

  • id (必需)- 资源的 ID。
  • agent (必需)- 资源或 stonith 代理的名称,如 ocf:pacemaker:Dummystonith:fence_xvm 。必须为 stonith 代理指定 stonith: 。对于资源代理,可以使用短名称,如 Dummy,而不是 ocf:pacemaker:Dummy。但是,如果安装了多个具有相同短名称的代理,则角色将失败,因为它将无法决定应使用哪个代理。因此,建议您在指定资源代理时使用全名。
  • instance_attrs (可选) - 资源的实例属性集合列表。目前,只支持一个集合。属性的确切名称和值,以及它们是否为必选的,这取决于资源还是 stonith 代理。
  • meta_attrs (可选) - 资源的元属性集合列表。目前,只支持一个集合。
  • operations (可选) - 资源操作列表。

    • action (必需)- pacemaker 以及资源或 stonith 代理定义的操作。
    • attrs (必需)- 操作选项,必须至少指定一个选项。

      ::使用 HA 集群角色配置的资源定义的结构如下:

        - id: resource-id
          agent: resource-agent
          instance_attrs:
            - attrs:
                - name: attribute1_name
                  value: attribute1_value
                - name: attribute2_name
                  value: attribute2_value
          meta_attrs:
            - attrs:
                - name: meta_attribute1_name
                  value: meta_attribute1_value
                - name: meta_attribute2_name
                  value: meta_attribute2_value
          operations:
            - action: operation1-action
              attrs:
                - name: operation1_attribute1_name
                  value: operation1_attribute1_value
                - name: operation1_attribute2_name
                  value: operation1_attribute2_value
            - action: operation2-action
              attrs:
                - name: operation2_attribute1_name
                  value: operation2_attribute1_value
                - name: operation2_attribute2_name
                  value: operation2_attribute2_value

      默认情况下不定义任何资源。

      有关包含资源配置的 HA Cluster System Role playbook 示例,请参阅使用隔离和资源配置高可用性集群

ha_cluster_resource_groups

此变量定义由系统角色配置的 pacemaker 资源组。您可以为每个资源组配置的项目如下:

  • id (必需)- 组的 ID.
  • resources (必需) - 组的资源列表.每个资源通过其 ID 引用,资源必须在 ha_cluster_resource_primitives 变量中定义。必须至少列出一个资源。
  • meta_attrs (可选) - 组的元属性集合列表。目前,只支持一个集合。

    ::使用 HA 集群角色配置的资源组定义的结构如下:

    ha_cluster_resource_groups:
      - id: group-id
        resource_ids:
          - resource1-id
          - resource2-id
        meta_attrs:
          - attrs:
              - name: group_meta_attribute1_name
                value: group_meta_attribute1_value
              - name: group_meta_attribute2_name
                value: group_meta_attribute2_value

    默认情况下,不定义任何资源组。

    有关包含资源组配置的 HA Cluster System Role playbook 示例,请参阅使用隔离和资源配置高可用性集群

ha_cluster_resource_clones

此变量定义由系统角色配置的 pacemaker 资源克隆。您可以为资源克隆配置的项目如下:

  • resource_id (必需)- 要克隆的资源.资源必须在 ha_cluster_resource_primitives 变量或 ha_cluster_resource_groups 变量中定义。
  • promotable (可选)- 表示要创建的资源克隆是否是可升级的克隆,表示为 yesno
  • id (可选)- 克隆的自定义 ID。如果未指定 ID,将会生成它。如果集群不支持这个选项,则会显示一个警告。
  • meta_attrs (可选)- 克隆的元属性集合列表。目前,只支持一个集合。

    ::使用 HA Cluster System Role 配置的资源定义的结构如下:

    ha_cluster_resource_clones:
      - resource_id: resource-to-be-cloned
        promotable: yes
        id: custom-clone-id
        meta_attrs:
          - attrs:
              - name: clone_meta_attribute1_name
                value: clone_meta_attribute1_value
              - name: clone_meta_attribute2_name
                value: clone_meta_attribute2_value

    默认情况下,没有定义资源克隆。

    有关包含资源克隆配置的 HA Cluster System Role playbook 示例,请参阅使用隔离和资源配置高可用性集群

ha_cluster_constraints_location

此变量定义资源位置限制。资源位置限制表示资源可在哪些节点上运行。您可以指定资源 ID 或模式匹配的资源,它们可以匹配多个资源。您可以通过节点名称或规则指定节点。

您可以为资源位置约束配置的项目如下:

  • resource (必需)- 约束应用到的资源规格。
  • node (必需)- 资源应首选或避免的节点的名称。
  • id (可选)- 约束 ID。如果未指定,它将自动生成。
  • options (可选)- “名称-值”字典列表。

    • score - 设置约束的权重。

      • score 值表示资源首选在节点上运行。
      • score 值表示资源应避免在节点上运行。
      • score 值为 -INFINITY 表示资源必须避免在节点上运行。
      • 如果没有指定 score,分数值默认为 INFINITY

        ::默认情况下,没有定义资源位置限制。

        指定资源 ID 和节点名称的资源位置约束的结构如下:

        ha_cluster_constraints_location:
          - resource:
              id: resource-id
            node: node-name
            id: constraint-id
            options:
              - name: score
                value: score-value
              - name: option-name
                value: option-value

        您为资源位置约束配置的项目,用于指定资源模式是为资源位置约束配置的相同项目,用于指定资源 ID,但资源规格本身除外。您为资源规格指定的项目如下:

  • pattern (必需)- POSIX 扩展正则表达式资源 ID 与.

    ::指定资源模式和节点名称的资源位置约束结构如下:

    ha_cluster_constraints_location:
      - resource:
          pattern: resource-pattern
        node: node-name
        id: constraint-id
        options:
          - name: score
            value: score-value
          - name: resource-discovery
            value: resource-discovery-value

    您可以为资源位置约束配置的项目,它指定资源 ID 和规则如下:

  • resource (必需)- 约束应用到的资源规格。

    • id (必需)- 资源 ID。
    • role (可选)- 约束限制的资源角色:Started, Unpromoted, Promoted.
  • rule (必需)- 使用 pcs 语法编写的 Constraint 规则。如需更多信息,请参阅 pcs(8)man page 的约束位置 部分。
  • 指定的其他项目的含义与未指定规则的资源约束相同。

    ::指定资源 ID 和规则的资源位置约束的结构如下:

    ha_cluster_constraints_location:
      - resource:
          id: resource-id
          role: resource-role
        rule: rule-string
        id: constraint-id
        options:
          - name: score
            value: score-value
          - name: resource-discovery
            value: resource-discovery-value

    为资源位置约束配置的项目,用于指定资源模式,规则是用于资源位置约束的相同项目,用于指定资源 ID 和规则,但资源规格本身除外。您为资源规格指定的项目如下:

  • pattern (必需)- POSIX 扩展正则表达式资源 ID 与.

    ::指定资源模式和规则的资源位置约束结构如下:

    ha_cluster_constraints_location:
      - resource:
          pattern: resource-pattern
          role: resource-role
        rule: rule-string
        id: constraint-id
        options:
          - name: score
            value: score-value
          - name: resource-discovery
            value: resource-discovery-value

    有关创建具有资源限制的集群的 ha_cluster 系统角色 playbook 示例,请参阅使用资源限制配置高可用性集群

ha_cluster_constraints_colocation

此变量定义资源 colocation 约束。资源共存限制表示一个资源的位置取决于另一个资源的位置。存在两种类型的 colocation 约束:两个资源的一个简单 colocation 约束,并为多个资源设置 colocation 约束。

您可以为简单资源 colocation 约束配置的项目如下:

  • resource_follower (必需)- 应相对于 resource_leader 的资源。

    • id (必需)- 资源 ID。
    • role (可选)- 约束限制的资源角色:Started, Unpromoted, Promoted.
  • resource_leader (必需)- 集群将决定优先放置此资源的位置,然后决定放置 resource_follower 的位置。

    • id (必需)- 资源 ID。
    • role (可选)- 约束限制的资源角色:Started, Unpromoted, Promoted.
  • id (可选)- 约束 ID。如果未指定,它将自动生成。
  • options (可选)- “名称-值”字典列表。

    • score - 设置约束的权重。

      • score 值表示资源应该在同一节点上运行。
      • score 值表示资源应在不同的节点上运行。
      • score 值为 +INFINITY 表示资源必须在同一节点上运行。
      • score 值为 -INFINITY 表示资源必须在不同的节点上运行。
      • 如果没有指定 score,分数值默认为 INFINITY

        ::默认情况下,没有定义资源 colocation 约束。

        简单资源 colocation 约束的结构如下:

        ha_cluster_constraints_colocation:
          - resource_follower:
              id: resource-id1
              role: resource-role1
            resource_leader:
              id: resource-id2
              role: resource-role2
            id: constraint-id
            options:
              - name: score
                value: score-value
              - name: option-name
                value: option-value

        您可以为资源集 colocation 约束配置的项目如下:

  • resource_sets (必需)- 资源集合列表。

    • resource_ids (必需)- 资源列表。
    • options (可选)- “名称/值”字典列表精细调整集合中资源如何被约束处理。
  • id (可选)- Same 值作为简单 colocation 约束。
  • options (可选)- Same 值作为简单 colocation 约束。

    ::资源集 colocation 约束的结构如下:

    ha_cluster_constraints_colocation:
      - resource_sets:
          - resource_ids:
              - resource-id1
              - resource-id2
            options:
              - name: option-name
                value: option-value
        id: constraint-id
        options:
          - name: score
            value: score-value
          - name: option-name
            value: option-value

    有关创建具有资源限制的集群的 ha_cluster 系统角色 playbook 示例,请参阅使用资源限制配置高可用性集群

ha_cluster_constraints_order

此变量定义资源顺序约束。资源顺序限制表示应发生某些资源操作的顺序。有两种资源顺序约束:两个资源的简单顺序约束,以及多个资源的设置顺序约束。

您可以为简单的资源顺序约束配置的项目如下:

  • resource_first (必需)- resource_then 资源依赖的资源。

    • id (必需)- 资源 ID。
    • action (可选)- 在为 resource_then 资源启动操作前必须完成的操作。允许的值: startstoppromotedemote
  • resource_then (必需)- 依赖资源。

    • id (必需)- 资源 ID。
    • action (可选)- 资源只能在 resource_first 资源执行操作后执行的操作。允许的值: startstoppromotedemote
  • id (可选)- 约束 ID。如果未指定,它将自动生成。
  • options (可选)- “名称-值”字典列表。

    ::默认情况下,没有定义资源顺序限制。

    简单资源顺序约束的结构如下:

    ha_cluster_constraints_order:
      - resource_first:
          id: resource-id1
          action: resource-action1
        resource_then:
          id: resource-id2
          action: resource-action2
        id: constraint-id
        options:
          - name: score
            value: score-value
          - name: option-name
            value: option-value

    您可以为资源设置顺序约束配置的项目如下:

  • resource_sets (必需)- 资源集合列表。

    • resource_ids (必需)- 资源列表。
    • options (可选)- “名称/值”字典列表精细调整集合中资源如何被约束处理。
  • id (可选)- 相同值作为简单顺序约束。
  • options (可选)- 相同值作为简单顺序约束。

    ::资源集顺序约束的结构如下:

    ha_cluster_constraints_order:
      - resource_sets:
          - resource_ids:
              - resource-id1
              - resource-id2
            options:
              - name: option-name
                value: option-value
        id: constraint-id
        options:
          - name: score
            value: score-value
          - name: option-name
            value: option-value

    有关创建具有资源限制的集群的 ha_cluster 系统角色 playbook 示例,请参阅使用资源限制配置高可用性集群

ha_cluster_constraints_ticket

此变量定义资源 ticket 约束。资源票据限制表示依赖于特定票据的资源。有两种类型的资源 ticket 约束:一个资源的简单 ticket 约束,多个资源的 ticket 顺序约束。

您可以为简单资源 ticket 约束配置的项目如下:

  • resource (必需)- 约束应用到的资源规格。

    • id (必需)- 资源 ID。
    • role (可选)- 约束限制的资源角色:Started, Unpromoted, Promoted.
  • ticket (必需)- 资源所依赖的票据的名称。
  • id (可选)- 约束 ID。如果未指定,它将自动生成。
  • options (可选)- “名称-值”字典列表。

    • loss-policy (可选)- 在撤销 ticket 时要对资源执行的操作。

      ::默认情况下,没有定义资源 ticket 约束。

      简单资源票据约束的结构如下:

      ha_cluster_constraints_ticket:
        - resource:
            id: resource-id
            role: resource-role
          ticket: ticket-name
          id: constraint-id
          options:
            - name: loss-policy
              value: loss-policy-value
            - name: option-name
              value: option-value

      您可以为资源设置 ticket 约束配置的项目如下:

  • resource_sets (必需)- 资源集合列表。

    • resource_ids (必需)- 资源列表。
    • options (可选)- “名称/值”字典列表精细调整集合中资源如何被约束处理。
  • ticket (必需)- 相同值作为一个简单 ticket 约束。
  • id (可选)- 相同值作为简单票据约束。
  • 选项 (可选)- 相同值作为简单票据约束。

    ::资源集 ticket 约束的结构如下:

    ha_cluster_constraints_ticket:
      - resource_sets:
          - resource_ids:
              - resource-id1
              - resource-id2
            options:
              - name: option-name
                value: option-value
        ticket: ticket-name
        id: constraint-id
        options:
          - name: option-name
            value: option-value

    有关创建具有资源限制的集群的 ha_cluster 系统角色 playbook 示例,请参阅使用资源限制配置高可用性集群

22.2. 为 HA 集群系统角色指定清单

使用 HA Cluster System Role playbook 配置 HA 集群时,您可以在清单中为集群配置名称和地址。

对于清单中的每个节点,您可以选择指定以下项目:

  • node_name - 集群中节点的名称。
  • pcs_address - pcs 用于与节点进行通信的地址。它可以是名称、FQDN 或 IP 地址,并且可以包含端口号。
  • corosync_addresses - Corosync 使用的地址列表.组成特定集群的所有节点必须具有相同数量的地址,并且地址的顺序也很重要。

以下示例显示了带有目标 node1node2 的清单。node1node2 必须是完全限定域名,否则必须能够连接到节点,例如,这些名称可以通过 /etc/hosts 文件解析。

all:
  hosts:
    node1:
      ha_cluster:
        node_name: node-A
        pcs_address: node1-address
        corosync_addresses:
          - 192.168.1.11
          - 192.168.2.11
    node2:
      ha_cluster:
        node_name: node-B
        pcs_address: node2-address:2224
        corosync_addresses:
          - 192.168.1.12
          - 192.168.2.12

22.3. 配置不运行任何资源的高可用性集群

以下流程使用 HA 集群角色来创建没有配置隔离且没有运行任何资源的高可用性集群。

先决条件

  • 您已在要运行 playbook 的节点上安装了 ansible-core

    注意

    您不必在群集成员节点上安装 ansible-core

  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。

    有关 RHEL 系统角色以及如何应用它们的详情,请参阅 RHEL 系统角色入门

  • 作为群集成员运行 RHEL 的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
警告

HA Cluster System Role 替换指定节点上的任何现有集群配置。没有在角色中指定的任何设置都将丢失。

流程

  1. 创建指定集群中的节点的清单文件,如为 HA Cluster System Role 指定清单中所述。
  2. 创建一个 playbook 文件,如 new-cluster.yml

    以下示例 playbook 文件配置没有配置隔离且没有运行任何资源的集群。在为生产环境创建 playbook 文件时,建议您用 vault 加密密码,如 使用 Ansible Vault 加密内容 中所述。

    - hosts: node1 node2
      vars:
        ha_cluster_cluster_name: my-new-cluster
        ha_cluster_hacluster_password: password
    
      roles:
        - rhel-system-roles.ha_cluster
  3. 保存该文件。
  4. 运行 playbook,指定在第 1 步中创建的清单文件清单的路径。

    # ansible-playbook -i inventory new-cluster.yml

22.4. 配置带有隔离和资源的高可用性集群

以下流程使用 HA Cluster System Role 创建包括隔离设备、集群资源、资源组和克隆资源的高可用性集群。

先决条件

  • 您已在要运行 playbook 的节点上安装了 ansible-core

    注意

    您不必在群集成员节点上安装 ansible-core

  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。

    有关 RHEL 系统角色以及如何应用它们的详情,请参阅 RHEL 系统角色入门

  • 作为群集成员运行 RHEL 的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
警告

HA Cluster System Role 替换指定节点上的任何现有集群配置。没有在角色中指定的任何设置都将丢失。

流程

  1. 创建指定集群中的节点的清单文件,如为 HA Cluster System Role 指定清单中所述。
  2. 创建一个 playbook 文件,如 new-cluster.yml

    以下示例 playbook 文件配置包含隔离、多个资源和资源组的集群。它还包含资源组的资源克隆。在为生产环境创建 playbook 文件时,建议您用 vault 加密密码,如 使用 Ansible Vault 加密内容 中所述。

    - hosts: node1 node2
      vars:
        ha_cluster_cluster_name: my-new-cluster
        ha_cluster_hacluster_password: password
        ha_cluster_resource_primitives:
          - id: xvm-fencing
            agent: 'stonith:fence_xvm'
            instance_attrs:
              - attrs:
                  - name: pcmk_host_list
                    value: node1 node2
          - id: simple-resource
            agent: 'ocf:pacemaker:Dummy'
          - id: resource-with-options
            agent: 'ocf:pacemaker:Dummy'
            instance_attrs:
              - attrs:
                  - name: fake
                    value: fake-value
                  - name: passwd
                    value: passwd-value
            meta_attrs:
              - attrs:
                  - name: target-role
                    value: Started
                  - name: is-managed
                    value: 'true'
            operations:
              - action: start
                attrs:
                  - name: timeout
                    value: '30s'
              - action: monitor
                attrs:
                  - name: timeout
                    value: '5'
                  - name: interval
                    value: '1min'
          - id: dummy-1
            agent: 'ocf:pacemaker:Dummy'
          - id: dummy-2
            agent: 'ocf:pacemaker:Dummy'
          - id: dummy-3
            agent: 'ocf:pacemaker:Dummy'
          - id: simple-clone
            agent: 'ocf:pacemaker:Dummy'
          - id: clone-with-options
            agent: 'ocf:pacemaker:Dummy'
        ha_cluster_resource_groups:
          - id: simple-group
            resource_ids:
              - dummy-1
              - dummy-2
            meta_attrs:
              - attrs:
                  - name: target-role
                    value: Started
                  - name: is-managed
                    value: 'true'
          - id: cloned-group
            resource_ids:
              - dummy-3
        ha_cluster_resource_clones:
          - resource_id: simple-clone
          - resource_id: clone-with-options
            promotable: yes
            id: custom-clone-id
            meta_attrs:
              - attrs:
                  - name: clone-max
                    value: '2'
                  - name: clone-node-max
                    value: '1'
          - resource_id: cloned-group
            promotable: yes
    
      roles:
        - rhel-system-roles.ha_cluster
  3. 保存该文件。
  4. 运行 playbook,指定在第 1 步中创建的清单文件清单的路径。

    # ansible-playbook -i inventory new-cluster.yml

22.5. 使用资源限制配置高可用性集群

以下流程使用 ha_cluster 系统角色创建高可用性集群,其包含资源位置约束、资源 colocation 约束、资源顺序限制和资源票据限制。

先决条件

  • 您已在要运行 playbook 的节点上安装了 ansible-core

    注意

    您不必在群集成员节点上安装 ansible-core

  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。

    有关 RHEL 系统角色以及如何应用它们的详情,请参阅 RHEL 系统角色入门

  • 作为群集成员运行 RHEL 的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
警告

ha_cluster 系统角色替换指定节点上任何现有的群集配置。没有在角色中指定的任何设置都将丢失。

流程

  1. 创建一个指定集群中节点的清单文件 ,如 为 ha_cluster 系统角色指定清单 中所述。
  2. 创建一个 playbook 文件,如 new-cluster.yml

    以下示例 playbook 文件配置了一个集群,其中包含资源位置限制、资源 colocation 约束、资源顺序限制和资源票据限制。在为生产环境创建 playbook 文件时,建议您用 vault 加密密码,如 使用 Ansible Vault 加密内容 中所述。

    - hosts: node1 node2
      vars:
        ha_cluster_cluster_name: my-new-cluster
        ha_cluster_hacluster_password: password
        # In order to use constraints, we need resources the constraints will apply
        # to.
        ha_cluster_resource_primitives:
          - id: xvm-fencing
            agent: 'stonith:fence_xvm'
            instance_attrs:
              - attrs:
                  - name: pcmk_host_list
                    value: node1 node2
          - id: dummy-1
            agent: 'ocf:pacemaker:Dummy'
          - id: dummy-2
            agent: 'ocf:pacemaker:Dummy'
          - id: dummy-3
            agent: 'ocf:pacemaker:Dummy'
          - id: dummy-4
            agent: 'ocf:pacemaker:Dummy'
          - id: dummy-5
            agent: 'ocf:pacemaker:Dummy'
          - id: dummy-6
            agent: 'ocf:pacemaker:Dummy'
        # location constraints
        ha_cluster_constraints_location:
          # resource ID and node name
          - resource:
              id: dummy-1
            node: node1
            options:
              - name: score
                value: 20
          # resource pattern and node name
          - resource:
              pattern: dummy-\d+
            node: node1
            options:
              - name: score
                value: 10
          # resource ID and rule
          - resource:
              id: dummy-2
            rule: '#uname eq node2 and date in_range 2022-01-01 to 2022-02-28'
          # resource pattern and rule
          - resource:
              pattern: dummy-\d+
            rule: node-type eq weekend and date-spec weekdays=6-7
        # colocation constraints
        ha_cluster_constraints_colocation:
          # simple constraint
          - resource_leader:
              id: dummy-3
            resource_follower:
              id: dummy-4
            options:
              - name: score
                value: -5
          # set constraint
          - resource_sets:
              - resource_ids:
                  - dummy-1
                  - dummy-2
              - resource_ids:
                  - dummy-5
                  - dummy-6
                options:
                  - name: sequential
                    value: "false"
            options:
              - name: score
                value: 20
        # order constraints
        ha_cluster_constraints_order:
          # simple constraint
          - resource_first:
              id: dummy-1
            resource_then:
              id: dummy-6
            options:
              - name: symmetrical
                value: "false"
          # set constraint
          - resource_sets:
              - resource_ids:
                  - dummy-1
                  - dummy-2
                options:
                  - name: require-all
                    value: "false"
                  - name: sequential
                    value: "false"
              - resource_ids:
                  - dummy-3
              - resource_ids:
                  - dummy-4
                  - dummy-5
                options:
                  - name: sequential
                    value: "false"
        # ticket constraints
        ha_cluster_constraints_ticket:
          # simple constraint
          - resource:
              id: dummy-1
            ticket: ticket1
            options:
              - name: loss-policy
                value: stop
          # set constraint
          - resource_sets:
              - resource_ids:
                  - dummy-3
                  - dummy-4
                  - dummy-5
            ticket: ticket2
            options:
              - name: loss-policy
                value: fence
    
      roles:
        - linux-system-roles.ha_cluster
  3. 保存该文件。
  4. 运行 playbook,指定在第 1 步中创建的清单文件清单的路径。

    # ansible-playbook -i inventory new-cluster.yml

22.6. 在带有 HA 集群系统角色的高可用性集群中配置 Apache HTTP 服务器

这个过程使用 HA 集群系统角色在双节点 Red Hat Enterprise Linux High Availability Add-On 集群中配置主动/被动 Apache HTTP 服务器。

先决条件

  • 您已在要运行 playbook 的节点上安装了 ansible-core

    注意

    您不必在群集成员节点上安装 ansible-core

  • 您已在要运行 playbook 的系统上安装了 rhel-system-roles 软件包。

    有关 RHEL 系统角色以及如何应用它们的详情,请参阅 RHEL 系统角色入门

  • 作为群集成员运行 RHEL 的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
  • 您的系统包括 Apache 需要的一个公共虚拟 IP 地址。
  • 您的系统包括集群中节点的共享存储,使用 iSCSI、光纤通道或其他共享网络块的设备。
  • 您已配置了带有 ext4 文件系统的 LVM 逻辑卷,如在 Pacemaker 集群中配置带有 ext4 文件系统的 LVM 卷 中所述。
  • 您已配置了 Apache HTTP 服务器,如 配置 Apache HTTP 服务器 中所述。
  • 您的系统包含一个用于隔离群集节点的 APC 电源开关。
警告

HA Cluster System Role 替换指定节点上的任何现有集群配置。没有在角色中指定的任何设置都将丢失。

流程

  1. 创建指定集群中的节点的清单文件,如为 HA Cluster System Role 指定清单中所述。
  2. 创建一个 playbook 文件,如 http-cluster.yml

    以下示例 playbook 文件在主动/被动双节点 HA 集群中配置之前创建的 Apache HTTP 服务器

    这个示例使用主机名为 zapc.example.com 的 APC 电源开关。如果集群不使用任何其他隔离代理,则您可以选择在定义 ha_cluster_fence_agent_packages 变量时只列出集群所需的隔离代理。

    在为生产环境创建 playbook 文件时,建议您用 vault 加密密码,如 使用 Ansible Vault 加密内容 中所述。

    - hosts: z1.example.com z2.example.com
      roles:
        - rhel-system-roles.ha_cluster
      vars:
        ha_cluster_hacluster_password: password
        ha_cluster_cluster_name: my_cluster
        ha_cluster_fence_agent_packages:
          - fence-agents-apc-snmp
        ha_cluster_resource_primitives:
          - id: myapc
            agent: stonith:fence_apc_snmp
            instance_attrs:
              - attrs:
                  - name: ipaddr
                    value: zapc.example.com
                  - name: pcmk_host_map
                    value: z1.example.com:1;z2.example.com:2
                  - name: login
                    value: apc
                  - name: passwd
                    value: apc
          - id: my_lvm
            agent: ocf:heartbeat:LVM-activate
            instance_attrs:
              - attrs:
                  - name: vgname
                    value: my_vg
                  - name: vg_access_mode
                    value: system_id
          - id: my_fs
            agent: Filesystem
            instance_attrs:
              - attrs:
                  - name: device
                    value: /dev/my_vg/my_lv
                  - name: directory
                    value: /var/www
                  - name: fstype
                    value: ext4
          - id: VirtualIP
            agent: IPaddr2
            instance_attrs:
              - attrs:
                  - name: ip
                    value: 198.51.100.3
                  - name: cidr_netmask
                    value: 24
          - id: Website
            agent: apache
            instance_attrs:
              - attrs:
                  - name: configfile
                    value: /etc/httpd/conf/httpd.conf
                  - name: statusurl
                    value: http://127.0.0.1/server-status
        ha_cluster_resource_groups:
          - id: apachegroup
            resource_ids:
              - my_lvm
              - my_fs
              - VirtualIP
              - Website
  3. 保存该文件。
  4. 运行 playbook,指定在第 1 步中创建的清单文件清单的路径。

    # ansible-playbook -i inventory http-cluster.yml

验证步骤

  1. 从集群中的一个节点检查集群的状态。请注意,所有四个资源都运行在同一个节点上,z1.example.com

    如果发现配置的资源没有运行,则您可以运行 pcs resource debug-start resource 命令来测试资源配置。

    [root@z1 ~]# pcs status
    Cluster name: my_cluster
    Last updated: Wed Jul 31 16:38:51 2013
    Last change: Wed Jul 31 16:42:14 2013 via crm_attribute on z1.example.com
    Stack: corosync
    Current DC: z2.example.com (2) - partition with quorum
    Version: 1.1.10-5.el7-9abe687
    2 Nodes configured
    6 Resources configured
    
    Online: [ z1.example.com z2.example.com ]
    
    Full list of resources:
     myapc  (stonith:fence_apc_snmp):       Started z1.example.com
     Resource Group: apachegroup
         my_lvm     (ocf::heartbeat:LVM-activate):   Started z1.example.com
         my_fs      (ocf::heartbeat:Filesystem):    Started z1.example.com
         VirtualIP  (ocf::heartbeat:IPaddr2):       Started z1.example.com
         Website    (ocf::heartbeat:apache):        Started z1.example.com
  2. 集群启动并运行后,您可以将浏览器指向定义为 IPaddr2 资源的 IP 地址,来查看示例显示,包含简单的单词"Hello"。

    Hello
  3. 要测试运行在 z1.example.com 上的资源组是否可以切换到节点 z2.example.com,请将节点 z1.example.com 置于 待机 模式,之后该节点将不能再托管资源。

    [root@z1 ~]# pcs node standby z1.example.com
  4. 将节点 z1 置于 待机 模式后,从集群中的某个节点检查集群状态。请注意,资源现在都应运行在 z2 上。

    [root@z1 ~]# pcs status
    Cluster name: my_cluster
    Last updated: Wed Jul 31 17:16:17 2013
    Last change: Wed Jul 31 17:18:34 2013 via crm_attribute on z1.example.com
    Stack: corosync
    Current DC: z2.example.com (2) - partition with quorum
    Version: 1.1.10-5.el7-9abe687
    2 Nodes configured
    6 Resources configured
    
    Node z1.example.com (1): standby
    Online: [ z2.example.com ]
    
    Full list of resources:
    
     myapc  (stonith:fence_apc_snmp):       Started z1.example.com
     Resource Group: apachegroup
         my_lvm     (ocf::heartbeat:LVM-activate):   Started z2.example.com
         my_fs      (ocf::heartbeat:Filesystem):    Started z2.example.com
         VirtualIP  (ocf::heartbeat:IPaddr2):       Started z2.example.com
         Website    (ocf::heartbeat:apache):        Started z2.example.com

    定义的 IP 地址的网页仍会显示,而不中断。

  5. 要从 待机 模式中删除 z1,请输入以下命令。

    [root@z1 ~]# pcs node unstandby z1.example.com
    注意

    待机 模式中删除节点本身不会导致资源切换到该节点。这将依赖于资源的 resource-stickiness 值。有关 resource-stickiness 元属性的详情,请参考 将资源配置到优先使用其的当前节点

22.7. 其他资源

  • RHEL 系统角色入门
  • rhel-system-roles 软件包一起安装的文档在 /usr/share/ansible/roles/rhel-system-roles.logging/README.html
  • RHEL 系统角色知识库文章
  • ansible-playbook(1) 手册页。

第 23 章 使用 cockpit RHEL 系统角色安装和配置 web 控制台

使用 cockpit RHEL 系统角色,您可以在系统中安装和配置 Web 控制台。

23.1. cockpit 系统角色

您可以使用 cockpit 系统角色自动部署和启用 Web 控制台,从而从 Web 浏览器管理 RHEL 系统。

23.2. cockpit RHEL 系统角色的变量

用于 cockpit RHEL 系统角色的参数有:

角色变量描述

cockpit_packages: (默认为 default)

设置其中一个预定义的软件包集:default、minimal 或 full。

* cockpit_packages:(默认为 default)- 最常见的页面和按需安装 UI

* cockpit_packages:(默认为 minimal)- 仅 Overview、Terminal、Logs、accounts 和 Metrics 页面;最小依赖项

* cockpit_packages:(默认为 full)- 所有可用的页面

(可选)指定您自己的 cockpit 软件包选择。

cockpit_enabled:(默认为 yes)

配置 web 控制台 web 服务器是否启用在系统引导时自动启动

cockpit_started:(默认为 yes)

配置 Web 控制台是否应启动

cockpit_config: (default: nothing)

您可以在 /etc/cockpit/cockpit.conf 文件中应用设置。注:之前的设置文件将会丢失。

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.cockpit/README.md 文件。
  • Cockpit 配置文件 man page。

23.3. 使用 cockpit RHEL 系统角色安装 web 控制台

按照以下步骤在您的系统上安装 Web 控制台并使其可以访问该服务。

先决条件

  • 对一个或多个 受管节点 的访问和权限,受管节点是您要使用 VPN 系统角色配置的系统。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
    • 列出受管节点的清单文件。

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    ---
    - hosts: all
      tasks:
        - name: Install RHEL web console
          include_role:
            name: rhel-system-roles.cockpit
          vars:
            cockpit_packages: default
            #cockpit_packages: minimal
            #cockpit_packages: full
    
        - name: Configure Firewall for web console
          include_role:
            name: rhel-system-roles.firewall
          vars:
            firewall:
              service: cockpit
              state: enabled
    注意

    firewalld 中默认打开 cockpit 端口,因此只有系统管理员自定义时,才会应用 "Configure Firewall for web 控制台" 任务。

  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check -i inventory_file playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file /path/to/file/playbook.yml

23.4. 使用证书 RHEL 系统角色设置新证书

默认情况下,Web 控制台在第一次启动时创建一个自签名证书。出于安全原因,您可以自定义自签名证书。要生成新的证书,您可以使用证书角色。为此,请按照以下步骤操作:

先决条件

  • 对一个或多个 受管节点 的访问和权限,受管节点是您要使用 VPN 系统角色配置的系统。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • ansible-corerhel-system-roles 软件包已安装 。
    • 列出受管节点的清单文件。

流程

  1. 创建包含以下内容的新 playbook2.yml 文件:

    ---
    - hosts: all
      tasks:
        - name: Generate Cockpit web server certificate
          include_role:
            name: rhel-system-roles.certificate
          vars:
            certificate_requests:
              - name: /etc/cockpit/ws-certs.d/01-certificate
                dns: ['localhost', 'www.example.com']
                ca: ipa
                group: cockpit-ws
  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check -i inventory_file playbook2.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file /path/to/file/playbook2.yml