RHEL システムロールを使用したシステム管理の自動化


Red Hat Enterprise Linux 8

Red Hat Ansible Automation Platform Playbook を使用して複数のホストに RHEL をデプロイするための一貫性および反復性のある設定

Red Hat Customer Content Services

概要

Red Hat Enterprise Linux (RHEL) システムロールは、一貫性および反復性のある RHEL システム管理を自動化するのに役立つ Ansible ロール、モジュール、および Playbook のコレクションです。RHEL システムロールを使用すると、単一のシステムから設定 Playbook を実行して、システムの大規模なインベントリーを効率的に管理できます。

Red Hat ドキュメントへのフィードバック (英語のみ)

Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。

Jira からのフィードバック送信 (アカウントが必要)

  1. Jira の Web サイトにログインします。
  2. 上部のナビゲーションバーで Create をクリックします。
  3. Summary フィールドにわかりやすいタイトルを入力します。
  4. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
  5. ダイアログの下部にある Create をクリックします。

第1章 RHEL システムロールの概要

RHEL システムロールを使用すると、複数の RHEL メジャーバージョンにわたる複数の RHEL システムのシステム設定をリモートで管理できます。

重要な用語と概念

以下では、Ansible 環境における重要な用語と概念を説明します。

コントロールノード
コントロールノードは、Ansible コマンドと Playbook を実行するシステムです。コントロールノードには、Ansible Automation Platform、Red Hat Satellite、または RHEL 9、8、または 7 ホストを使用できます。詳細は、RHEL 8 でのコントロールノードの準備 を参照してください。
管理対象ノード
管理対象ノードは、Ansible で管理するサーバーとネットワークデバイスです。管理対象ノードは、ホストと呼ばれることもあります。管理対象ノードに Ansible をインストールする必要はありません。詳細は、管理対象ノードの準備 を参照してください。
Ansible Playbook
Playbook では、管理対象ノード上で実現したい設定、または管理対象ノード上のシステムが実行する一連の手順を定義します。Playbook は、Ansible の設定、デプロイメント、およびオーケストレーションの言語です。
Inventory
インベントリーファイルでは、管理対象ノードをリストし、各管理対象ノードの IP アドレスなどの情報を指定します。インベントリーでは、管理対象ノードを整理し、グループを作成およびネストして、スケーリングを容易にすることもできます。インベントリーファイルは、ホストファイルと呼ばれることもあります。

Red Hat Enterprise Linux 9 コントロールノードで利用可能なロール

Red Hat Enterprise Linux 9 コントロールノードでは、rhel-system-roles パッケージが次のロールを提供します。

ロール名ロールの説明章のタイトル

certificate

証明書の発行および更新

RHEL システムロールを使用した証明書の要求

cockpit

Web コンソール

Cockpit RHEL システムロールを使用した Web コンソールのインストールと設定

crypto_policies

システム全体の暗号化ポリシー

システム間でのカスタム暗号化ポリシーの設定

ファイアウォール (firewall)

Firewalld

システムロールを使用した firewalld の設定

ha_cluster

HA クラスター

システムロールを使用した高可用性クラスターの設定

kdump

カーネルダンプ

RHEL システムロールを使用した kdump の設定

kernel_settings

カーネル設定

Ansible ロールを使用したカーネルパラメーターの永続的な設定

logging

ロギング

ロギングシステムロールの使用

metrics

メトリック (PCP)

RHEL システムロールを使用したパフォーマンスの監視

microsoft.sql.server

Microsoft SQL Server

Ansible ロール microsoft.sql.server を使用した Microsoft SQL Server の設定

network

ネットワーキング

network RHEL システムロールを使用した InfiniBand 接続の管理

nbde_client

ネットワークバインドディスク暗号化クライアント

nbde_client および nbde_server システムロールの使用

nbde_server

ネットワークバインドディスク暗号化サーバー

nbde_client および nbde_server システムロールの使用

postfix

postfix

システムロールの postfix ロールの変数

postgresql

PostgreSQL

postgresql RHEL システムロールを使用した PostgreSQL のインストールと設定

selinux

SELinux

システムロールを使用した SELinux の設定

ssh

SSH クライアント

ssh システムロールを使用したセキュアな通信の設定

sshd

SSH サーバー

ssh システムロールを使用したセキュアな通信の設定

storage

ストレージ

RHEL システムロールを使用したローカルストレージの管理

tlog

ターミナルセッションの記録

tlog RHEL システムロールを使用したセッション記録用システムの設定

timesync

時刻同期

RHEL システムロールを使用した時刻同期の設定

vpn

VPN

vpn RHEL システムロールを使用した IPsec による VPN 接続の設定

関連情報

第2章 RHEL システムロールを使用するためのコントロールノードと管理対象ノードの準備

個々の RHEL システムロールを使用してサービスと設定を管理するには、その前に、コントロールノードと管理対象ノードを準備する必要があります。

2.1. RHEL 8 でのコントロールノードの準備

RHEL システムロールを使用する前に、コントロールノードを設定する必要があります。次に、このシステムは、Playbook に従ってインベントリーから管理対象ホストを設定します。

前提条件

  • RHEL 8.6 以降がインストールされている。RHEL のインストールの詳細は、インストールメディアから RHEL を対話的にインストールする を参照してください。

    注記

    RHEL 8.5 以前のバージョンでは、Ansible パッケージは Ansible Core ではなく Ansible Engine を通じて提供され、さまざまなサポートレベルが提供されていました。パッケージは RHEL 8.6 以降の Ansible Automation コンテンツと互換性がない可能性があるため、Ansible Engine は使用しないでください。詳細は、Scope of support for the Ansible Core package included in the RHEL 9 and RHEL 8.6 and later AppStream repositories を参照してください。

  • システムはカスタマーポータルに登録されます。
  • Red Hat Enterprise Linux Server サブスクリプションがシステムにアタッチされている。
  • オプション: Ansible Automation Platform サブスクリプションがシステムにアタッチされている。

手順

  1. Playbook を管理および実行するための ansible という名前のユーザーを作成します。

    [root@control-node]# useradd ansible
  2. 新しく作成した ansible ユーザーに切り替えます。

    [root@control-node]# su - ansible

    このユーザーとして残りの手順を実行します。

  3. SSH の公開鍵と秘密鍵を作成します。

    [ansible@control-node]$ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/ansible/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase): <password>
    Enter same passphrase again: <password>
    ...

    キーファイルの推奨されるデフォルトの場所を使用します。

  4. オプション: 接続を確立するたびに Ansible が SSH キーのパスワードを要求しないように、SSH エージェントを設定します。
  5. ~/.ansible.cfg ファイルを次の内容で作成します。

    [defaults]
    inventory = /home/ansible/inventory
    remote_user = ansible
    
    [privilege_escalation]
    become = True
    become_method = sudo
    become_user = root
    become_ask_pass = True
    注記

    ~/.ansible.cfg ファイルの設定は優先度が高く、グローバルな /etc/ansible/ansible.cfg ファイルの設定をオーバーライドします。

    これらの設定を使用して、Ansible は次のアクションを実行します。

    • 指定されたインベントリーファイルでホストを管理します。
    • 管理対象ノードへの SSH 接続を確立するときに、remote_user パラメーターで設定されたアカウントを使用します。
    • sudo ユーティリティーを使用して、root ユーザーとして管理対象ノードでタスクを実行します。
    • Playbook を適用するたびに、リモートユーザーの root パスワードの入力を求められます。これは、セキュリティー上の理由から推奨されます。
  6. 管理対象ホストのホスト名をリストする ~/inventory ファイルを INI または YAML 形式で作成します。インベントリーファイルでホストのグループを定義することもできます。たとえば、以下は、3 つのホストと US という名前の 1 つのホストグループを含む INI 形式のインベントリーファイルです。

    managed-node-01.example.com
    
    [US]
    managed-node-02.example.com ansible_host=192.0.2.100
    managed-node-03.example.com

    コントロールノードはホスト名を解決できる必要があることに注意してください。DNS サーバーが特定のホスト名を解決できない場合は、ホストエントリーの横に ansible_host パラメーターを追加して、その IP アドレスを指定します。

  7. RHEL システムロールをインストールします。

    • Ansible Automation Platform のない RHEL ホストに、rhel-system-roles パッケージをインストールします。

      [root@control-node]# yum install rhel-system-roles

      このコマンドは、/usr/share/ansible/collections/ansible_collections/redhat/rhel_system_roles/ ディレクトリーにコレクションをインストールし、依存関係として ansible-core パッケージをインストールします。

    • Ansible Automation Platform で、ansible ユーザーとして次の手順を実行します。

      1. ~/.ansible.cfg ファイルで コンテンツのプライマリーソースとして Red Hat Automation Hub を定義します
      2. Red Hat Automation Hub から redhat.rhel_system_roles コレクションをインストールします。

        [ansible@control-node]$ ansible-galaxy collection install redhat.rhel_system_roles

        このコマンドは、コレクションを ~/.ansible/collections/ansible_collections/redhat/rhel_system_roles/ ディレクトリーにインストールします。

次のステップ

2.2. 管理対象ノードの準備

管理対象ノードはインベントリーにリストされているシステムであり、Playbook に従ってコントロールノードによって設定されます。管理対象ホストに Ansible をインストールする必要はありません。

前提条件

  • コントロールノードを準備している。詳細は、RHEL 8 でのコントロールノードの準備 を参照してください。
  • コントロールノードから SSH アクセスできる。

    重要

    root ユーザーとしての直接 SSH アクセスはセキュリティーリスクを引き起こします。このリスクを軽減するには、管理対象ノードを準備するときに、このノード上にローカルユーザーを作成し、sudo ポリシーを設定します。続いて、コントロールノードの Ansible は、ローカルユーザーアカウントを使用して管理対象ノードにログインし、root などの別のユーザーとして Playbook を実行できます。

手順

  1. ansible という名前のユーザーを作成します。

    [root@managed-node-01]# useradd ansible

    コントロールノードは後でこのユーザーを使用して、このホストへの SSH 接続を確立します。

  2. ansible ユーザーのパスワードを設定します。

    [root@managed-node-01]# passwd ansible
    Changing password for user ansible.
    New password: <password>
    Retype new password: <password>
    passwd: all authentication tokens updated successfully.

    Ansible が sudo を使用して root ユーザーとしてタスクを実行する場合は、このパスワードを入力する必要があります。

  3. ansible ユーザーの SSH 公開鍵を管理対象ノードにインストールします。

    1. ansible ユーザーとしてコントロールノードにログインし、SSH 公開鍵を管理対象ノードにコピーします。

      [ansible@control-node]$ ssh-copy-id managed-node-01.example.com
      /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible/.ssh/id_rsa.pub"
      The authenticity of host 'managed-node-01.example.com (192.0.2.100)' can't be established.
      ECDSA key fingerprint is SHA256:9bZ33GJNODK3zbNhybokN/6Mq7hu3vpBXDrCxe7NAvo.
    2. プロンプトが表示されたら、yes と入力して接続します。

      Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
      /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
      /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    3. プロンプトが表示されたら、パスワードを入力します。

      ansible@managed-node-01.example.com's password: <password>
      
      Number of key(s) added: 1
      
      Now try logging into the machine, with:   "ssh 'managed-node-01.example.com'"
      and check to make sure that only the key(s) you wanted were added.
    4. コントロールノードでコマンドをリモートで実行して、SSH 接続を確認します。

      [ansible@control-node]$ ssh managed-node-01.example.com whoami
      ansible
  4. ansible ユーザーの sudo 設定を作成します。

    1. visudo コマンドを使用して、/etc/sudoers.d/ansible ファイルを作成および編集します。

      [root@managed-node-01]# visudo /etc/sudoers.d/ansible

      通常のエディターではなく visudo を使用する利点は、このユーティリティーがファイルをインストールする前に解析エラーなどの基本的なチェックを提供する点にあります。

    2. /etc/sudoers.d/ansible ファイルで、要件に応じた sudoers ポリシーを設定します。次に例を示します。

      • ansible ユーザーのパスワードを入力した後、このホスト上で任意のユーザーおよびグループとしてすべてのコマンドを実行する権限を ansible ユーザーに付与するには、以下を使用します。

        ansible   ALL=(ALL) ALL
      • ansible ユーザーのパスワードを入力せずに、このホスト上で任意のユーザーおよびグループとしてすべてのコマンドを実行する権限を ansible ユーザーに付与するには、以下を使用します。

        ansible   ALL=(ALL) NOPASSWD: ALL

    または、セキュリティー要件に合わせてより細かいポリシーを設定します。sudoers ポリシーの詳細は、sudoers(5) man ページを参照してください。

検証

  1. すべての管理対象ノード上のコントロールノードからコマンドを実行できることを確認します。

    [ansible@control-node]$ ansible all -m ping
    BECOME password: <password>
    managed-node-01.example.com | SUCCESS => {
        	"ansible_facts": {
        	    "discovered_interpreter_python": "/usr/bin/python3"
        	},
        	"changed": false,
        	"ping": "pong"
    }
    ...

    ハードコーディングされたすべてのホストグループには、インベントリーファイルにリストされているすべてのホストが動的に含まれます。

  2. Ansible command モジュールを使用して管理対象ノードで whoami ユーティリティーを実行し、権限昇格が正しく機能することを確認します。

    [ansible@control-node]$ ansible all -m command -a whoami
    BECOME password: <password>
    managed-node-01.example.com | CHANGED | rc=0 >>
    root
    ...

    コマンドが root を返した場合、管理対象ノード上で sudo が正しく設定されています。

関連情報

第3章 Ansible vault

場合によっては、Playbook で、管理対象ホストを設定するために、パスワード、API キー、その他のシークレットなどの機密データを使用する必要があります。この情報を変数またはその他の Ansible 互換ファイルにプレーンテキストで保存すると、それらのファイルにアクセスできるすべてのユーザーが機密データを読み取ることができるため、セキュリティー上のリスクが生じます。

Ansible Vault を使用すると、機密情報を暗号化、復号、表示、および編集できます。それらは次のように含めることができます。

  • Ansible Playbook に挿入した変数ファイル
  • ホスト変数とグループ変数
  • Playbook を実行するときに引数として渡される変数ファイル
  • Ansible ロールで定義された変数

Ansible Vault を使用すると、個々の変数、ファイル全体、さらには YAML ファイルなどの構造化データを安全に管理できます。このデータはバージョン管理システムに安全に保存したり、機密情報を公開することなくチームメンバーと共有したりできます。

重要

ファイルは、Advanced Encryption Standard (AES256) の対称暗号化によって保護されており、データの暗号化と復号の両方に単一のパスワードまたはパスフレーズが使用されます。この方法は第三者によって正式に監査されていないことに注意してください。

管理を簡素化するには、機密変数とその他のすべての変数が別々のファイルまたはディレクトリーに保存されるように Ansible プロジェクトを設定するのが合理的です。次に、ansible-vault コマンドを使用して機密変数を含むファイルを保護できます。

暗号化されたファイルの作成

次のコマンドは、新しい Vault パスワードの入力を求めます。次に、デフォルトのエディターを使用して機密変数を保存するためのファイルを開きます。

# ansible-vault create vault.yml
New Vault password: <vault_password>
Confirm New Vault password: <vault_password>

暗号化されたファイルの表示

次のコマンドは、既存の Vault パスワードの入力を求めます。次に、すでに暗号化されたファイルの機密コンテンツを表示します。

# ansible-vault view vault.yml
Vault password: <vault_password>
my_secret: "yJJvPqhsiusmmPPZdnjndkdnYNDjdj782meUZcw"

暗号化ファイルの編集

次のコマンドは、既存の Vault パスワードの入力を求めます。次に、すでに暗号化されたファイルを開き、デフォルトのエディターを使用して機密変数を更新します。

# ansible-vault edit vault.yml
Vault password: <vault_password>

既存のファイルの暗号化

次のコマンドは、新しい Vault パスワードの入力を求めます。次に、既存の暗号化されていないファイルを暗号化します。

# ansible-vault encrypt vault.yml
New Vault password: <vault_password>
Confirm New Vault password: <vault_password>
Encryption successful

既存のファイルの復号

次のコマンドは、既存の Vault パスワードの入力を求めます。次に、既存の暗号化されたファイルを復号します。

# ansible-vault decrypt vault.yml
Vault password: <vault_password>
Decryption successful

暗号化されたファイルのパスワードを変更する

次のコマンドは、元の Vault パスワードの入力を求め、次に新しい Vault パスワードの入力を求めます。

# ansible-vault rekey vault.yml
Vault password: <vault_password>
New Vault password: <vault_password>
Confirm New Vault password: <vault_password>
Rekey successful

Playbook での Ansible vault 変数の基本的な適用

---
- name: Create user accounts for all servers
  hosts: managed-node-01.example.com
  vars_files:
    - vault.yml
  tasks:
    - name: Create user from vault.yml file
      user:
        name: "{{ username }}"
        password: "{{ pwhash }}"

Ansible Playbook の vars_files セクションに変数を含むファイル (vault.yml) を読み込み、通常の変数と同じように中括弧を使用します。次に、ansible-playbook --ask-vault-pass コマンドを使用して Playbook を実行し、パスワードを手動で入力します。または、パスワードを別のファイルに保存し、ansible-playbook --vault-password-file /path/to/my/vault-password-file コマンドを使用して Playbook を実行します。

関連情報

第4章 RHEL の Ansible IPMI モジュール

4.1. rhel_mgmt コレクション

Intelligent Platform Management Interface (IPMI) は、ベースボード管理コントローラー (BMC) デバイスと通信するための一連の標準プロトコルの仕様です。IPMI モジュールを使用すると、ハードウェア管理の自動化を有効にしてサポートできます。IPMI モジュールは次の場所で使用できます。

  • rhel_mgmt コレクション。パッケージ名は ansible-collection-redhat-rhel_mgmt です。
  • 新しい ansible-collection-redhat-rhel_mgmt パッケージの一部である RHEL 8 AppStream。

次の IPMI モジュールが rhel_mgmt コレクションで使用可能です。

  • ipmi_boot: ブートデバイスの順序の管理
  • ipmi_power: マシンの電力管理

IPMI モジュールに使用される必須パラメーターは次のとおりです。

  • ipmi_boot パラメーター:
モジュール名説明

name

BMC のホスト名または IP アドレス。

password

BMC に接続するためのパスワード

bootdev

次回起動時に使用するデバイス

* network

* floppy

* hd

* safe

* optical

* setup

* default

User

BMC に接続するためのユーザー名

  • ipmi_power パラメーター:
モジュール名説明

name

BMC ホスト名または IP アドレス

password

BMC に接続するためのパスワード

user

BMC に接続するためのユーザー名

State

マシンが目的のステータスにあるかどうかを確認します

* on

* off

* shutdown

* reset

* boot

4.2. ipmi_boot モジュールの使用

次の例は、Playbook で ipmi_boot モジュールを使用して、次回の起動用に起動デバイスを設定する方法を示しています。わかりやすくするために、ここに示す例では Ansible コントロールホストおよびマネージドホストと同じホストを使用しているため、Playbook が実行されるのと同じホストでモジュールを実行します。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • ansible-collection-redhat-rhel_mgmt パッケージがインストールされている。
  • python3-pyghmi パッケージが、コントロールノードまたは管理対象ノードのいずれかにインストールされている。
  • 制御する IPMI BMC に、コントロールノードまたは管理対象ホスト (管理対象ホストとして localhost を使用していない場合) からネットワーク経由でアクセスできる。モジュールが IPMI プロトコルを使用してネットワーク経由で BMC に接続するため、通常、モジュールによって BMC が設定されているホストは、管理対象ホストとは異なることに注意してください。
  • 適切なレベルのアクセスで BMC にアクセスするためのクレデンシャルがあります。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Set boot device to be used on next boot
      hosts: managed-node-01.example.com
      tasks:
        - name: Ensure boot device is HD
          redhat.rhel_mgmt.ipmi_boot:
            user: <admin_user>
            password: <password>
            bootdev: hd
  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • Playbook を実行すると、Ansible が success を返します。

関連情報

  • /usr/share/ansible/collections/ansible_collections/redhat/rhel_mgmt/README.md ファイル

4.3. ipmi_power モジュールの使用

この例は、Playbook で ipmi_boot モジュールを使用して、システムがオンになっているかどうかを確認する方法を示しています。わかりやすくするために、ここに示す例では Ansible コントロールホストおよびマネージドホストと同じホストを使用しているため、Playbook が実行されるのと同じホストでモジュールを実行します。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • ansible-collection-redhat-rhel_mgmt パッケージがインストールされている。
  • python3-pyghmi パッケージが、コントロールノードまたは管理対象ノードのいずれかにインストールされている。
  • 制御する IPMI BMC に、コントロールノードまたは管理対象ホスト (管理対象ホストとして localhost を使用していない場合) からネットワーク経由でアクセスできる。モジュールが IPMI プロトコルを使用してネットワーク経由で BMC に接続するため、通常、モジュールによって BMC が設定されているホストは、管理対象ホストとは異なることに注意してください。
  • 適切なレベルのアクセスで BMC にアクセスするためのクレデンシャルがあります。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Power management
      hosts: managed-node-01.example.com
      tasks:
        - name: Ensure machine is powered on
          redhat.rhel_mgmt.ipmi_power:
            user: <admin_user>
            password: <password>
            state: on
  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • Playbook を実行すると、Ansible が true を返します。

関連情報

  • /usr/share/ansible/collections/ansible_collections/redhat/rhel_mgmt/README.md ファイル

第5章 RHEL の Redfish モジュール

デバイスのリモート管理用の Redfish モジュールは、redhat.rhel_mgmt Ansible コレクションの一部になりました。Redfish モジュールを使用すると、標準の HTTPS トランスポートと JSON 形式を使用して、サーバーに関する情報を取得したり、帯域外 (OOB) コントローラーを介してそれらを制御したりして、ベアメタルサーバーとプラットフォームハードウェアで管理の自動化を簡単に使用できます。

5.1. Redfish モジュール

redhat.rhel_mgmt Ansible コレクションは、Redfish 上の Ansible でのハードウェア管理をサポートする Redfish モジュールを提供します。redhat.rhel_mgmt コレクションは ansible-collection-redhat-rhel_mgmt パッケージで利用できます。インストールするには、CLI を使用した redhat.rhel_mgmt コレクションのインストール を参照してください。

次の Redfish モジュールは、redhat.rhel_mgmt コレクションで利用できます。

  1. redfish_info: redfish_info モジュールは、システムインベントリーなどのリモートアウトオブバンド (OOB) コントローラーに関する情報を取得します。
  2. redfish_command: redfish_command モジュールは、ログ管理やユーザー管理などの帯域外 (OOB) コントローラー操作と、システムの再起動、電源のオンとオフなどの電源操作を実行します。
  3. redfish_config: redfish_config モジュールは、OOB 設定の変更や BIOS 設定の設定などの OOB コントローラー操作を実行します。

5.2. Redfish モジュールのパラメーター

Redfish モジュールに使用されるパラメーターは次のとおりです。

redfish_info パラメーター:説明

baseuri

(必須) - OOB コントローラーのベース URI。

category

(必須) - OOB コントローラーで実行するカテゴリーのリスト。デフォルト値は ["Systems"] です。

command

(必須) - OOB コントローラーで実行するコマンドのリスト。

username

OOB コントローラーへの認証用のユーザー名。

password

OOB コントローラーへの認証用のパスワード。

redfish_command パラメーター:説明

baseuri

(必須) - OOB コントローラーのベース URI。

category

(必須) - OOB コントローラーで実行するカテゴリーのリスト。デフォルト値は ["Systems"] です。

command

(必須) - OOB コントローラーで実行するコマンドのリスト。

username

OOB コントローラーへの認証用のユーザー名。

password

OOB コントローラーへの認証用のパスワード。

redfish_config パラメーター:説明

baseuri

(必須) - OOB コントローラーのベース URI。

category

(必須) - OOB コントローラーで実行するカテゴリーのリスト。デフォルト値は ["Systems"] です。

command

(必須) - OOB コントローラーで実行するコマンドのリスト。

username

OOB コントローラーへの認証用のユーザー名。

password

OOB コントローラーへの認証用のパスワード。

bios_attributes

更新する BIOS 属性。

5.3. redfish_info モジュールの使用

次の例は、Playbook で redfish_info モジュールを使用して CPU インベントリーに関する情報を取得する方法を示しています。わかりやすくするために、ここに示す例では Ansible コントロールホストおよび管理対象ホストと同じホストを使用しているため、Playbook が実行されるのと同じホストでモジュールを実行します。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • ansible-collection-redhat-rhel_mgmt パッケージがインストールされている。
  • python3-pyghmi パッケージが、コントロールノードまたは管理対象ノードのいずれかにインストールされている。
  • OOB コントローラーアクセスの詳細。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Manage out-of-band controllers using Redfish APIs
      hosts: managed-node-01.example.com
      tasks:
        - name: Get CPU inventory
          redhat.rhel_mgmt.redfish_info:
            baseuri: "<URI>"
            username: "<username>"
            password: "<password>"
            category: Systems
            command: GetCpuInventory
          register: result
  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • Playbook を実行すると、Ansible が CPU インベントリーの詳細を返します。

関連情報

  • /usr/share/ansible/collections/ansible_collections/redhat/rhel_mgmt/README.md ファイル

5.4. redfish_command モジュールの使用

次の例は、playbook で redfish_command モジュールを使用してシステムをオンにする方法を示しています。わかりやすくするために、ここに示す例では Ansible コントロールホストおよび管理対象ホストと同じホストを使用しているため、Playbook が実行されるのと同じホストでモジュールを実行します。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • ansible-collection-redhat-rhel_mgmt パッケージがインストールされている。
  • python3-pyghmi パッケージが、コントロールノードまたは管理対象ノードのいずれかにインストールされている。
  • OOB コントローラーアクセスの詳細。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Manage out-of-band controllers using Redfish APIs
      hosts: managed-node-01.example.com
      tasks:
        - name: Power on system
          redhat.rhel_mgmt.redfish_command:
            baseuri: "<URI>"
            username: "<username>"
            password: "<password>"
            category: Systems
            command: PowerOn
  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • システムの電源がオンになります。

関連情報

  • /usr/share/ansible/collections/ansible_collections/redhat/rhel_mgmt/README.md ファイル

5.5. redfish_config モジュールの使用

次の例は、Playbook で redfish_config モジュールを使用して、UEFI で起動するようにシステムを設定する方法を示しています。わかりやすくするために、ここに示す例では Ansible コントロールホストおよび管理対象ホストと同じホストを使用しているため、Playbook が実行されるのと同じホストでモジュールを実行します。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • ansible-collection-redhat-rhel_mgmt パッケージがインストールされている。
  • python3-pyghmi パッケージが、コントロールノードまたは管理対象ノードのいずれかにインストールされている。
  • OOB コントローラーアクセスの詳細。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Manages out-of-band controllers using Redfish APIs
      hosts: managed-node-01.example.com
      tasks:
        - name: Set BootMode to UEFI
          redhat.rhel_mgmt.redfish_config:
            baseuri: "<URI>"
            username: "<username>"
            password: "<password>"
    	category: Systems
            command: SetBiosAttributes
            bios_attributes:
              BootMode: Uefi
  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • システムの起動モードが UEFI に設定されます。

関連情報

  • /usr/share/ansible/collections/ansible_collections/redhat/rhel_mgmt/README.md ファイル

第6章 RHEL システムロールを使用した Active Directory への RHEL システムの参加

組織で Microsoft Active Directory (AD) を使用してユーザー、グループ、およびその他のリソースを集中管理している場合は、Red Hat Enterprise Linux (RHEL) ホストを Microsoft AD に参加させることができます。たとえば、AD ユーザーが RHEL にログインできるようになり、認証された AD ユーザーが RHEL ホスト上のサービスを利用できるようになります。ad_integration RHEL システムロールを使用すると、Red Hat Enterprise Linux システムの Active Directory (AD) ドメインへの統合を自動化できます。

注記

ad_integration ロールは、Identity Management (IdM) 環境を使用せずに直接 AD 統合を使用するデプロイメント用です。IdM 環境の場合は、ansible-freeipa ロールを使用します。

6.1. ad_integration RHEL システムロールを使用した Active Directory への RHEL システムの参加

ad_integration RHEL システムロールを使用すると、RHEL を Active Directory (AD) ドメインに参加させるプロセスを自動化できます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • 管理対象ノードが、AD の DNS エントリーを解決できる DNS サーバーを使用している。
  • コンピューターをドメインに参加させる権限を持つ AD アカウントの認証情報がある。
  • 管理対象ノードが、次のポートを使用して AD のドメインコントローラーへの接続を確立できる。

    送信元ポート送信先ポートプロトコルサービス

    1024 - 65535

    53

    UDP および TCP

    DNS

    1024 - 65535

    389

    UDP および TCP

    LDAP

    1024 - 65535

    636

    TCP

    LDAPS

    1024 - 65535

    88

    UDP および TCP

    Kerberos

    1024 - 65535

    464

    UDP および TCP

    Kerberos パスワード変更リクエスト

    1024 - 65535

    3268

    TCP

    LDAP グローバルカタログ

    1024 - 65535

    3269

    TCP

    LDAPS グローバルカタログ

    1024 - 65535

    123

    UDP

    NTP (時刻同期が有効な場合)

    1024 - 65535

    323

    UDP

    NTP (時刻同期が有効な場合)

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      usr: administrator
      pwd: <password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Active Directory integration
      hosts: managed-node-01.example.com
      vars_files:
        - vault.yml
      tasks:
        - name: Join an Active Directory
          ansible.builtin.include_role:
            name: rhel-system-roles.ad_integration
          vars:
            ad_integration_user: "{{ usr }}"
            ad_integration_password: "{{ pwd }}"
            ad_integration_realm: "ad.example.com"
            ad_integration_allow_rc4_crypto: false
            ad_integration_timesync_source: "time_server.ad.example.com"

    サンプル Playbook で指定されている設定は次のとおりです。

    ad_integration_allow_rc4_crypto: <true|false>

    ロールが管理対象ノードで AD-SUPPORT 暗号化ポリシーを有効にするかどうかを設定します。デフォルトでは、RHEL は脆弱な RC4 暗号化をサポートしていませんが、それでも AD 内の Kerberos で RC4 が必要な場合は、ad_integration_allow_rc4_crypto: true を設定することでこの暗号化タイプを有効にできます。

    Kerberos が AES 暗号化を使用する場合は、この変数を省略するか、false に設定します。

    ad_integration_timesync_source: <time_server>
    時刻同期に使用する NTP サーバーを指定します。Kerberos は、リプレイ攻撃を防ぐために、AD のドメインコントローラーとドメインメンバー間の時刻同期を必要とします。この変数を省略すると、ad_integration ロールは、管理対象ノードで時刻同期を設定するために timesync RHEL システムロールを使用しません。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.ad_integration/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

検証

  • administrator などの AD ユーザーが管理対象ノードでローカルに使用可能かどうかを確認します。

    $ ansible managed-node-01.example.com -m command -a 'getent passwd administrator@ad.example.com'
    administrator@ad.example.com:*:1450400500:1450400513:Administrator:/home/administrator@ad.example.com:/bin/bash

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ad_integration/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ad_integration/ ディレクトリー
  • Ansible vault

第7章 RHEL システムロールを使用した CA からの証明書の要求および自己署名証明書の作成

Web サーバーなどの多くのサービスは、TLS を使用してクライアントとの接続を暗号化します。これらのサービスには、秘密鍵と証明書、および証明書に署名する信頼できる認証局 (CA) が必要です。

certificate RHEL システムロールを使用すると、管理対象ノードでの秘密鍵の生成を自動化できます。さらに、このロールは、証明書署名要求 (CSR) を CA に送信するように certmonger サービスを設定し、証明書が期限切れになる前にサービスが自動的に証明書を更新します。

テスト目的の場合は、certificate ロールを使用して、CA から署名済み証明書を要求する代わりに、自己署名証明書を作成できます。

7.1. certificate RHEL システムロールを使用した IdM CA からの新しい証明書の要求

Red Hat Enterprise Linux ホストが RHEL Identity Management (IdM) 環境のメンバーである場合、IdM 認証局 (CA) から TLS 証明書を要求し、このホストで実行されるサービスでその証明書を使用できます。certificate RHEL システムロールを使用すると、秘密鍵を作成するプロセスと、certmonger サービスが CA から証明書を要求するプロセスを自動化できます。また、certmonger は、デフォルトで証明書の有効期限が切れる前に更新を行います。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • 管理対象ノードが IdM ドメインのメンバーであり、そのドメインで IdM 統合 CA を使用している。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Create certificates
      hosts: managed-node-01.example.com
      tasks:
        - name: Create a self-signed certificate
          ansible.builtin.include_role:
            name: rhel-system-roles.certificate
          vars:
            certificate_requests:
              - name: web-server
                ca: ipa
                dns: www.example.com
                principal: HTTP/www.example.com@EXAMPLE.COM
                run_before: systemctl stop httpd.service
                run_after: systemctl start httpd.service

    サンプル Playbook で指定されている設定は次のとおりです。

    name: <path_or_file_name>

    生成される秘密鍵と証明書ファイルの名前またはパスを定義します。

    • 変数を web-server に設定すると、ロールによって秘密鍵が /etc/pki/tls/private/web-server.key に保存され、証明書が /etc/pki/tls/certs/web-server.crt ファイルに保存されます。
    • 変数を /tmp/web-server などのパスに設定すると、ロールによって秘密鍵が /tmp/web-server.key に保存され、証明書が /tmp/web-server.crt ファイルに保存されます。

      使用するディレクトリーに cert_t SELinux コンテキストが設定されている必要があることに注意してください。SELinux コンテキストは、selinux RHEL システムロールを使用して管理できます。

    ca: ipa
    ロールが IdM CA から証明書を要求することを指定します。
    dns: <hostname_or_list_of_hostnames>
    発行された証明書のサブジェクト代替名 (SAN) フィールドに含まれるホスト名を設定します。ワイルドカード (*) を使用することも、YAML リスト形式で複数の名前を指定することもできます。
    principal: <kerberos_principal>
    オプション: 証明書に含める Kerberos プリンシパルを設定します。
    run_before: <command>
    オプション: CA から証明書を要求する前に certmonger が実行するコマンドを定義します。
    run_after: <command>
    オプション: CA から発行された証明書を受け取った後に certmonger が実行するコマンドを定義します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.certificate/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • certmonger サービスが管理する証明書をリスト表示します。

    # ansible managed-node-01.example.com -m command -a 'getcert list'
    ...
    Number of certificates and requests being tracked: 1.
    Request ID '20240918142211':
            status: MONITORING
            stuck: no
            key pair storage: type=FILE,location='/etc/pki/tls/private/web-server.key'
            certificate: type=FILE,location='/etc/pki/tls/certs/web-server.crt'
            CA: IPA
            issuer: CN=Certificate Authority,O=EXAMPLE.COM
            subject: CN=www.example.com
            issued: 2024-09-18 16:22:11 CEST
            expires: 2025-09-18 16:22:10 CEST
            dns: www.example.com
            key usage: digitalSignature,keyEncipherment
            eku: id-kp-serverAuth,id-kp-clientAuth
            pre-save command: systemctl stop httpd.service
            post-save command: systemctl start httpd.service
            track: yes
            auto-renew: yes

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.certificate/README.md ファイル
  • /usr/share/doc/rhel-system-roles/certificate/ ディレクトリー

7.2. certificate RHEL システムロールを使用した新しい自己署名証明書の要求

テスト環境に TLS 証明書が必要な場合は、自己署名証明書を使用できます。certificate RHEL システムロールを使用すると、秘密鍵を作成するプロセスと、certmonger サービスで自己署名証明書を作成するプロセスを自動化できます。また、certmonger は、デフォルトで証明書の有効期限が切れる前に更新を行います。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Create certificates
      hosts: managed-node-01.example.com
      tasks:
        - name: Create a self-signed certificate
          ansible.builtin.include_role:
            name: rhel-system-roles.certificate
          vars:
            certificate_requests:
              - name: web-server
                ca: self-sign
                dns: test.example.com

    サンプル Playbook で指定されている設定は次のとおりです。

    name: <path_or_file_name>

    生成される秘密鍵と証明書ファイルの名前またはパスを定義します。

    • 変数を web-server に設定すると、ロールによって秘密鍵が /etc/pki/tls/private/web-server.key に保存され、証明書が /etc/pki/tls/certs/web-server.crt ファイルに保存されます。
    • 変数を /tmp/web-server などのパスに設定すると、ロールによって秘密鍵が /tmp/web-server.key に保存され、証明書が /tmp/web-server.crt ファイルに保存されます。

      使用するディレクトリーに cert_t SELinux コンテキストが設定されている必要があることに注意してください。SELinux コンテキストは、selinux RHEL システムロールを使用して管理できます。

    ca: self-sign
    ロールで自己署名証明書を作成することを指定します。
    dns: <hostname_or_list_of_hostnames>
    発行された証明書のサブジェクト代替名 (SAN) フィールドに含まれるホスト名を設定します。ワイルドカード (*) を使用することも、YAML リスト形式で複数の名前を指定することもできます。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.certificate/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • certmonger サービスが管理する証明書をリスト表示します。

    # ansible managed-node-01.example.com -m command -a 'getcert list'
    ...
    Number of certificates and requests being tracked: 1.
    Request ID '20240918133610':
    	status: MONITORING
    	stuck: no
    	key pair storage: type=FILE,location='/etc/pki/tls/private/web-server.key'
    	certificate: type=FILE,location='/etc/pki/tls/certs/web-server.crt'
    	CA: local
    	issuer: CN=c32b16d7-5b1a4c5a-a953a711-c3ca58fb,CN=Local Signing Authority
    	subject: CN=test.example.com
    	issued: 2024-09-18 15:36:10 CEST
    	expires: 2025-09-18 15:36:09 CEST
    	dns: test.example.com
    	key usage: digitalSignature,keyEncipherment
    	eku: id-kp-serverAuth,id-kp-clientAuth
    	pre-save command:
    	post-save command:
    	track: yes
    	auto-renew: yes

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.certificate/README.md ファイル
  • /usr/share/doc/rhel-system-roles/certificate/ ディレクトリー

第8章 RHEL システムロールを使用した Web コンソールのインストールおよび設定

cockpit RHEL システムロールを使用すると、複数の RHEL システムに Web コンソールを自動的にデプロイして有効にできます。

8.1. cockpit RHEL システムロールを使用した Web コンソールのインストール

cockpit システムロールを使用すると、複数のシステムで RHEL Web コンソールのインストールと有効化を自動化できます。

この例では、cockpit システムロールを使用して次のことを行います。

  • RHEL Web コンソールをインストールする
  • カスタムポート番号 (9050/tcp) を使用するように Web コンソールを設定します。デフォルトでは、Web コンソールはポート 9090 を使用します。
  • 新しいポートを開くためにシステムを設定できるように、firewalld および selinux システムロールを許可します。
  • 自己署名証明書を使用する代わりに、ipa の信頼された認証局からの証明書を使用するように Web コンソールを設定する
注記

ファイアウォールを管理したり証明書を作成したりするために、Playbook で firewall または certificate システムロールを呼び出す必要はありません。cockpit システムロールが、必要に応じてそれらを自動的に呼び出します。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Manage the RHEL web console
      hosts: managed-node-01.example.com
      tasks:
        - name: Install RHEL web console
          ansible.builtin.include_role:
            name: rhel-system-roles.cockpit
          vars:
            cockpit_packages: default
            cockpit_port: 9050
            cockpit_manage_selinux: true
            cockpit_manage_firewall: true
            cockpit_certificates:
              - name: /etc/cockpit/ws-certs.d/01-certificate
                dns: ['localhost', 'www.example.com']
                ca: ipa

    サンプル Playbook で指定されている設定は次のとおりです。

    cockpit_manage_selinux: true
    selinux システムロールを使用して、websm_port_t SELinux タイプで正しいポート権限を設定するように SELinux を設定できるようにします。
    cockpit_manage_firewall: true
    cockpit システムロールが firewalld システムロールを使用してポートを追加できるようにします。
    cockpit_certificates: <YAML_dictionary>

    デフォルトでは、RHEL Web コンソールは自己署名証明書を使用します。または、cockpit_certificates 変数を Playbook に追加し、IdM 認証局 (CA) から証明書を要求するか、管理対象ノードで使用可能な既存の証明書と秘密鍵を使用するようにロールを設定することもできます。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.cockpit/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

関連情報

第9章 RHEL システムロールを使用したカスタム暗号化ポリシーの設定

カスタム暗号化ポリシーは、暗号化アルゴリズムとプロトコルの使用を管理する一連のルールと設定です。このポリシーは、複数のシステムとアプリケーションにまたがるセキュリティー環境の保護、一貫性、管理性を確保するのに役立ちます。

crypto_policies RHEL システムロールを使用すると、多くのオペレーティングシステムにわたってカスタム暗号化ポリシーを自動化された方法で迅速かつ一貫して設定できます。

9.1. crypto_policies RHEL システムロールを使用した FUTURE 暗号化ポリシーによるセキュリティーの強化

crypto_policies RHEL システムロールを使用して、管理対象ノードで FUTURE ポリシーを設定できます。このポリシーは、たとえば次のことを実現するのに役立ちます。

  • 将来の新たな脅威への対応: 計算能力の向上を予測します。
  • セキュリティーの強化: 強力な暗号化標準により、より長い鍵長とよりセキュアなアルゴリズムを必須にします。
  • 高度なセキュリティー標準への準拠: 医療、通信、金融などの分野ではデータの機密性が高く、強力な暗号化を利用できることが重要です。

通常、FUTURE は、機密性の高いデータを扱う環境、将来の規制に備える環境、長期的なセキュリティーストラテジーを採用する環境に適しています。

警告

レガシーのシステムやソフトウェアでは、FUTURE ポリシーによって強制される、より最新しく厳格なアルゴリズムやプロトコルをサポートする必要はありません。たとえば、古いシステムでは TLS 1.3 以上の鍵サイズがサポートされていない可能性があります。これにより互換性の問題が発生する可能性があります。

また、強力なアルゴリズムを使用すると、通常、計算負荷が増加し、システムのパフォーマンスに悪影響が及ぶ可能性があります。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure cryptographic policies
      hosts: managed-node-01.example.com
      tasks:
        - name: Configure the FUTURE cryptographic security policy on the managed node
          ansible.builtin.include_role:
            name: rhel-system-roles.crypto_policies
          vars:
            - crypto_policies_policy: FUTURE
            - crypto_policies_reboot_ok: true

    サンプル Playbook で指定されている設定は次のとおりです。

    crypto_policies_policy: FUTURE
    管理対象ノードで必要な暗号化ポリシー (FUTURE) を設定します。これは、基本ポリシー、またはいくつかのサブポリシーを含む基本ポリシーのどちらかです。指定した基本ポリシーとサブポリシーが、管理対象ノードで使用可能である必要があります。デフォルト値は null です。つまり、設定は変更されず、crypto_policies RHEL システムロールは Ansible fact のみを収集します。
    crypto_policies_reboot_ok: true
    すべてのサービスとアプリケーションが新しい設定ファイルを読み取るように、暗号化ポリシーの変更後にシステムを再起動します。デフォルト値は false です。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.crypto_policies/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml
警告

システム全体のサブポリシー FIPS:OSPP には、Common Criteria (CC) 認定に必要な暗号化アルゴリズムに関する追加の制限が含まれています。そのため、このサブポリシーを設定すると、システムの相互運用性が低下します。たとえば、3072 ビットより短い RSA 鍵と DH 鍵、追加の SSH アルゴリズム、および複数の TLS グループを使用できません。また、FIPS:OSPP を設定すると、Red Hat コンテンツ配信ネットワーク (CDN) 構造への接続が防止されます。さらに、FIPS:OSPP を使用する IdM デプロイメントには Active Directory (AD) を統合できません。FIPS:OSPP を使用する RHEL ホストと AD ドメイン間の通信が機能しないか、一部の AD アカウントが認証できない可能性があります。

FIPS:OSPP 暗号化サブポリシーを設定すると、システムが CC 非準拠になる ことに注意してください。RHEL システムを CC 標準に準拠させる唯一の正しい方法は、cc-config パッケージで提供されているガイダンスに従うことです。認定済みの RHEL バージョン、検証レポート、および National Information Assurance Partnership (NIAP) で提供されている CC ガイドへのリンクのリストは、ナレッジベース記事「Compliance Activities and Government Standards」の Common Criteria セクションを参照してください。

検証

  1. コントロールノードで、たとえば verify_playbook.yml という名前の別の Playbook を作成します。

    ---
    - name: Verification
      hosts: managed-node-01.example.com
      tasks:
        - name: Verify active cryptographic policy
          ansible.builtin.include_role:
            name: rhel-system-roles.crypto_policies
        - name: Display the currently active cryptographic policy
          ansible.builtin.debug:
            var: crypto_policies_active

    サンプル Playbook で指定されている設定は次のとおりです。

    crypto_policies_active
    crypto_policies_policy 変数で受け入れられる形式の現在アクティブなポリシー名が含まれているエクスポートされた Ansible fact。
  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/verify_playbook.yml
  3. Playbook を実行します。

    $ ansible-playbook ~/verify_playbook.yml
    TASK [debug] **************************
    ok: [host] => {
        "crypto_policies_active": "FUTURE"
    }

    crypto_policies_active 変数は、管理対象ノード上のアクティブなポリシーを示します。

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.crypto_policies/README.md ファイル
  • /usr/share/doc/rhel-system-roles/crypto_policies/ ディレクトリー
  • update-crypto-policies(8) および crypto-policies(7) man ページ

第10章 RHEL システムロールを使用した firewalld の設定

RHEL システムロールは、Ansible 自動化ユーティリティーのコンテンツセットです。このコンテンツを、Ansible Automation ユーティリティーと組み合わせることで、複数のシステムを同時にリモートで管理するための一貫した設定インターフェイスが実現します。

rhel-system-roles パッケージには、rhel-system-roles.firewall RHEL システムロールが含まれています。このロールは、firewalld サービスの自動設定のために導入されました。

firewall RHEL システムロールを使用すると、次のようなさまざまな firewalld パラメーターを設定できます。

  • ゾーン
  • パケットを許可すべきサービス
  • ポートへのトラフィックアクセスの許可、拒否、またはドロップ
  • ゾーンのポートまたはポート範囲の転送

10.1. firewall RHEL システムロールを使用した firewalld 設定のリセット

時間が経つにつれて、ファイアウォール設定の更新が累積し、予想外のセキュリティーリスクが発生する可能性があります。firewall RHEL システムロールを使用すると、firewalld 設定を自動的にデフォルト状態にリセットできます。これにより、意図しない、またはセキュアでないファイアウォールルールを効率的に削除し、管理を簡素化できます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Reset firewalld example
      hosts: managed-node-01.example.com
      tasks:
        - name: Reset firewalld
          ansible.builtin.include_role:
            name: rhel-system-roles.firewall
          vars:
            firewall:
              - previous: replaced

    サンプル Playbook で指定されている設定は次のとおりです。

    previous: replaced

    既存のユーザー定義設定をすべて削除し、firewalld 設定をデフォルトにリセットします。previous:replaced パラメーターを他の設定と組み合わせると、firewall ロールは新しい設定を適用する前に既存の設定をすべて削除します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • コントロールノードでこのコマンドを実行して、管理対象ノードのすべてのファイアウォール設定がデフォルト値にリセットされたことをリモートで確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-all-zones'

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイル
  • /usr/share/doc/rhel-system-roles/firewall/ ディレクトリー

10.2. firewall RHEL システムロールを使用して、firewalld の着信トラフィックをあるローカルポートから別のローカルポートに転送する

firewall RHEL システムロールを使用して、あるローカルポートから別のローカルポートへの着信トラフィックの転送をリモートで設定できます。

たとえば、同じマシン上に複数のサービスが共存し、同じデフォルトポートが必要な環境の場合、ポートの競合が発生する可能性があります。この競合によりサービスが中断され、ダウンタイムが発生する可能性があります。firewall RHEL システムロールを使用すると、トラフィックを効率的に別のポートに転送して、サービスの設定を変更せずにサービスを同時に実行できます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure firewalld
      hosts: managed-node-01.example.com
      tasks:
        - name: Forward incoming traffic on port 8080 to 443
          ansible.builtin.include_role:
            name: rhel-system-roles.firewall
          vars:
            firewall:
              - forward_port: 8080/tcp;443;
                state: enabled
                runtime: true
                permanent: true

    サンプル Playbook で指定されている設定は次のとおりです。

    forward_port: 8080/tcp;443
    TCP プロトコルを使用してローカルポート 8080 に送信されるトラフィックが、ポート 443 に転送されます。
    runtime: true

    ランタイム設定の変更を有効にします。デフォルトは true に設定されています。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • コントロールノードで次のコマンドを実行して、管理対象ノードの転送ポートをリモートで確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-forward-ports'
    managed-node-01.example.com | CHANGED | rc=0 >>
    port=8080:proto=tcp:toport=443:toaddr=

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイル
  • /usr/share/doc/rhel-system-roles/firewall/ ディレクトリー

10.3. firewall RHEL システムロールを使用した firewalld DMZ ゾーンの設定

システム管理者は、firewall RHEL システムロールを使用して、enp1s0 インターフェイス上に dmz ゾーンを設定し、ゾーンへの HTTPS トラフィックを許可できます。これにより、外部ユーザーが Web サーバーにアクセスできるようにします。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure firewalld
      hosts: managed-node-01.example.com
      tasks:
        - name: Creating a DMZ with access to HTTPS port and masquerading for hosts in DMZ
          ansible.builtin.include_role:
            name: rhel-system-roles.firewall
          vars:
            firewall:
              - zone: dmz
                interface: enp1s0
                service: https
                state: enabled
                runtime: true
                permanent: true

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • コントロールノードで次のコマンドを実行して、管理対象ノードの dmz ゾーンに関する情報をリモートで確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --zone=dmz --list-all'
    managed-node-01.example.com | CHANGED | rc=0 >>
    dmz (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp1s0
      sources:
      services: https ssh
      ports:
      protocols:
      forward: no
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイル
  • /usr/share/doc/rhel-system-roles/firewall/ ディレクトリー

第11章 RHEL システムロールを使用した高可用性クラスターの設定

ha_cluster システムロールを使用すると、Pacemaker の高可用性クラスターリソースマネージャーを使用する高可用性クラスターを設定し、管理できます。

11.1. ha_cluster RHEL システムロールの変数

ha_cluster システムロール Playbook では、クラスターデプロイメントの要件に従って、高可用性クラスターの変数を定義します。

ha_cluster RHEL システムロールに設定できる変数は次のとおりです。

ha_cluster_enable_repos
ha_cluster RHEL システムロールに必要なパッケージを含むリポジトリーを有効にするブール値フラグ。この変数がデフォルト値の true に設定されている場合、クラスターメンバーとして使用するシステムに RHEL および RHEL High Availability Add-On の有効なサブスクリプションが必要です。サブスクリプションがない場合、システムロールは失敗します。
ha_cluster_enable_repos_resilient_storage
(RHEL 9.4 以降) dlmgfs2 などの耐障害性ストレージパッケージを含むリポジトリーを有効にするブールフラグ。このオプションを有効にするには、ha_cluster_enable_repostrue に設定する必要があります。この変数のデフォルト値は false です。
ha_cluster_manage_firewall

(RHEL 9.2 以降) ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定するブール値フラグ。ha_cluster_manage_firewalltrue に設定されている場合、ファイアウォールの高可用性サービスと fence-virt ポートが有効になります。ha_cluster_manage_firewallfalse に設定されている場合、ha_cluster RHEL システムロールはファイアウォールを管理しません。システムが firewalld サービスを実行している場合は、Playbook でパラメーターを true に設定する必要があります。

ha_cluster_manage_firewall パラメーターを使用してポートを追加することはできますが、このパラメーターを使用してポートを削除することはできません。ポートを削除するには、firewall システムロールを直接使用します。

RHEL 8.8 以降、ファイアウォールはデフォルトでは設定されなくなりました。これは、ファイアウォールが設定されるのは、ha_cluster_manage_firewalltrue に設定されている場合のみであるためです。

ha_cluster_manage_selinux

(RHEL 9.2 以降) ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスに属するポートを管理するかどうかを決定するブール値フラグ。ha_cluster_manage_selinuxtrue に設定されている場合、ファイアウォール高可用性サービスに属するポートは、SELinux ポートタイプ cluster_port_t に関連付けられます。ha_cluster_manage_selinuxfalse に設定されている場合、ha_cluster RHEL システムロールは SELinux を管理しません。

システムが selinux サービスを実行している場合は、Playbook でこのパラメーターを true に設定する必要があります。ファイアウォール設定は、SELinux を管理するための前提条件です。ファイアウォールがインストールされていない場合、SELinux ポリシーの管理はスキップされます。

ha_cluster_manage_selinux パラメーターを使用してポリシーを追加することはできますが、このパラメーターを使用してポリシーを削除することはできません。ポリシーを削除するには、selinux RHEL システムロールを直接使用します。

ha_cluster_cluster_present

true に設定すると、ロールに渡された変数に従って HA クラスターがホスト上で設定されることを決定するブール型フラグ。Playbook に指定されておらず、ロールでサポートされていないクラスター設定は失われます。

ha_cluster_cluster_presentfalse に設定すると、すべての HA クラスター設定がターゲットホストから削除されます。

この変数のデフォルト値は true です。

以下の Playbook の例では、node1 および node2 のすべてのクラスター設定を削除します。

- hosts: node1 node2
  vars:
    ha_cluster_cluster_present: false

  roles:
    - rhel-system-roles.ha_cluster
ha_cluster_start_on_boot
起動時にクラスターサービスが起動するように設定されるかどうかを決定するブール値フラグ。この変数のデフォルト値は true です。
ha_cluster_fence_agent_packages
インストールするフェンスエージェントパッケージのリストこの変数のデフォルト値は fence-agents-all, fence-virt です。
ha_cluster_extra_packages

インストールする追加パッケージのリストこの変数のデフォルト値はパッケージではありません。

この変数は、ロールによって自動的にインストールされていない追加パッケージをインストールするために使用できます (例: カスタムリソースエージェント)。

フェンスエージェントをこのリストのメンバーとして追加できます。ただし、ha_cluster_fence_agent_packages は、フェンスエージェントの指定に使用する推奨されるロール変数であるため、デフォルト値が上書きされます。

ha_cluster_hacluster_password
hacluster ユーザーのパスワードを指定する文字列の値。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。機密データを保護するには、Encrypting content with Ansible Vault で説明されているように、パスワードを vault で暗号化します。デフォルトのパスワード値がないため、この変数を指定する必要があります。
ha_cluster_hacluster_qdevice_password
(RHEL 8.9 以降) クォーラムデバイスの hacluster ユーザーのパスワードを指定する文字列の値。このパラメーターが必要になるのは、ha_cluster_quorum パラメーターがタイプ net のクォーラムデバイスを使用するように設定されており、クォーラムデバイス上の hacluster ユーザーのパスワードが ha_cluster_hacluster_password パラメーターで指定された hacluster ユーザーのパスワードと異なる場合のみです。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。機密データを保護するには、Encrypting content with Ansible Vault で説明されているように、パスワードを vault で暗号化します。このパスワードにデフォルト値はありません。
ha_cluster_corosync_key_src

Corosync authkey ファイルへのパス。これは、Corosync 通信の認証および暗号鍵です。各クラスターに一意の authkey 値を指定することが強く推奨されます。キーは、ランダムなデータの 256 バイトでなければなりません。

この変数の鍵を指定する場合は、Ansible Vault を使用したコンテンツの暗号化 で説明されているように、鍵を vault 暗号化することが推奨されます。

鍵が指定されていない場合は、ノードにすでに存在するキーが使用されます。ノードに同じ鍵がない場合、あるノードの鍵が他のノードに分散され、すべてのノードが同じキーを持つようにします。ノードに鍵がない場合は、新しい鍵が生成され、ノードに分散されます。

この変数が設定されている場合は、このキーで ha_cluster_regenerate_keys が無視されます。

この変数のデフォルト値は null です。

ha_cluster_pacemaker_key_src

Pacemaker の authkey ファイルへのパスです。これは、Pacemaker 通信の認証および暗号鍵です。各クラスターに一意の authkey 値を指定することが強く推奨されます。キーは、ランダムなデータの 256 バイトでなければなりません。

この変数の鍵を指定する場合は、Ansible Vault を使用したコンテンツの暗号化 で説明されているように、鍵を vault 暗号化することが推奨されます。

鍵が指定されていない場合は、ノードにすでに存在するキーが使用されます。ノードに同じ鍵がない場合、あるノードの鍵が他のノードに分散され、すべてのノードが同じキーを持つようにします。ノードに鍵がない場合は、新しい鍵が生成され、ノードに分散されます。

この変数が設定されている場合は、このキーで ha_cluster_regenerate_keys が無視されます。

この変数のデフォルト値は null です。

ha_cluster_fence_virt_key_src

fence-virt または fence-xvm の事前共有鍵ファイルへのパス。これは、fence-virt または fence-xvm フェンスエージェントの認証キーの場所になります。

この変数の鍵を指定する場合は、Ansible Vault を使用したコンテンツの暗号化 で説明されているように、鍵を vault 暗号化することが推奨されます。

鍵が指定されていない場合は、ノードにすでに存在するキーが使用されます。ノードに同じ鍵がない場合、あるノードの鍵が他のノードに分散され、すべてのノードが同じキーを持つようにします。ノードに鍵がない場合は、新しい鍵が生成され、ノードに分散されます。この方法で ha_cluster RHEL システムロールが新しい鍵を生成する場合は、鍵をノードのハイパーバイザーにコピーして、フェンシングが機能するようにする必要があります。

この変数が設定されている場合は、このキーで ha_cluster_regenerate_keys が無視されます。

この変数のデフォルト値は null です。

ha_cluster_pcsd_public_key_srcrha_cluster_pcsd_private_key_src

pcsd TLS 証明書および秘密鍵へのパス。これが指定されていない場合は、ノード上にすでに証明書キーのペアが使用されます。証明書キーペアが存在しない場合は、無作為に新しいキーが生成されます。

この変数に秘密鍵の値を指定した場合は、Ansible Vault を使用したコンテンツの暗号化 で説明されているように、鍵を暗号化することが推奨されます。

これらの変数が設定されている場合は、この証明書と鍵のペアで ha_cluster_regenerate_keys は無視されます。

これらの変数のデフォルト値は null です。

ha_cluster_pcsd_certificates

(RHEL 9.2 以降) certificate RHEL システムロールを使用して pcsd 秘密鍵と証明書を作成します。

システムに pcsd 秘密鍵と証明書が設定されていない場合は、次の 2 つの方法のいずれかで作成できます。

  • ha_cluster_pcsd_certificates 変数を設定します。ha_cluster_pcsd_certificates 変数を設定すると、certificate RHEL システムロールが内部的に使用され、定義どおりに pcsd の秘密鍵と証明書が作成されます。
  • ha_cluster_pcsd_public_key_srcha_cluster_pcsd_private_key_src、または ha_cluster_pcsd_certificates 変数を設定しないでください。これらの変数をいずれも設定しなかった場合、ha_cluster RHEL システムロールが pcsd 自体を使用して pcsd 証明書を作成します。ha_cluster_pcsd_certificates の値は、certificate RHEL システムロールで指定された変数 certificate_requests の値に設定されます。certificate RHEL システムロールの詳細は、RHEL システムロールを使用した証明書の要求 を参照してください。

ha_cluster_pcsd_certificate 変数の使用には、次の運用上の考慮事項が適用されます。

  • IPA を使用しており、システムを IPA ドメインに参加させていない限り、certificate RHEL システムロールによって自己署名証明書が作成されます。この場合、RHEL システムロールのコンテキスト外で信頼設定を明示的に設定する必要があります。システムロールは、信頼設定をサポートしていません。
  • ha_cluster_pcsd_certificates 変数を設定する場合は、ha_cluster_pcsd_public_key_src 変数と ha_cluster_pcsd_private_key_src 変数を設定しないでください。
  • ha_cluster_pcsd_certificates 変数を設定すると、この証明書とキーのペアでは ha_cluster_regenerate_keys が無視されます。

この変数のデフォルト値は [] です。

高可用性クラスターで TLS 証明書とキーファイルを作成する ha_cluster RHEL システムロール Playbook の例については、高可用性クラスターの pcsd TLS 証明書とキーファイルの作成 を参照してください。

ha_cluster_regenerate_keys
true に設定すると、事前共有キーと TLS 証明書が再生成されることを決定するブール型フラグ。キーおよび証明書が再生成されるタイミングの詳細は、ha_cluster_corosync_key_srcha_cluster_pacemaker_key_srcha_cluster_fence_virt_key_srcha_cluster_pcsd_public_key_src、および ha_cluster_pcsd_private_key_src 変数の説明を参照してください。
この変数のデフォルト値は false です。
ha_cluster_pcs_permission_list

pcsd を使用してクラスターを管理するパーミッションを設定します。この変数を使用して設定するアイテムは以下のとおりです。

  • type - user または group
  • 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_transport

(RHEL 8.7 以降) クラスター転送方法を設定します。この変数を使用して設定するアイテムは以下のとおりです。

  • type (オプション) - トランスポートタイプ: knetudp、または udpuudp および udpu トランスポートタイプは、1 つのリンクのみをサポートします。udpudpu の暗号化は常に無効になっています。指定しない場合、デフォルトで knet になります。
  • options (オプション) - トランスポートオプションを含む名前と値のディクショナリーのリスト。
  • links (オプション) - 名前と値のディクショナリーのリスト。名前値ディクショナリーの各リストには、1 つの Corosync リンクのオプションが含まれています。リンクごとに linknumber 値を設定することを推奨します。それ以外の場合、ディクショナリーの最初のリストはデフォルトで最初のリンクに割り当てられ、2 番目のリストは 2 番目のリンクに割り当てられます。
  • compression (オプション) - トランスポート圧縮を設定する名前と値のディクショナリーのリスト。knet トランスポートタイプでのみサポートされます。
  • crypto (オプション) - トランスポートの暗号化を設定する名前と値のディクショナリーのリスト。デフォルトでは、暗号化は有効になっています。knet トランスポートタイプでのみサポートされます。

許可されているオプションのリストについては、pcs -h cluster setup のヘルプページ、または pcs(8) man ページの cluster セクションにある setup の説明を参照してください。詳細な説明については、corosync.conf(5) の man ページを参照してください。

ha_cluster_transport 変数の構造は次のとおりです。

ha_cluster_transport:
  type: knet
  options:
    - name: option1_name
      value: option1_value
    - name: option2_name
      value: option2_value
  links:
    -
      - name: option1_name
        value: option1_value
      - name: option2_name
        value: option2_value
    -
      - name: option1_name
        value: option1_value
      - name: option2_name
        value: option2_value
  compression:
    - name: option1_name
      value: option1_value
    - name: option2_name
      value: option2_value
  crypto:
    - name: option1_name
      value: option1_value
    - name: option2_name
      value: option2_value

トランスポート方式を設定する ha_cluster RHEL システムロール Playbook の例については、高可用性クラスターでの Corosync 値の設定 を参照してください。

ha_cluster_totem

(RHEL 8.7 以降) Corosync トーテムを設定します。許可されているオプションのリストについては、pcs -h cluster setup のヘルプページ、または pcs(8) man ページの cluster セクションにある setup の説明を参照してください。詳細な説明については、corosync.conf(5) の man ページを参照してください。

ha_cluster_totem 変数の構造は次のとおりです。

ha_cluster_totem:
  options:
    - name: option1_name
      value: option1_value
    - name: option2_name
      value: option2_value

Corosync トーテムを設定する ha_cluster RHEL システムロール Playbook の例については、高可用性クラスターでの Corosync 値の設定 を参照してください。

ha_cluster_quorum

(RHEL 8.7 以降) クラスタークォーラムを設定します。クラスタークォーラムには、次の項目を設定できます。

  • options (オプション) - クォーラムを設定する名前と値のディクショナリーのリスト。許可されるオプションは、auto_tie_breakerlast_man_standinglast_man_standing_window、および wait_for_all です。クォーラムオプションの詳細は、votequorum(5) の man ページを参照してください。
  • device (オプション) - (RHEL 8.8 以降) クォーラムデバイスを使用するようにクラスターを設定します。デフォルトでは、クォーラムデバイスは使用されません。

    • model (必須) - クォーラムデバイスモデルを指定します。net のみがサポートされています。
    • model_options (オプション) - 指定されたクォーラムデバイスモデルを設定する名前と値のディクショナリーのリスト。モデル net の場合、host および algorithm オプションを指定する必要があります。

      pcs-address オプションを使用して、qnetd ホストに接続するためのカスタム pcsd アドレスとポートを設定します。このオプションを指定しない場合、ロールは host 上のデフォルトの pcsd ポートに接続します。

    • generic_options (オプション) - モデル固有ではないクォーラムデバイスオプションを設定する名前と値のディクショナリーのリスト。
    • heuristics_options (オプション) - クォーラムデバイスのヒューリスティックを設定する名前と値のディクショナリーのリスト。

      クォーラムデバイスオプションの詳細は、corosync-qdevice(8) の man ページを参照してください。一般的なオプションは sync_timeouttimeout です。モデル net オプションについては、quorum.device.net セクションを参照してください。ヒューリスティックオプションについては、quorum.device.heuristics セクションを参照してください。

      クォーラムデバイスの TLS 証明書を再生成するには、ha_cluster_regenerate_keys 変数を true に設定します。

ha_cluster_quorum 変数の構造は次のとおりです。

ha_cluster_quorum:
  options:
    - name: option1_name
      value: option1_value
    - name: option2_name
      value: option2_value
  device:
    model: string
    model_options:
      - name: option1_name
        value: option1_value
      - name: option2_name
        value: option2_value
    generic_options:
      - name: option1_name
        value: option1_value
      - name: option2_name
        value: option2_value
    heuristics_options:
      - name: option1_name
        value: option1_value
      - name: option2_name
        value: option2_value

クラスタークォーラムを設定する ha_cluster RHEL システムロール Playbook の例については、高可用性クラスターでの Corosync 値の設定 を参照してください。クォーラムデバイスを使用してクラスターを設定する ha_cluster RHEL システムロール Playbook の例については、クォーラムデバイスを使用した高可用性クラスターの設定 を参照してください。

ha_cluster_sbd_enabled

(RHEL 8.7 以降) クラスターが SBD ノードフェンシングメカニズムを使用できるかどうかを決定するブールフラグ。この変数のデフォルト値は false です。

SBD を有効にする ha_cluster システムロール Playbook の例については、SBD ノードフェンシングを使用した高可用性クラスターの設定 を参照してください。

ha_cluster_sbd_options

(RHEL 8.7 以降) SBD オプションを指定する名前と値の辞書のリスト。これらのオプションの詳細は、sbd(8) man ページの Configuration via environment セクションを参照してください。

サポートされているオプションは次のとおりです。

  • delay-start - デフォルトは falseSBD_DELAY_START としてドキュメントに記載されています。
  • startmode - デフォルトは alwaysSBD_START_MODE としてドキュメントに記載されています。
  • timeout-action - デフォルトは flush,rebootSBD_TIMEOUT_ACTION としてドキュメントに記載されています。
  • watchdog-timeout - デフォルトは 5SBD_WATCHDOG_TIMEOUT としてドキュメントに記載されています。

SBD オプションを設定する ha_cluster システムロール Playbook の例については、SBD ノードフェンシングを使用した高可用性クラスターの設定 を参照してください。

SBD を使用する場合、オプションで、インベントリー内のノードごとにウォッチドッグと SBD デバイスを設定できます。インベントリーファイルでウォッチドッグおよび SBD デバイスを設定する方法の詳細は、ha_cluster システムロールのインベントリーの指定 を参照してください。

ha_cluster_cluster_properties

Pacemaker クラスター全体の設定のクラスタープロパティーのセットのリスト。クラスタープロパティーのセットは 1 つだけサポートされます。

クラスタープロパティーのセットの構造は次のとおりです。

ha_cluster_cluster_properties:
  - attrs:
      - name: property1_name
        value: property1_value
      - name: property2_name
        value: property2_value

デフォルトでは、プロパティーは設定されません。

次のサンプル Playbook は、node1node2 で構成されるクラスターを設定し、stonith-enabled および no-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_node_options

(RHEL 9.4 以降) この変数は、クラスターノードごとに異なる設定を定義します。指定されたノードのオプションを設定しますが、どのノードがクラスターを形成するかは指定しません。インベントリーまたは Playbook の hosts パラメーターを使用して、クラスターを設定するノードを指定します。

この変数を使用して設定するアイテムは以下のとおりです。

  • node_name (必須) - Pacemaker ノード属性を定義するノードの名前。ノードに定義された名前と一致する必要があります。
  • attributes (任意) - ノードの Pacemaker ノード属性セットのリスト。現在、1 つのセットのみがサポートされています。最初のセットが使用され、残りは無視されます。

ha_cluster_node_options 変数の構造は次のとおりです。

ha_cluster_node_options:
  - node_name: node1
    attributes:
      - attrs:
          - name: attribute1
            value: value1_node1
          - name: attribute2
            value: value2_node1
  - node_name: node2
    attributes:
      - attrs:
          - name: attribute1
            value: value1_node2
          - name: attribute2
            value: value2_node2

デフォルトでは、ノードオプションは定義されていません。

ノードオプション設定を含む ha_cluster RHEL システムロール Playbook の例は、ノード属性を使用した高可用性クラスターの設定 を参照してください。

ha_cluster_resource_primitives

この変数は、フェンシングリソースを含む、RHEL システムロールによって設定される Pacemaker リソースを定義します。リソースごとに次の項目を設定できます。

  • id (必須) - リソースの ID。
  • agent (必須) - リソースまたはフェンスエージェントの名前 (例: ocf:pacemaker:Dummy または stonith:fence_xvm)。STONITH エージェントには、stonith: を指定する必要があります。リソースエージェントの場合は、ocf:pacemaker:Dummy ではなく、Dummy などの短縮名を使用することができます。ただし、同じ名前の複数のエージェントがインストールされていると、使用するエージェントを決定できないため、ロールは失敗します。そのため、リソースエージェントを指定する場合はフルネームを使用することが推奨されます。
  • instance_attrs (オプション): リソースのインスタンス属性のセットのリスト。現在、1 つのセットのみがサポートされています。属性の名前と値、必須かどうか、およびリソースまたはフェンスエージェントによって異なります。
  • meta_attrs (オプション): リソースのメタ属性のセットのリスト。現在、1 つのセットのみがサポートされています。
  • copy_operations_from_agent (オプション) - (RHEL 8.9 以降) リソースエージェントは通常、特定のエージェント向けに最適化された、intervaltimeout などのリソース操作のデフォルト設定を定義します。この変数が true に設定されている場合、それらの設定がリソース設定にコピーされます。そうでない場合、クラスター全体のデフォルトがリソースに適用されます。ha_cluster_resource_operation_defaults ロール変数を使用してリソースのリソース操作のデフォルトも定義する場合は、これを false に設定できます。この変数のデフォルト値は true です。
  • operations (任意): リソースの操作のリスト。

    • action (必須): pacemaker と、リソースまたはフェンスエージェントで定義されている操作アクション。
    • attrs (必須): 少なくとも 1 つのオプションを指定する必要があります。

ha_cluster RHEL システムロールで設定するリソース定義の構造は次のとおりです。

  - 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
    copy_operations_from_agent: bool
    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 RHEL システムロール Playbook の例は、フェンシングおよびリソースを使用した高可用性クラスターの設定 を参照してください。

ha_cluster_resource_groups

この変数は、システムロールによって設定される Pacemaker リソースグループを定義します。リソースグループごとに次の項目を設定できます。

  • id (必須): グループの ID。
  • resources (必須): グループのリソースのリスト。各リソースは ID によって参照され、リソースは ha_cluster_resource_primitives 変数に定義する必要があります。1 つ以上のリソースをリスト表示する必要があります。
  • meta_attrs (オプション): グループのメタ属性のセットのリスト。現在、1 つのセットのみがサポートされています。

ha_cluster RHEL システムロールで設定するリソースグループ定義の構造は次のとおりです。

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 RHEL システムロール Playbook の例は、フェンシングおよびリソースを使用した高可用性クラスターの設定 を参照してください。

ha_cluster_resource_clones

この変数は、システムロールによって設定された Pacemaker リソースクローンを定義します。リソースクローンに対して次の項目を設定できます。

  • resource_id (必須): クローンを作成するリソース。リソースは ha_cluster_resource_primitives 変数または ha_cluster_resource_groups 変数に定義する必要があります。
  • promotable (オプション): 作成するリソースクローンが昇格可能なクローンであるかどうかを示します。これは、true または false と示されます。
  • id (任意): クローンのカスタム ID。ID が指定されていない場合は、生成されます。このオプションがクラスターでサポートされない場合は、警告が表示されます。
  • meta_attrs (任意): クローンのメタ属性のセットのリスト。現在、1 つのセットのみがサポートされています。

ha_cluster RHEL システムロールで設定するリソースクローン定義の構造は次のとおりです。

ha_cluster_resource_clones:
  - resource_id: resource-to-be-cloned
    promotable: true
    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 RHEL システムロール Playbook の例は、フェンシングおよびリソースを使用した高可用性クラスターの設定 を参照してください。

ha_cluster_resource_defaults

(RHEL 8.9 以降) この変数は、リソースのデフォルトのセットを定義します。複数のデフォルトのセットを定義し、ルールを使用してそれらを特定のエージェントのリソースに適用できます。ha_cluster_resource_defaults 変数で指定したデフォルトは、独自に定義した値で当該デフォルトをオーバーライドするリソースには適用されません。

デフォルトとして指定できるのはメタ属性のみです。

デフォルトセットごとに次の項目を設定できます。

  • id (オプション) - デフォルトセットの ID。指定しない場合は自動生成されます。
  • rule (オプション) - いつ、どのリソースにセットを適用するかを定義する pcs 構文を使用して記述されたルール。ルールの指定については、pcs(8) man ページの resource defaults set create セクションを参照してください。
  • score (オプション) - デフォルトセットの重み。
  • attrs (オプション) - デフォルトとしてリソースに適用されるメタ属性。

ha_cluster_resource_defaults 変数の構造は次のとおりです。

ha_cluster_resource_defaults:
  meta_attrs:
    - id: defaults-set-1-id
      rule: rule-string
      score: score-value
      attrs:
        - name: meta_attribute1_name
          value: meta_attribute1_value
        - name: meta_attribute2_name
          value: meta_attribute2_value
    - id: defaults-set-2-id
      rule: rule-string
      score: score-value
      attrs:
        - name: meta_attribute3_name
          value: meta_attribute3_value
        - name: meta_attribute4_name
          value: meta_attribute4_value

リソースのデフォルトを設定する ha_cluster RHEL システムロール Playbook の例については、リソースおよびリソース操作のデフォルトを使用した高可用性クラスターの設定 を参照してください。

ha_cluster_resource_operation_defaults

(RHEL 8.9 以降) この変数は、リソース操作のデフォルトのセットを定義します。複数のデフォルトのセットを定義し、ルールを使用してそれらを特定のエージェントのリソースおよび特定のリソース操作に適用できます。ha_cluster_resource_operation_defaults 変数で指定したデフォルトは、独自に定義した値で当該デフォルトをオーバーライドするリソース操作には適用されません。デフォルトでは、ha_cluster RHEL システムロールは、リソース操作用の独自の値を定義するようにリソースを設定します。これらのデフォルトを ha_cluster_resource_operations_defaults 変数でオーバーライドする方法については、ha_cluster_resource_primitivescopy_operations_from_agent の項目の説明を参照してください。

デフォルトとして指定できるのはメタ属性のみです。

ha_cluster_resource_operations_defaults 変数の構造は、ルールの指定方法を除き、ha_cluster_resource_defaults 変数の構造と同じです。セットが適用されるリソース操作を記述するルールの指定については、pcs(8) man ページの resource op defaults set create セクションを参照してください。

ha_cluster_stonith_levels

(RHEL 9.4 以降) この変数は、フェンシングトポロジーとも呼ばれる STONITH レベルを定義します。フェンシングレベルは、複数のデバイスを使用してノードをフェンスするようにクラスターを設定します。1 つのデバイスに障害が発生した場合に備えて代替デバイスを定義し、ノードが正常にフェンスされたと見なすために複数のデバイスをすべて正常に実行することを要求できます。フェンシングレベルの詳細は、高可用性クラスターの設定と管理フェンシングレベルの設定 を参照してください。

フェンシングレベルを定義するときに、次の項目を設定できます。

  • level (必須) - フェンシングレベルを試行する順序。Pacemaker は、成功するまでレベルを昇順に試します。
  • target (オプション) - このレベルが適用されるノードの名前。
  • 次の 3 つの選択肢のいずれかを指定する必要があります。

    • target_pattern - このレベルが適用されるノードの名前に一致する POSIX 拡張正規表現。
    • target_attribute - このレベルが適用されるノードに設定されているノード属性の名前。
    • target_attribute および target_value - このレベルが適用されるノードに設定されているノード属性の名前と値。
  • resouce_ids (必須) - このレベルで試行する必要があるフェンシングリソースのリスト。

    デフォルトでは、フェンシングレベルは定義されていません。

ha_cluster RHEL システムロールで設定するフェンシングレベル定義の構造は次のとおりです。

ha_cluster_stonith_levels:
  - level: 1..9
    target: node_name
    target_pattern: node_name_regular_expression
    target_attribute: node_attribute_name
    target_value: node_attribute_value
    resource_ids:
      - fence_device_1
      - fence_device_2
  - level: 1..9
    target: node_name
    target_pattern: node_name_regular_expression
    target_attribute: node_attribute_name
    target_value: node_attribute_value
    resource_ids:
      - fence_device_1
      - fence_device_2

フェンシングのデフォルトを設定する ha_cluster RHEL システムロール Playbook の例は、フェンシングレベルを使用した高可用性クラスターの設定 を参照してください。

ha_cluster_constraints_location

この変数は、リソースの場所の制約を定義します。リソースの場所の制約は、リソースを実行できるノードを示します。複数のリソースに一致する可能性のあるリソース ID またはパターンで指定されたリソースを指定できます。ノード名またはルールでノードを指定できます。

リソースの場所の制約に対して次の項目を設定できます。

  • resource (必須) - 制約が適用されるリソースの仕様。
  • node (必須) - リソースが優先または回避する必要があるノードの名前。
  • id (オプション) - 制約の ID。指定しない場合、自動生成されます。
  • options (オプション) - 名前と値のディクショナリーリスト。

    • score - 制約の重みを設定します。

      • 正の score 値は、リソースがノードでの実行を優先することを意味します。
      • 負の score 値は、リソースがノードで実行されないようにする必要があることを意味します。
      • -INFINITYscore 値は、リソースがノードで実行されないようにする必要があることを意味します。
      • 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 (オプション) - 制約が制限されるリソースのロール。StartedUnpromotedPromoted
  • rule (必須) - pcs 構文を使用して記述された制約ルール。詳細は、pcs(8) の man ページで constraint location セクションを参照してください。
  • 指定するその他の項目は、ルールを指定しないリソース制約と同じ意味を持ちます。

リソース 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 RHEL システムロール Playbook の例は、リソースに制約のある高可用性クラスターの設定 を参照してください。

ha_cluster_constraints_colocation

この変数は、リソースコロケーションの制約を定義します。リソースコロケーションの制約は、あるリソースの場所が別のリソースの場所に依存することを示しています。コロケーション制約には、2 つのリソースに対する単純なコロケーション制約と、複数のリソースに対するセットコロケーション制約の 2 種類があります。

単純なリソースコロケーション制約に対して次の項目を設定できます。

  • resource_follower (必須) - resource_leader に関連して配置する必要があるリソース。

    • id (必須) - リソース ID。
    • role (オプション) - 制約が制限されるリソースのロール。StartedUnpromotedPromoted
  • resource_leader (必須) - クラスターは、最初にこのリソースを配置する場所を決定してから、resource_follower を配置する場所を決定します。

    • id (必須) - リソース ID。
    • role (オプション) - 制約が制限されるリソースのロール。StartedUnpromotedPromoted
  • id (オプション) - 制約の ID。指定しない場合、自動生成されます。
  • options (オプション) - 名前と値のディクショナリーリスト。

    • score - 制約の重みを設定します。

      • 正の score 値は、リソースが同じノードで実行される必要があることを示します。
      • 負の score 値は、リソースが異なるノードで実行される必要があることを示します。
      • + INFINITYscore 値は、リソースが同じノードで実行される必要があることを示します。
      • -INFINITYscore 値は、リソースが異なるノードで実行される必要があることを示します。
      • score が指定されていない場合、スコア値はデフォルトで INFINITY になります。

デフォルトでは、リソースコロケーション制約は定義されていません。

単純なリソースコロケーション制約の構造は次のとおりです。

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

リソースセットのコロケーション制約に対して次の項目を設定できます。

  • resource_sets (必須) - リソースセットのリスト。

    • resource_ids (必須) - セット内のリソースのリスト。
    • options (オプション) - セット内のリソースが制約によってどのように扱われるかを微調整する名前と値のディクショナリーリスト。
  • id (オプション) - 単純なコロケーション制約の場合と同じ値。
  • options (オプション) - 単純なコロケーション制約の場合と同じ値。

リソースセットに対するコロケーション制約の構造は次のとおりです。

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 RHEL システムロール Playbook の例は、リソースに制約のある高可用性クラスターの設定 を参照してください。

ha_cluster_constraints_order

この変数は、リソースの順序に対する制約を定義します。リソース順序の制約は、特定のリソースアクションが発生する順序を示します。リソース順序の制約には、2 つのリソースに対する単純な順序制約と、複数のリソースに対するセット順序制約の 2 種類があります。

単純なリソース順序制約に対して次の項目を設定できます。

  • 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 RHEL システムロール Playbook の例は、リソースに制約のある高可用性クラスターの設定 を参照してください。

ha_cluster_constraints_ticket

この変数は、リソースチケットの制約を定義します。リソースチケットの制約は、特定のチケットに依存するリソースを示します。リソースチケット制約には、1 つのリソースに対する単純なチケット制約と、複数のリソースに対するチケット順序の制約の 2 種類があります。

単純なリソースチケット制約に対して次の項目を設定できます。

  • resource (必須) - 制約が適用されるリソースの仕様。

    • id (必須) - リソース ID。
    • role (オプション) - 制約が制限されるリソースのロール。StartedUnpromotedPromoted
  • ticket (必須) - リソースが依存するチケットの名前。
  • id (オプション) - 制約の ID。指定しない場合、自動生成されます。
  • options (オプション) - 名前と値のディクショナリーリスト。

    • loss-policy (オプション) - チケットが取り消された場合にリソースに対して実行するアクション。

デフォルトでは、リソースチケットの制約は定義されていません。

単純なリソースチケット制約の構造は次のとおりです。

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

リソースセットチケット制約に対して次の項目を設定できます。

  • resource_sets (必須) - リソースセットのリスト。

    • resource_ids (必須) - セット内のリソースのリスト。
    • options (オプション) - セット内のリソースが制約によってどのように扱われるかを微調整する名前と値のディクショナリーリスト。
  • ticket (必須) - 単純なチケット制約の場合と同じ値。
  • id (オプション) - 単純なチケット制約の場合と同じ値。
  • options (オプション) - 単純なチケット制約の場合と同じ値。

リソースセットのチケット制約の構造は次のとおりです。

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 RHEL システムロール Playbook の例は、リソースに制約のある高可用性クラスターの設定 を参照してください。

ha_cluster_qnetd

(RHEL 8.8 以降) この変数は、クラスターの外部クォーラムデバイスとして機能できる qnetd ホストを設定します。

qnetd ホストに対して次の項目を設定できます。

  • present (オプション) - true の場合、ホスト上に qnetd インスタンスを設定します。false の場合、ホストから qnetd 設定を削除します。デフォルト値は false です。これを true に設定する場合は、ha_cluster_cluster_presentfalse に設定する必要があります。
  • start_on_boot (オプション) - ブート時に qnetd インスタンスを自動的に開始するかどうかを設定します。デフォルト値は true です。
  • regenerate_keys (オプション) - qnetd TLS 証明書を再生成するには、この変数を true に設定します。証明書を再生成する場合は、各クラスターのロールを再実行して qnetd ホストに再度接続するか、手動で pcs を実行する必要があります。

フェンシングにより qnetd 操作が中断されるため、クラスターノード上で qnetd を実行することはできません。

クォーラムデバイスを使用してクラスターを設定する ha_cluster RHEL システムロール Playbook の例については、クォーラムデバイスを使用したクラスターの設定 を参照してください。

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

11.2. ha_cluster RHEL システムロールにインベントリーの指定

ha_cluster RHEL システムロール Playbook を使用して HA クラスターを設定する場合は、インベントリー内のクラスターの名前とアドレスを設定します。

11.2.1. インベントリーでのノード名とアドレスの設定

インベントリー内の各ノードには、必要に応じて以下の項目を指定することができます。

  • node_name - クラスター内のノードの名前。
  • pcs_address - ノードと通信するために pcs が使用するアドレス。名前、FQDN、または IP アドレスを指定でき、ポート番号を含めることができます。
  • corosync_addresses: Corosync が使用するアドレスのリスト。特定のクラスターを形成するすべてのノードに、同じ数のアドレスが必要です。特定のリンクに属するアドレスがすべてのノードで同じ位置に指定されるように、アドレスの順序がすべてのノードで同じである必要があります。

以下の例は、ターゲット node1 および node2 を持つインベントリーを示しています。node1 および node2 は完全修飾ドメイン名のいずれかである必要があります。そうでないと、たとえば、名前が /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

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

11.2.2. インベントリーでのウォッチドッグおよび SBD デバイスの設定

(RHEL 8.7 以降) SBD を使用する場合、必要に応じて、インベントリー内のノードごとにウォッチドッグと SBD デバイスを設定できます。すべての SBD デバイスをすべてのノードに共有してアクセスできるようにする必要がありますが、各ノードは各デバイスに異なる名前を使用できます。ウォッチドッグデバイスもノードごとに異なる場合があります。システムロール Playbook で設定できる SBD 変数の詳細は、ha_cluster システムロールの変数ha_cluster_sbd_enabled および ha_cluster_sbd_options のエントリーを参照してください。

インベントリー内の各ノードには、必要に応じて以下の項目を指定することができます。

  • sbd_watchdog_modules (オプション) - (RHEL 8.9 以降) /dev/watchdog* デバイスを作成するためにロードするウォッチドッグカーネルモジュール。設定されていない場合、デフォルトで空のリストになります。
  • sbd_watchdog_modules_blocklist (オプション) - (RHEL 8.9 以降) アンロードおよびブロックするウォッチドッグカーネルモジュール。設定されていない場合、デフォルトで空のリストになります。
  • sbd_watchdog - SBD が使用するウォッチドッグデバイス。設定されていない場合、デフォルトは /dev/watchdog です。
  • sbd_devices - SBD メッセージの交換と監視に使用するデバイス。設定されていない場合、デフォルトで空のリストになります。一定の長いデバイス名 (/dev/disk/by-id/) を常に使用してデバイスを参照します。

次の例は、ターゲット node1 および node2 のウォッチドッグおよび SBD デバイスを設定するインベントリーを示しています。

all:
  hosts:
    node1:
      ha_cluster:
        sbd_watchdog_modules:
          - module1
          - module2
        sbd_watchdog: /dev/watchdog2
        sbd_devices:
          - /dev/disk/by-id/000001
          - /dev/disk/by-id/000001
          - /dev/disk/by-id/000003
    node2:
      ha_cluster:
        sbd_watchdog_modules:
          - module1
        sbd_watchdog_modules_blocklist:
          - module2
        sbd_watchdog: /dev/watchdog1
        sbd_devices:
          - /dev/disk/by-id/000001
          - /dev/disk/by-id/000002
          - /dev/disk/by-id/000003

SBD フェンシングを使用する高可用性クラスターを作成する手順の例については、SBD ノードフェンシングを使用した高可用性クラスターの設定を 参照してください。

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

11.3. 高可用性クラスターの pcsd TLS 証明書とキーファイルの作成

(RHEL 9.2 以降) クラスターノード間の接続は、Transport Layer Security (TLS) 暗号化を使用して保護されます。デフォルトでは、pcsd デーモンが自己署名証明書を生成します。ただし、多くのデプロイメントでは、デフォルトの証明書を会社の認証局によって発行された証明書に置き換え、pcsd 用の会社の証明書ポリシーを適用する必要がある場合があります。

ha_cluster RHEL システムロールを使用して、高可用性クラスターに TLS 証明書とキーファイルを作成できます。この Playbook を実行すると、ha_cluster RHEL システムロールが certificate RHEL システムロールを内部的に使用して TLS 証明書を管理します。

警告

ha_cluster RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
  • ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      cluster_password: <cluster_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Create a high availability cluster
      hosts: node1 node2
      vars_files:
        - vault.yml
      tasks:
        - name: Create TLS certificates and key files in a high availability cluster
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            ha_cluster_cluster_name: my-new-cluster
            ha_cluster_hacluster_password: "{{ cluster_password }}"
            ha_cluster_manage_firewall: true
            ha_cluster_manage_selinux: true
            ha_cluster_pcsd_certificates:
              - name: FILENAME
                common_name: "{{ ansible_hostname }}"
                ca: self-sign

    サンプル Playbook で指定されている設定は次のとおりです。

    ha_cluster_cluster_name: <cluster_name>
    作成するクラスターの名前。
    ha_cluster_hacluster_password: <password>
    hacluster ユーザーのパスワード。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。
    ha_cluster_manage_firewall: true
    ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。
    ha_cluster_manage_selinux: true
    ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。
    ha_cluster_pcsd_certificates: <certificate_properties>
    自己署名された pcsd 証明書と秘密鍵ファイルを /var/lib/pcsd に作成する変数。この例では、pcsd 証明書のファイル名は FILENAME.crt で、鍵ファイルの名前は FILENAME.key です。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

関連情報

11.4. リソースを実行していない高可用性クラスターの設定

ha_cluster システムロールを使用すると、基本的なクラスターをシンプルかつ自動的に設定できます。基本的なクラスターを作成したら、pcs コマンドラインインターフェイスを使用して、リソースごとに他のクラスターコンポーネントと動作を設定できます。次の手順の例では、必要最小限のパラメーターを使用して、フェンシングが設定されていない基本的な 2 ノードクラスターを設定します。

警告

ha_cluster システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
  • ha_cluster システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      cluster_password: <cluster_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Create a high availability cluster
      hosts: node1 node2
      vars_files:
        - vault.yml
      tasks:
        - name: Create cluster with minimum required parameters and no fencing
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            ha_cluster_cluster_name: my-new-cluster
            ha_cluster_hacluster_password: "{{ cluster_password }}"
            ha_cluster_manage_firewall: true
            ha_cluster_manage_selinux: true

    サンプル Playbook で指定されている設定は次のとおりです。

    ha_cluster_cluster_name: <cluster_name>
    作成するクラスターの名前。
    ha_cluster_hacluster_password: <password>
    hacluster ユーザーのパスワード。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。
    ha_cluster_manage_firewall: true
    ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。
    ha_cluster_manage_selinux: true
    ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

11.5. フェンシングおよびリソースを使用した高可用性クラスターの設定

クラスター設定の具体的なコンポーネントは、サイトごとに異なる個々のニーズによって異なります。次の手順の例は、ha_cluster RHEL システムロールを使用してさまざまなクラスターコンポーネントを設定するための形式を示しています。設定されるクラスターには、フェンシングデバイス、クラスターリソース、リソースグループ、および複製されたリソースが含まれています。

警告

ha_cluster RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
  • ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      cluster_password: <cluster_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Create a high availability cluster
      hosts: node1 node2
      vars_files:
        - vault.yml
      tasks:
        - name: Create cluster with fencing and resources
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            ha_cluster_cluster_name: my-new-cluster
            ha_cluster_hacluster_password: "{{ cluster_password }}"
            ha_cluster_manage_firewall: true
            ha_cluster_manage_selinux: true
            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

    サンプル Playbook で指定されている設定は次のとおりです。

    ha_cluster_cluster_name: <cluster_name>
    作成するクラスターの名前。
    ha_cluster_hacluster_password: <password>
    hacluster ユーザーのパスワード。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。
    ha_cluster_manage_firewall: true
    ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。
    ha_cluster_manage_selinux: true
    ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。
    ha_cluster_resource_primitives: <cluster_resources>
    ha_cluster RHEL システムロールによって設定される Pacemaker リソース (フェンシングを含む) のリソース定義のリスト。
    ha_cluster_resource_groups: <resource_groups>
    ha_cluster RHEL システムロールによって設定されるリソースグループ定義のリスト。
    ha_cluster_resource_clones: <resource_clones>
    ha_cluster RHEL システムロールによって設定されるリソースクローン定義のリスト。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

関連情報

11.6. リソースおよびリソース操作のデフォルトを使用した高可用性クラスターの設定

(RHEL 9.3 以降) クラスター設定では、全リソースのリソースオプションの Pacemaker デフォルト値を変更できます。クラスター内の全リソース操作のデフォルト値を変更することもできます。

リソースオプションのデフォルト値を変更する方法については、リソースオプションのデフォルト値の変更 を参照してください。グローバルリソース操作のデフォルトについては、グローバルリソース操作のデフォルトの設定 を参照してください。

次の手順の例では、ha_cluster RHEL システムロールを使用して、リソースとリソース操作のデフォルトを定義する高可用性クラスターを作成します。

警告

ha_cluster RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
  • ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      cluster_password: <cluster_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Create a high availability cluster
      hosts: node1 node2
      vars_files:
        - vault.yml
      tasks:
        - name: Create cluster with fencing and resource operation defaults
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            ha_cluster_cluster_name: my-new-cluster
            ha_cluster_hacluster_password: "{{ cluster_password }}"
            ha_cluster_manage_firewall: true
            ha_cluster_manage_selinux: true
            # Set a different resource-stickiness value during
            # and outside work hours. This allows resources to
            # automatically move back to their most
            # preferred hosts, but at a time that
            # does not interfere with business activities.
            ha_cluster_resource_defaults:
              meta_attrs:
                - id: core-hours
                  rule: date-spec hours=9-16 weekdays=1-5
                  score: 2
                  attrs:
                    - name: resource-stickiness
                      value: INFINITY
                - id: after-hours
                  score: 1
                  attrs:
                    - name: resource-stickiness
                      value: 0
            # Default the timeout on all 10-second-interval
            # monitor actions on IPaddr2 resources to 8 seconds.
            ha_cluster_resource_operation_defaults:
              meta_attrs:
                - rule: resource ::IPaddr2 and op monitor interval=10s
                  score: INFINITY
                  attrs:
                    - name: timeout
                      value: 8s

    サンプル Playbook で指定されている設定は次のとおりです。

    ha_cluster_cluster_name: <cluster_name>
    作成するクラスターの名前。
    ha_cluster_hacluster_password: <password>
    hacluster ユーザーのパスワード。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。
    ha_cluster_manage_firewall: true
    ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。
    ha_cluster_manage_selinux: true
    ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。
    ha_cluster_resource_defaults: <resource_defaults>
    リソースのデフォルトのセットを定義する変数。
    ha_cluster_resource_operation_defaults: <resource_operation_defaults>
    リソース操作のデフォルトのセットを定義する変数。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

11.7. フェンシングレベルを使用した高可用性クラスターの設定

(RHEL 9.4 以降) ノードに複数のフェンシングデバイスを設定する場合、Pacemaker がデバイスを使用してノードをフェンシングしようとする順序を決定するために、それらのデバイスのフェンシングレベルを定義する必要があります。フェンシングレベルの詳細は、フェンシングレベルの設定 を参照してください。

次の手順の例では、ha_cluster RHEL システムロールを使用して、フェンシングレベルを定義する高可用性クラスターを作成します。

警告

ha_cluster RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
  • ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      cluster_password: <cluster_password>
      fence1_password: <fence1_password>
      fence2_password: <fence2_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. Playbook ファイル (例: ~/playbook.yml) を作成します。このサンプル Playbook ファイルは、firewalld および selinux サービスを実行するクラスターを設定します。

    ---
    - name: Create a high availability cluster
      hosts: node1 node2
      vars_files:
        - vault.yml
      tasks:
        - name: Configure a cluster that defines fencing levels
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            ha_cluster_cluster_name: my-new-cluster
            ha_cluster_hacluster_password: "{{ cluster_password }}"
            ha_cluster_manage_firewall: true
            ha_cluster_manage_selinux: true
            ha_cluster_resource_primitives:
              - id: apc1
                agent: 'stonith:fence_apc_snmp'
                instance_attrs:
                  - attrs:
                      - name: ip
                        value: apc1.example.com
                      - name: username
                        value: user
                      - name: password
                        value: "{{ fence1_password }}"
                      - name: pcmk_host_map
                        value: node1:1;node2:2
              - id: apc2
                agent: 'stonith:fence_apc_snmp'
                instance_attrs:
                  - attrs:
                      - name: ip
                        value: apc2.example.com
                      - name: username
                        value: user
                      - name: password
                        value: "{{ fence2_password }}"
                      - name: pcmk_host_map
                        value: node1:1;node2:2
            # Nodes have redundant power supplies, apc1 and apc2. Cluster must
            # ensure that when attempting to reboot a node, both power
            # supplies # are turned off before either power supply is turned
            # back on.
            ha_cluster_stonith_levels:
              - level: 1
                target: node1
                resource_ids:
                  - apc1
                  - apc2
              - level: 1
                target: node2
                resource_ids:
                  - apc1
                  - apc2

    サンプル Playbook で指定されている設定は次のとおりです。

    ha_cluster_cluster_name: <cluster_name>
    作成するクラスターの名前。
    ha_cluster_hacluster_password: <password>
    hacluster ユーザーのパスワード。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。
    ha_cluster_manage_firewall: true
    ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。
    ha_cluster_manage_selinux: true
    ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。
    ha_cluster_resource_primitives: <cluster_resources>
    ha_cluster RHEL システムロールによって設定される Pacemaker リソース (フェンシングを含む) のリソース定義のリスト。
    ha_cluster_stonith_levels: <stonith_levels>
    フェンシングトポロジーとも呼ばれる STONITH レベルを定義する変数。複数のデバイスを使用してノードをフェンスするようにクラスターを設定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

11.8. リソースに制約のある高可用性クラスターの設定

クラスターを設定するときに、アプリケーションの要件に合わせてクラスターリソースの動作を指定できます。リソース制約を設定することで、クラスターリソースの動作を制御できます。

次のカテゴリーのリソース制約を定義できます。

次の手順の例では、ha_cluster RHEL システムロールを使用して、リソースの場所の制約、リソースコロケーションの制約、リソース順序の制約、およびリソースチケットの制約を含む高可用性クラスターを作成します。

警告

ha_cluster RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

前提条件

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      cluster_password: <cluster_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Create a high availability cluster
      hosts: node1 node2
      vars_files:
        - vault.yml
      tasks:
        - name: Create cluster with resource constraints
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            ha_cluster_cluster_name: my-new-cluster
            ha_cluster_hacluster_password: "{{ cluster_password }}"
            ha_cluster_manage_firewall: true
            ha_cluster_manage_selinux: true
            # 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

    サンプル Playbook で指定されている設定は次のとおりです。

    ha_cluster_cluster_name: <cluster_name>
    作成するクラスターの名前。
    ha_cluster_hacluster_password: <password>
    hacluster ユーザーのパスワード。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。
    ha_cluster_manage_firewall: true
    ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。
    ha_cluster_manage_selinux: true
    ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。
    ha_cluster_resource_primitives: <cluster_resources>
    ha_cluster RHEL システムロールによって設定される Pacemaker リソース (フェンシングを含む) のリソース定義のリスト。
    ha_cluster_constraints_location: <location_constraints>
    リソースの場所の制約を定義する変数。
    ha_cluster_constraints_colocation: <colocation_constraints>
    リソースのコロケーションの制約を定義する変数。
    ha_cluster_constraints_order: <order_constraints>
    リソースの順序の制約を定義する変数。
    ha_cluster_constraints_ticket: <ticket_constraints>
    Booth チケットの制約を定義する変数。
  3. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

11.9. 高可用性クラスターでの Corosync 値の設定

(RHEL 9.1 以降) corosync.conf ファイルは、Pacemaker の基盤となるクラスターメンバーシップおよびメッセージングレイヤーである Corosync によって使用されるクラスターパラメーターを提供します。corosync.conf ファイル内のいくつかのデフォルトパラメーターは、ご使用のシステムの設定に合わせて変更できます。一般的に、corosync.conf ファイルを直接編集することは推奨されません。ただし、ha_cluster RHEL システムロールを使用して Corosync 値を設定することはできます。

次の手順の例では、ha_cluster RHEL システムロールを使用して、Corosync 値を設定する高可用性クラスターを作成します。

警告

ha_cluster RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
  • ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      cluster_password: <cluster_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Create a high availability cluster
      hosts: node1 node2
      vars_files:
        - vault.yml
      tasks:
        - name: Create cluster that configures Corosync values
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            ha_cluster_cluster_name: my-new-cluster
            ha_cluster_hacluster_password: "{{ cluster_password }}"
            ha_cluster_manage_firewall: true
            ha_cluster_manage_selinux: true
            ha_cluster_transport:
              type: knet
              options:
                - name: ip_version
                  value: ipv4-6
                - name: link_mode
                  value: active
              links:
                -
                  - name: linknumber
                    value: 1
                  - name: link_priority
                    value: 5
                -
                  - name: linknumber
                    value: 0
                  - name: link_priority
                    value: 10
              compression:
                - name: level
                  value: 5
                - name: model
                  value: zlib
              crypto:
                - name: cipher
                  value: none
                - name: hash
                  value: none
            ha_cluster_totem:
              options:
                - name: block_unlisted_ips
                  value: 'yes'
                - name: send_join
                  value: 0
            ha_cluster_quorum:
              options:
                - name: auto_tie_breaker
                  value: 1
                - name: wait_for_all
                  value: 1

    サンプル Playbook で指定されている設定は次のとおりです。

    ha_cluster_cluster_name: <cluster_name>
    作成するクラスターの名前。
    ha_cluster_hacluster_password: <password>
    hacluster ユーザーのパスワード。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。
    ha_cluster_manage_firewall: true
    ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。
    ha_cluster_manage_selinux: true
    ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。
    ha_cluster_transport: <transport_method>
    クラスターの転送方法を設定する変数。
    ha_cluster_totem: <totem_options>
    Corosync トーテムオプションを設定する変数。
    ha_cluster_quorum: <quorum_options>
    クラスタークォーラムオプションを設定する変数。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

11.10. SBD ノードフェンシングを使用した高可用性クラスターの設定

(RHEL 9.1 以降) 次の手順では、ha_cluster システムロールを使用して、SBD ノードフェンシングを使用する高可用性クラスターを作成します。

警告

ha_cluster RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

この Playbook は インベントリーでのウォッチドッグおよび SBD デバイスの設定 で説明されているように、ウォッチドッグモジュール (RHEL 8.9 以降でサポート) をロードするインベントリーファイルを使用します。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Create a high availability cluster that uses SBD node fencing
      hosts: node1 node2
      roles:
        - rhel-system-roles.ha_cluster
      vars:
        ha_cluster_cluster_name: my-new-cluster
        ha_cluster_hacluster_password: <password>
        ha_cluster_manage_firewall: true
        ha_cluster_manage_selinux: true
        ha_cluster_sbd_enabled: yes
        ha_cluster_sbd_options:
          - name: delay-start
            value: 'no'
          - name: startmode
            value: always
          - name: timeout-action
            value: 'flush,reboot'
          - name: watchdog-timeout
            value: 30
        # Suggested optimal values for SBD timeouts:
        # watchdog-timeout * 2 = msgwait-timeout (set automatically)
        # msgwait-timeout * 1.2 = stonith-timeout
        ha_cluster_cluster_properties:
          - attrs:
              - name: stonith-timeout
                value: 72
        ha_cluster_resource_primitives:
          - id: fence_sbd
            agent: 'stonith:fence_sbd'
            instance_attrs:
              - attrs:
                  # taken from host_vars
                  - name: devices
                    value: "{{ ha_cluster.sbd_devices | join(',') }}"
                  - name: pcmk_delay_base
                    value: 30

    このサンプル Playbook ファイルは、SBD フェンシングを使用し、SBD Stonith リソースを作成するfirewalld および selinux サービスを実行するクラスターを設定します。

    実稼働用の Playbook ファイルを作成するときは、Encrypting content with Ansible Vault で説明されているように、パスワードを vault で暗号化します。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

11.11. クォーラムデバイスを使用した高可用性クラスターの設定

(RHEL 9.2 以降) 別のクォーラムデバイスを設定すると、クラスターは標準のクォーラムルールで許容されるよりも多くのノード障害に耐えることができます。クォーラムデバイスは、クラスターの軽量な調停デバイスとして機能します。クォーラムデバイスは、偶数のノードを持つクラスターに推奨されます。2 ノードクラスターでクォーラムデバイスを使用すると、スプリットブレインの状況で存続するノードをより適切に判別できます。

クォーラムデバイスの詳細は、クォーラムデバイスの設定 を参照してください。

ha_cluster RHEL システムロールを使用し、別個のクォーラムデバイスを使用した高可用性クラスターを設定するには、まずクォーラムデバイスをセットアップします。クォーラムデバイスをセットアップした後は、任意の数のクラスターでデバイスを使用できます。

11.11.1. クォーラムデバイスの設定

ha_cluster RHEL システムロールを使用してクォーラムデバイスを設定するには、この手順の例に従います。クラスターノード上ではクォーラムデバイスを実行できないことに注意してください。

警告

ha_cluster RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • クォーラムデバイスの実行に使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
  • ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクォーラムデバイスが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      cluster_password: <cluster_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook-qdevice.yml) を作成します。

    ---
    - name: Configure a host with a quorum device
      hosts: nodeQ
      vars_files:
        - vault.yml
      tasks:
        - name: Create a quorum device for the cluster
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            ha_cluster_cluster_present: false
            ha_cluster_hacluster_password: "{{ cluster_password }}"
            ha_cluster_manage_firewall: true
            ha_cluster_manage_selinux: true
            ha_cluster_qnetd:
              present: true

    サンプル Playbook で指定されている設定は次のとおりです。

    ha_cluster_cluster_present: false
    false に設定されると、すべてのクラスター設定をターゲットホストから削除することを決定する変数。
    ha_cluster_hacluster_password: <password>
    hacluster ユーザーのパスワード。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。
    ha_cluster_manage_firewall: true
    ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。
    ha_cluster_manage_selinux: true
    ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。
    ha_cluster_qnetd: <quorum_device_options>
    qnetd ホストを設定する変数。
  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook-qdevice.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook-qdevice.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

11.11.2. クォーラムデバイスを使用するようにクラスターを設定する

クォーラムデバイスを使用するようにクラスターを設定するには、この手順の例に従います。

警告

ha_cluster RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
  • ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。
  • クォーラムデバイスが設定されている。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook-cluster-qdevice.yml) を作成します。

    ---
    - name: Configure a cluster to use a quorum device
      hosts: node1 node2
      vars_files:
        - vault.yml
      tasks:
        - name: Create cluster that uses a quorum device
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            ha_cluster_cluster_name: my-new-cluster
            ha_cluster_hacluster_password: "{{ cluster_password }}"
            ha_cluster_manage_firewall: true
            ha_cluster_manage_selinux: true
            ha_cluster_quorum:
              device:
                model: net
                model_options:
                  - name: host
                    value: nodeQ
                  - name: algorithm
                    value: lms

    サンプル Playbook で指定されている設定は次のとおりです。

    ha_cluster_cluster_name: <cluster_name>
    作成するクラスターの名前。
    ha_cluster_hacluster_password: <password>
    hacluster ユーザーのパスワード。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。
    ha_cluster_manage_firewall: true
    ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。
    ha_cluster_manage_selinux: true
    ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。
    ha_cluster_quorum: <quorum_parameters>
    クラスターでクォーラムデバイスを使用することを指定するのに使用できるクラスタークォーラムを設定する変数。
  2. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook-cluster-qdevice.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook-cluster-qdevice.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

11.12. ノード属性を使用した高可用性クラスターの設定

(RHEL 9.4 以降) Pacemaker ルールを使用すると、設定をより動的なものにすることができます。たとえば、ノード属性を使用すると、時間に基づいてマシンを異なる処理グループに割り当て、場所の制約を作成するときにその属性を使用できます。

ノードで定義される属性に応じてリソースを制御する場合に使用されるノード属性の式です。ノード属性の詳細は、ルールによるリソースの場所の決定 を参照してください。

次の手順の例では、ha_cluster RHEL システムロールを使用して、ノード属性を設定する高可用性クラスターを作成します。

警告

ha_cluster RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
  • ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      cluster_password: <cluster_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Create a high availability cluster
      hosts: node1 node2
      vars_files:
        - vault.yml
      tasks:
        - name: Create a cluster that defines node attributes
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            ha_cluster_cluster_name: my-new-cluster
            ha_cluster_hacluster_password: "{{ cluster_password }}"
            ha_cluster_manage_firewall: true
            ha_cluster_manage_selinux: true
            ha_cluster_node_options:
              - node_name: node1
                attributes:
                  - attrs:
                      - name: attribute1
                        value: value1A
                      - name: attribute2
                        value: value2A
              - node_name: node2
                attributes:
                  - attrs:
                      - name: attribute1
                        value: value1B
                      - name: attribute2
                        value: value2B
    ha_cluster_cluster_name: <cluster_name>
    作成するクラスターの名前。
    ha_cluster_hacluster_password: <password>
    hacluster ユーザーのパスワード。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。
    ha_cluster_manage_firewall: true
    ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。
    ha_cluster_manage_selinux: true
    ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。
    ha_cluster_node_options: <node_settings>
    クラスターノードごとに異なるさまざまな設定を定義する変数。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

    関連情報

11.13. ha_cluster RHEL システムロールを使用した高可用性クラスターでの Apache HTTP サーバーの設定

高可用性クラスターは、単一障害点を排除し、ノードが稼働しなくなった場合に、あるクラスターノードから別のクラスターノードにサービスをフェイルオーバーして、可用性が高いサービスを提供します。Red Hat は、Red Hat 高可用性クラスターの計画、設定、保守に関する多様なドキュメントを提供しています。Red Hat クラスターのさまざまな分野に関するドキュメントのインデックスを提供する記事リストは、Red Hat High Availability Add-On Documentation Guide を参照してください。

次の使用例では、ha_cluster RHEL システムロールを使用して、2 ノードの Red Hat Enterprise Linux High Availability Add-On クラスターにアクティブ/パッシブ Apache HTTP サーバーを設定します。このユースケースでは、クライアントは Floating IP アドレスを使用して Apache HTTP サーバーにアクセスします。Web サーバーは、クラスターにある 2 つのノードのいずれかで実行します。Web サーバーが実行しているノードが正常に動作しなくなると、Web サーバーはクラスターの 2 番目のノードで再起動し、サービスの中断は最小限に抑えられます。

この例では、ホスト名が zapc.example.com の APC 電源スイッチを使用します。クラスターが他のフェンスエージェントを使用しない場合は、以下の例のように、ha_cluster_fence_agent_packages 変数を定義するときに、クラスターが必要とするフェンスエージェントのみを任意でリスト表示できます。

警告

ha_cluster RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。

前提条件

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      cluster_password: <cluster_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Create a high availability cluster
      hosts: z1.example.com z2.example.com
      vars_files:
        - vault.yml
      tasks:
        - name: Configure active/passive Apache server in a high availability cluster
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            ha_cluster_hacluster_password: "{{ cluster_password }}"
            ha_cluster_cluster_name: my_cluster
            ha_cluster_manage_firewall: true
            ha_cluster_manage_selinux: true
            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: xfs
              - 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

    サンプル Playbook で指定されている設定は次のとおりです。

    ha_cluster_cluster_name: <cluster_name>
    作成するクラスターの名前。
    ha_cluster_hacluster_password: <password>
    hacluster ユーザーのパスワード。hacluster ユーザーには、クラスターへのフルアクセス権が付与されます。
    ha_cluster_manage_firewall: true
    ha_cluster RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。
    ha_cluster_manage_selinux: true
    ha_cluster RHEL システムロールが selinux RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。
    ha_cluster_fence_agent_packages: <fence_agent_packages>
    インストールするフェンスエージェントパッケージのリスト。
    ha_cluster_resource_primitives: <cluster_resources>
    ha_cluster RHEL システムロールによって設定される Pacemaker リソース (フェンシングを含む) のリソース定義のリスト。
    ha_cluster_resource_groups: <resource_groups>
    ha_cluster RHEL システムロールによって設定されるリソースグループ定義のリスト。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml
  5. apache リソースエージェントを使用して Apache を管理する場合は systemd が使用されません。このため、Apache で提供される logrotate スクリプトを編集して、systemctl を使用して Apache を再ロードしないようにする必要があります。

    クラスター内の各ノードで、/etc/logrotate.d/httpd ファイルから以下の行を削除します。

    # /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    • RHEL 8.6 以降の場合は、削除した行を次の 3 行に置き換え、PID ファイルパスとして /var/run/httpd-website.pid を指定します。ここの website は、Apache リソースの名前になります。この例では、Apache リソース名は Website です。

      /usr/bin/test -f /var/run/httpd-Website.pid >/dev/null 2>/dev/null &&
      /usr/bin/ps -q $(/usr/bin/cat /var/run/httpd-Website.pid) >/dev/null 2>/dev/null &&
      /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /var/run/httpd-Website.pid" -k graceful > /dev/null 2>/dev/null || true
    • RHEL 8.5 以前の場合は、削除した行を次の 3 行に置き換えます。

      /usr/bin/test -f /run/httpd.pid >/dev/null 2>/dev/null &&
      /usr/bin/ps -q $(/usr/bin/cat /run/httpd.pid) >/dev/null 2>/dev/null &&
      /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /run/httpd.pid" -k graceful > /dev/null 2>/dev/null || true

検証

  1. クラスター内のノードのいずれかから、クラスターのステータスを確認します。4 つのリソースがすべて同じノード (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.comstandby にすると、ノードがリソースをホストできなくなります。

    [root@z1 ~]# pcs node standby z1.example.com
  4. ノード z1standby モードにしたら、クラスター内のノードのいずれかからクラスターのステータスを確認します。リソースはすべて 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 アドレスの Web サイトは、中断せず表示されているはずです。

  5. スタンバイ モードから z1 を削除するには、以下のコマンドを実行します。

    [root@z1 ~]# pcs node unstandby z1.example.com
    注記

    ノードを スタンバイ モードから削除しても、リソースはそのノードにフェイルオーバーしません。これは、リソースの resource-stickiness 値により異なります。resource-stickiness メタ属性については、現在のノードを優先するようにリソースを設定する を参照してください。

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md ファイル
  • /usr/share/doc/rhel-system-roles/ha_cluster/ ディレクトリー

第12章 RHEL システムロールを使用した systemd ジャーナルの設定

journald RHEL システムロールを使用すると、systemd ジャーナルを自動化し、Red Hat Ansible Automation Platform を使用して永続的なロギングを設定できます。

12.1. journald RHEL システムロールを使用した永続的なロギングの設定

デフォルトでは、systemd ジャーナルは /run/log/journal 内の小さなリングバッファーにのみログを保存します。これは永続的なものではありません。システムを再起動すると、ジャーナルデータベースログも削除されます。journald RHEL システムロールを使用すると、複数のシステムで一貫して永続的なロギングを設定できます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure journald
      hosts: managed-node-01.example.com
      tasks:
        - name: Configure persistent logging
          ansible.builtin.include_role:
            name: rhel-system-roles.journald
          vars:
            journald_persistent: true
            journald_max_disk_size: <size>
            journald_per_user: true
            journald_sync_interval: <interval>

    サンプル Playbook で指定されている設定は次のとおりです。

    journald_persistent: true
    永続的なロギングを有効にします。
    journald_max_disk_size: <size>
    ジャーナルファイルの最大ディスク領域サイズを MB 単位で指定します (例: 2048)。
    journald_per_user: true
    各ユーザーのログデータを個別に保持するように journald を設定します。
    journald_sync_interval: <interval>

    同期の間隔を分単位で設定します (例: 1)。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.journald/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.journald/README.md ファイル
  • /usr/share/doc/rhel-system-roles/journald/ ディレクトリー

第13章 RHEL システムロールを使用した自動クラッシュダンプの設定

Ansible を使用して kdump を管理するには、RHEL 9 で使用可能な RHEL システムロールの 1 つである kdump ロールを使用できます。

kdump ロールを使用すると、後で分析するためにシステムのメモリーの内容を保存する場所を指定できます。

13.1. kdump RHEL システムロールを使用したカーネルクラッシュダンプメカニズムの設定

カーネルクラッシュダンプは、システムの問題を診断およびトラブルシューティングするための重要な機能です。システムでカーネルパニックやその他の重大な障害が発生した場合、クラッシュカーネルダンプを使用すると、障害発生時におけるカーネルの状態のメモリーダンプ (コアダンプ) をキャプチャーできます。

Ansible Playbook を使用すると、kdump RHEL システムロールを使用して、複数のシステムでカーネルクラッシュダンプのパラメーターを設定できます。これにより、kdump サービスのすべての管理対象ノードで一貫した設定が確保されます。

警告

kdump システムロールは、/etc/kdump.conf および /etc/sysconfig/kdump 設定ファイルの内容を置き換えます。以前の設定は、ロール変数で指定された設定に変更され、ロール変数で指定されていない場合は失われます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configuring kernel crash dumping
      hosts: managed-node-01.example.com
      tasks:
        - name: Setting the kdump directory.
          ansible.builtin.include_role:
            name: rhel-system-roles.kdump
          vars:
            kdump_target:
              type: raw
              location: /dev/sda1
            kdump_path: /var/crash/vmcore
            kernel_settings_reboot_ok: true

    サンプル Playbook で指定されている設定は次のとおりです。

    kdump_target: <type_and_location>
    vmcore をルートファイルシステム以外の場所に書き込みます。type が raw またはファイルシステムの場合、location は (名前、ラベル、または UUID で) パーティションを参照します。
    kernel_settings_reboot_ok: <true|false>
    デフォルトは false です。true に設定すると、要求された変更を有効にするために管理対象ホストの再起動が必要かどうかをシステムロールが判断し、ホストを再起動します。false に設定すると、再起動が必要であることを示す true 値を持つ変数 kernel_settings_reboot_required がロールによって返されます。この場合、ユーザーが管理対象ノードを手動で再起動する必要があります。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.kdump/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • カーネルクラッシュダンプのパラメーターを確認します。

    $ ansible managed-node-01.example.com -m command -a 'grep crashkernel /proc/cmdline'

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.kdump/README.md ファイル
  • /usr/share/doc/rhel-system-roles/kdump/ ディレクトリー

第14章 RHEL システムロールを使用したカーネルパラメーターの永続的な設定

kernel_settings RHEL システムロールを使用すると、複数のクライアントにカーネルパラメーターを一度に設定できます。この解決策は以下のとおりです。

  • 効率的な入力設定を持つ使いやすいインターフェイスを提供します。
  • すべてのカーネルパラメーターを 1 か所で保持します。

コントロールマシンから kernel_settings ロールを実行すると、カーネルパラメーターはすぐに管理システムに適用され、再起動後も維持されます。

重要

RHEL チャネルで提供される RHEL システムロールは、デフォルトの AppStream リポジトリー内の RPM パッケージとして RHEL のお客様に提供されることに注意してください。また、RHEL システムロールは、Ansible Automation Hub を介して Ansible サブスクリプションをご利用のお客様に、コレクションとして提供されます。

14.1. kernel_settings RHEL システムロールを使用して選択したカーネルパラメーターの適用

kernel_settings RHEL システムロールを使用すると、複数の管理対象オペレーティングシステムにわたってさまざまなカーネルパラメーターをリモートで設定し、永続的に有効にできます。たとえば、以下を設定できます。

  • 小さなページを管理するオーバーヘッドを削減し、パフォーマンスを向上するための Transparent huge page
  • ループバックインターフェイスを使用してネットワーク経由で送信する最大パケットサイズ
  • 同時に開くことができるファイル数の制限

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configuring kernel settings
      hosts: managed-node-01.example.com
      tasks:
        - name: Configure hugepages, packet size for loopback device, and limits on simultaneously open files.
          ansible.builtin.include_role:
            name: 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
            kernel_settings_reboot_ok: true

    サンプル Playbook で指定されている設定は次のとおりです。

    kernel_settings_sysfs: <list_of_sysctl_settings>
    sysctl 設定とこの設定に割り当てる値の YAML リスト。
    kernel_settings_transparent_hugepages: <value>
    メモリーサブシステムの Transparent Huge Pages (THP) 設定を制御します。THP のサポートを無効にするか (never)、サポートをシステム全体で有効にするか (always)、または MAD_HUGEPAGE リージョン内で有効にする (madvise) ことができます。
    kernel_settings_reboot_ok: <true|false>
    デフォルトは false です。true に設定すると、要求された変更を有効にするために管理対象ホストの再起動が必要かどうかをシステムロールが判断し、ホストを再起動します。false に設定すると、再起動が必要であることを示す true 値を持つ変数 kernel_settings_reboot_required がロールによって返されます。この場合、ユーザーが管理対象ノードを手動で再起動する必要があります。

Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.kdump/README.md ファイルを参照してください。

  1. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  2. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 影響を受けるカーネルパラメーターを確認します。

    # ansible managed-node-01.example.com -m command -a 'sysctl fs.file-max kernel.threads-max net.ipv6.conf.lo.mtu'
    # ansible managed-node-01.example.com -m command -a 'cat /sys/kernel/mm/transparent_hugepage/enabled'

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.kernel_settings/README.md ファイル
  • /usr/share/doc/rhel-system-roles/kernel_settings/ ディレクトリー

第15章 RHEL システムロールを使用した GRUB 2 ブートローダーの設定

bootloader RHEL システムロールを使用すると、GRUB2 ブートローダーに関連する設定および管理タスクを自動化できます。

このロールは、現在、次の CPU アーキテクチャーで実行される GRUB2 ブートローダーの設定をサポートしています。

  • AMD および Intel 64 ビットアーキテクチャー (x86-64)
  • 64 ビット ARM アーキテクチャー (ARMv8.0)
  • IBM Power Systems (リトルエンディアン) (POWER9)

15.1. bootloader RHEL システムロールを使用した既存のブートローダーエントリーの更新

bootloader RHEL システムロールを使用して、GRUB2 ブートメニュー内の既存のエントリーを自動的に更新できます。この方法により、システムのパフォーマンスや動作を最適化できる特定のカーネルコマンドラインパラメーターを効率的に渡すことができます。

たとえば、カーネルや init システムからの詳細なブートメッセージが必要ないシステムを活用する場合は、bootloader を使用して管理対象ノード上の既存のブートローダーエントリーに quiet パラメーターを適用すると、よりクリーンで簡潔かつユーザーフレンドリーなブートエクスペリエンスを実現できます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • 更新するブートローダーエントリーに対応するカーネルを特定した。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configuration and management of GRUB2 boot loader
      hosts: managed-node-01.example.com
      tasks:
        - name: Update existing boot loader entries
          ansible.builtin.include_role:
            name: rhel-system-roles.bootloader
          vars:
            bootloader_settings:
              - kernel:
                  path: /boot/vmlinuz-5.14.0-362.24.1.el9_3.aarch64
                options:
                  - name: quiet
                    state: present
            bootloader_reboot_ok: true

    サンプル Playbook で指定されている設定は次のとおりです。

    kernel
    更新するブートローダーエントリーに関連するカーネルを指定します。
    options
    選択したブートローダーエントリー (カーネル) の更新するカーネルコマンドラインパラメーターを指定します。
    bootloader_reboot_ok: true
    変更を有効にするために再起動が必要であることをロールが検出し、管理対象ノードの再起動を実行します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.bootloader/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 指定したブートローダーエントリーのカーネルコマンドラインパラメーターが更新されていることを確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'grubby --info=ALL'
    managed-node-01.example.com | CHANGED | rc=0 >>
    ...
    index=1
    kernel="/boot/vmlinuz-5.14.0-362.24.1.el9_3.aarch64"
    args="ro crashkernel=1G-4G:256M,4G-64G:320M,64G-:576M rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap $tuned_params quiet"
    root="/dev/mapper/rhel-root"
    initrd="/boot/initramfs-5.14.0-362.24.1.el9_3.aarch64.img $tuned_initrd"
    title="Red Hat Enterprise Linux (5.14.0-362.24.1.el9_3.aarch64) 9.4 (Plow)"
    id="2c9ec787230141a9b087f774955795ab-5.14.0-362.24.1.el9_3.aarch64"
    ...

関連情報

15.2. bootloader RHEL システムロールを使用したブートメニューのパスワード保護

bootloader RHEL システムロールを使用して、GRUB2 ブートメニューにパスワードを自動的に設定できます。この方法により、権限のないユーザーによるブートパラメーターの変更を効率的に防止し、システムのブートをより適切に制御できます。

前提条件

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      pwd: <password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configuration and management of GRUB2 boot loader
      hosts: managed-node-01.example.com
      vars_files:
        - vault.yml
      tasks:
        - name: Set the bootloader password
          ansible.builtin.include_role:
            name: rhel-system-roles.bootloader
          vars:
            bootloader_password: "{{ pwd }}"
            bootloader_reboot_ok: true

    サンプル Playbook で指定されている設定は次のとおりです。

    bootloader_password: "{{ pwd }}"
    この変数は、ブートパラメーターをパスワードで保護します。
    bootloader_reboot_ok: true
    変更を有効にするために再起動が必要であることをロールが検出し、管理対象ノードの再起動を実行します。
    重要

    ブートローダーのパスワードの変更は、冪等のトランザクションではありません。つまり、同じ Ansible Playbook を再度適用すると、結果が同じではなく、管理対象ノードの状態が変わります。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.bootloader/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

検証

  1. 管理対象ノードで、GRUB2 ブートメニュー画面中に、編集のために e キーを押します。

    GRUB2 ブートローダーメニュー
  2. ユーザー名とパスワードの入力を求められます。

    GRUB2 メニューロック
    Enter username: root
    ブートローダーのユーザー名は常に root であり、Ansible Playbook で指定する必要はありません。
    Enter password: <password>
    ブートローダーのパスワードは、vault.yml ファイルで定義した pwd 変数に対応します。
  3. 特定のブートローダーエントリーの設定を表示または編集できます。

    GRUB2 ブートローダーエントリーの詳細

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.bootloader/README.md ファイル
  • /usr/share/doc/rhel-system-roles/bootloader/ ディレクトリー

15.3. bootloader RHEL システムロールを使用したブートローダーメニューのタイムアウトの設定

bootloader RHEL システムロールを使用して、GRUB2 ブートローダーメニューのタイムアウトを自動的に設定できます。この方法により、さまざまな目的で介入し、デフォルト以外のブートエントリーを選択できる期間を効率的に更新できます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configuration and management of GRUB2 boot loader
      hosts: managed-node-01.example.com
      tasks:
        - name: Update the boot loader timeout
          ansible.builtin.include_role:
            name: rhel-system-roles.bootloader
          vars:
            bootloader_timeout: 10

    サンプル Playbook で指定されている設定は次のとおりです。

    bootloader_timeout: 10
    デフォルトのエントリーを起動する前に GRUB2 ブートローダーメニューを表示する時間を制御する整数を入力します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.bootloader/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  1. 管理対象ノードをリモートで再起動します。

    # ansible managed-node-01.example.com -m ansible.builtin.reboot
    managed-node-01.example.com | CHANGED => {
        "changed": true,
        "elapsed": 21,
        "rebooted": true
    }
  2. 管理対象ノードで、GRUB2 ブートメニュー画面を確認します。

    GRUB2 ブートローダーメニューのタイムアウト
    The highlighted entry will be executed automatically in 10s

    GRUB2 が自動的にデフォルトエントリーを使用するまで、このブートメニューを表示する時間。

    • 別の方法: 管理対象ノードの /boot/grub2/grub.cfg ファイル内の "timeout" 設定をリモートでクエリーすることもできます。

      # ansible managed-node-01.example.com -m ansible.builtin.command -a "grep 'timeout' /boot/grub2/grub.cfg"
      managed-node-01.example.com | CHANGED | rc=0 >>
      if [ x$feature_timeout_style = xy ] ; then
        set timeout_style=menu
        set timeout=10
      # Fallback normal timeout code in case the timeout_style feature is
        set timeout=10
      if [ x$feature_timeout_style = xy ] ; then
          set timeout_style=menu
          set timeout=10
          set orig_timeout_style=${timeout_style}
          set orig_timeout=${timeout}
            # timeout_style=menu + timeout=0 avoids the countdown code keypress check
            set timeout_style=menu
            set timeout=10
            set timeout_style=hidden
            set timeout=10
      if [ x$feature_timeout_style = xy ]; then
        if [ "${menu_show_once_timeout}" ]; then
          set timeout_style=menu
          set timeout=10
          unset menu_show_once_timeout
          save_env menu_show_once_timeout

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.bootloader/README.md ファイル
  • /usr/share/doc/rhel-system-roles/bootloader/ ディレクトリー

15.4. bootloader RHEL システムロールを使用したブートローダー設定情報の収集

bootloader RHEL システムロールを使用して、GRUB2 ブートローダーエントリーに関する情報を自動的に収集できます。この方法により、システムが正しく起動するように設定され、すべてのエントリーが正しいカーネルと初期 RAM ディスクイメージを参照していることをすぐに確認できます。

その結果、たとえば次のことが可能になります。

  • ブートの失敗を防止する。
  • トラブルシューティング時に既知の正常な状態に戻す。
  • セキュリティー関連のカーネルコマンドラインパラメーターを確実に正しく設定する。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configuration and management of GRUB2 boot loader
      hosts: managed-node-01.example.com
      tasks:
        - name: Gather information about the boot loader configuration
          ansible.builtin.include_role:
            name: rhel-system-roles.bootloader
          vars:
            bootloader_gather_facts: true
    
        - name: Display the collected boot loader configuration information
          debug:
            var: bootloader_facts

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.bootloader/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • コントロールノードで前述の Playbook を実行すると、次の例のようなコマンドライン出力が表示されます。

    ...
        "bootloader_facts": [
            {
                "args": "ro crashkernel=1G-4G:256M,4G-64G:320M,64G-:576M rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap $tuned_params quiet",
                "default": true,
                "id": "2c9ec787230141a9b087f774955795ab-5.14.0-362.24.1.el9_3.aarch64",
                "index": "1",
                "initrd": "/boot/initramfs-5.14.0-362.24.1.el9_3.aarch64.img $tuned_initrd",
                "kernel": "/boot/vmlinuz-5.14.0-362.24.1.el9_3.aarch64",
                "root": "/dev/mapper/rhel-root",
                "title": "Red Hat Enterprise Linux (5.14.0-362.24.1.el9_3.aarch64) 9.4 (Plow)"
            }
        ]
    ...

    コマンドライン出力には、ブートエントリーに関する次の重要な設定情報が表示されます。

    args
    ブートプロセス中に GRUB2 ブートローダーによってカーネルに渡されるコマンドラインパラメーター。このパラメーターは、カーネル、initramfs、その他のブート時コンポーネントのさまざまな設定と動作を設定します。
    id
    ブートローダーメニュー内の各ブートエントリーに割り当てられる一意の識別子。マシン ID とカーネルバージョンで構成されています。
    root
    カーネルがマウントし、ブート中にプライマリーファイルシステムとして使用するルートファイルシステム。

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.bootloader/README.md ファイル
  • /usr/share/doc/rhel-system-roles/bootloader/ ディレクトリー
  • ブートエントリーについて

第16章 RHEL システムロールを使用したロギングの設定

logging RHEL システムロールを使用すると、ローカルホストとリモートホストをロギングサーバーとして自動的に設定し、多数のクライアントシステムからログを収集できます。

ロギングソリューションは、ログと複数のロギング出力を読み取る複数の方法を提供します。

たとえば、ロギングシステムは以下の入力を受け取ることができます。

  • ローカルファイル
  • systemd/journal
  • ネットワーク上の別のロギングシステム

さらに、ロギングシステムでは以下を出力できます。

  • /var/log/ ディレクトリーのローカルファイルに保存されるログ
  • Elasticsearch エンジンに送信されるログ
  • 別のロギングシステムに転送されるログ

logging RHEL システムロールを使用すると、状況に合わせて入力と出力を組み合わせることができます。たとえば、journal からの入力をローカルのファイルに保存しつつも、複数のファイルから読み込んだ入力を別のロギングシステムに転送してそのローカルのログファイルに保存するようにロギングソリューションを設定できます。

16.1. logging RHEL システムロールを使用したローカルログメッセージのフィルタリング

logging RHEL システムロールのプロパティーベースのフィルターを使用すると、さまざまな条件に基づいてローカルログメッセージをフィルタリングできます。その結果、たとえば以下を実現できます。

  • 明確なログ: トラフィック量の多い環境では、ログが急増することがあります。エラーなどの特定のメッセージに注目することで、問題をより早く特定できるようになります。
  • システムパフォーマンスの最適化: ログの量が多すぎると、通常、システムパフォーマンスが低下します。重要なイベントのみを選択的にログに記録することで、リソースの枯渇を防ぎ、システムをより効率的に運用できます。
  • セキュリティーの強化: システムエラーやログイン失敗などのセキュリティーメッセージを効率的にフィルタリングすることで、関連するログのみを取得できます。これは、違反を検出し、コンプライアンス基準を満たすために重要です。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Deploy the logging solution
      hosts: managed-node-01.example.com
      tasks:
        - name: Filter logs based on a specific value they contain
          ansible.builtin.include_role:
            name: rhel-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]

    サンプル Playbook で指定されている設定は次のとおりです。

    logging_inputs
    ロギングの入力ディクショナリーのリストを定義します。type: basics オプションを指定すると、systemd ジャーナルまたは Unix ソケットからの入力が対象になります。
    logging_outputs
    ロギングの出力ディクショナリーのリストを定義します。type: files オプションにより、ローカルファイル (通常は /var/log/ ディレクトリー内) にログを保存できます。property: msgproperty: contains、および property_value: error オプションを指定すると、error 文字列を含むすべてのログが /var/log/errors.log ファイルに保存されます。property: msgproperty: !contains、および property_value: error オプションを指定すると、他のすべてのログが /var/log/others.log ファイルに保存されます。error 値は、フィルタリングする必要がある文字列に置き換えることができます。
    logging_flows
    ロギングのフローディクショナリーのリストを定義して、logging_inputslogging_outputs の関係を指定します。inputs: [files_input] オプションは、ログの処理を開始する入力のリストを指定します。outputs: [files_output0, files_output1] オプションは、ログ送信先の出力のリストを指定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.logging/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  1. 管理対象ノードで、/etc/rsyslog.conf ファイルの構文をテストします。

    # rsyslogd -N 1
    rsyslogd: version 8.1911.0-6.el8, config validation run...
    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) が含まれていることに注意してください。

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.logging/README.md ファイル
  • /usr/share/doc/rhel-system-roles/logging/ ディレクトリー
  • rsyslog.conf(5) および syslog(3) man ページ

16.2. logging RHEL システムロールを使用したリモートロギングソリューションの適用

logging RHEL システムロールを使用して、1 つ以上のクライアントで systemd-journal サービスからログを取得し、リモートサーバーに転送するリモートロギングソリューションを設定できます。このサーバーは、remote_rsyslog および remote_files 設定からリモート入力を受け取り、リモートホスト名によって指定されたディレクトリー内のローカルファイルにログを出力します。

その結果、たとえば次のようなユースケースに対応できます。

  • ログの集中管理: 複数のマシンのログメッセージを 1 つのストレージポイントから収集、アクセス、管理することで、日々の監視とトラブルシューティングのタスクが簡素化されます。また、このユースケースでは、ログメッセージを確認するために個々のマシンにログインする必要性が軽減されます。
  • セキュリティーの強化: ログメッセージを 1 カ所に集中して保存すると、セキュアで改ざん不可能な環境にログを保存しやすくなります。このような環境により、セキュリティーインシデントをより効果的に検出して対応し、監査要件を満たすことが容易になります。
  • ログ分析の効率向上: 複数のマシンまたはサービスにまたがる複雑な問題を迅速にトラブルシューティングするには、複数のシステムからのログメッセージを相関させることが重要です。これにより、さまざまなソースからのイベントをすばやく分析し、相互参照することができます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Deploy the logging solution
      hosts: managed-node-01.example.com
      tasks:
        - name: Configure the server to receive remote input
          ansible.builtin.include_role:
            name: 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: Deploy the logging solution
      hosts: managed-node-02.example.com
      tasks:
        - name: Configure the server to output the logs to local files in directories named by remote host names
          ansible.builtin.include_role:
            name: 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]

    サンプル Playbook の最初のプレイで指定されている設定は次のとおりです。

    logging_inputs
    ロギングの入力ディクショナリーのリストを定義します。type: remote オプションを指定すると、ネットワークを介した他のロギングシステムからのリモート入力が対象になります。udp_ports: [ 601 ] オプションは、監視する UDP ポート番号のリストを定義します。tcp_ports: [ 601 ] オプションは、監視する TCP ポート番号のリストを定義します。udp_portstcp_ports の両方が設定されている場合、udp_ports が使用され、tcp_ports は削除されます。
    logging_outputs
    ロギングの出力ディクショナリーのリストを定義します。type: remote_files オプションを指定すると、ログの送信元であるリモートホストとプログラム名ごとに、出力がローカルファイルに保存されます。
    logging_flows
    ロギングのフローディクショナリーのリストを定義して、logging_inputslogging_outputs の関係を指定します。inputs: [remote_udp_input、remote_tcp_input] オプションは、ログの処理を開始する入力のリストを指定します。outputs: [remote_files_output] オプションは、ログ送信先の出力のリストを指定します。

    サンプル Playbook の 2 番目のプレイで指定されている設定は次のとおりです。

    logging_inputs
    ロギングの入力ディクショナリーのリストを定義します。type: basics オプションを指定すると、systemd ジャーナルまたは Unix ソケットからの入力が対象になります。
    logging_outputs
    ロギングの出力ディクショナリーのリストを定義します。type: forwards オプションにより、ネットワーク経由でリモートログサーバーにログを送信できます。severity: info オプションは、重大度が情報のログメッセージを示します。facility: mail オプションは、ログメッセージを生成するシステムプログラムの種類を示します。target: <host1.example.com> オプションは、リモートログサーバーのホスト名を指定します。udp_port: 601/tcp_port: 601 オプションは、リモートログサーバーがリッスンする UDP/TCP ポートを定義します。
    logging_flows
    ロギングのフローディクショナリーのリストを定義して、logging_inputslogging_outputs の関係を指定します。inputs: [basic_input] オプションは、ログの処理を開始する入力のリストを指定します。outputs: [forward_output0, forward_output1] オプションは、ログ送信先の出力のリストを指定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.logging/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/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. クライアントシステムがサーバーにメッセージを送信することを確認します。

    1. クライアントシステムで、テストメッセージを送信します。

      # logger test
    2. サーバーシステムで、/var/log/<host2.example.com>/messages ログを表示します。次に例を示します。

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

      <host2.example.com> は、クライアントシステムのホスト名に置き換えます。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合は root) が含まれていることに注意してください。

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.logging/README.md ファイル
  • /usr/share/doc/rhel-system-roles/logging/ ディレクトリー
  • rsyslog.conf(5) および syslog(3) man ページ

16.3. TLS を使用した logging RHEL システムロールの使用

Transport Layer Security (TLS) は、コンピューターネットワーク上でセキュアな通信を可能にするために設計された暗号化プロトコルです。

RHEL システムロールの logging を使用すると、ログメッセージのセキュアな転送を設定して、1 つ以上のクライアントで systemd-journal サービスからログを取得し、TLS を使用してリモートサーバーに転送できます。

通常、リモートロギングソリューションでログを転送するための TLS は、インターネットなどの信頼性の低いネットワークやパブリックネットワーク経由で機密データを送信する場合に使用されます。また、TLS で証明書を使用することで、クライアントから正しい信頼できるサーバーにログを確実に転送できます。これにより、"中間者攻撃" などの攻撃を防ぐことができます。

16.3.1. TLS を使用したクライアントロギングの設定

logging RHEL システムロールを使用すると、RHEL クライアントでのロギングを設定し、TLS 暗号化を使用してログをリモートロギングシステムに転送できます。

この手順では、秘密鍵と証明書を作成します。その後、Ansible インベントリーのクライアントグループ内の全ホストに TLS を設定します。TLS プロトコルは、メッセージ送信を暗号化し、ネットワーク経由でログを安全に転送します。

注記

証明書を作成するために、Playbook で certificate RHEL システムロールを呼び出す必要はありません。このロールは、logging_certificates 変数が設定されている場合、logging RHEL システムロールによって自動的に呼び出されます。

CA が作成された証明書に署名できるようにするには、管理対象ノードが IdM ドメインに登録されている必要があります。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • 管理対象ノードが IdM ドメインに登録されている。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure remote logging solution using TLS for secure transfer of logs
      hosts: managed-node-01.example.com
      tasks:
        - name: Deploying files input and forwards output with certs
          ansible.builtin.include_role:
            name: rhel-system-roles.logging
          vars:
            logging_certificates:
              - name: logging_cert
                dns: ['localhost', 'www.example.com']
                ca: ipa
            logging_pki_files:
              - ca_cert: /local/path/to/ca_cert.pem
                cert: /local/path/to/logging_cert.pem
                private_key: /local/path/to/logging_cert.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_certificates
    このパラメーターの値は、certificate RHEL システムロールの certificate_requests に渡され、秘密鍵と証明書の作成に使用されます。
    logging_pki_files

    このパラメーターを使用すると、TLS に使用する CA、証明書、および鍵ファイルを検索するためにロギングで使用するパスとその他の設定 (サブパラメーター ca_certca_cert_srccertcert_srcprivate_keyprivate_key_src、および tls で指定) を設定できます。

    注記

    logging_certificates を使用して管理対象ノードにファイルを作成する場合は、ca_cert_srccert_src、および private_key_src を使用しないでください。これらは、logging_certificates によって作成されていないファイルのコピーに使用されます。

    ca_cert
    管理対象ノード上の CA 証明書ファイルへのパスを表します。デフォルトのパスは /etc/pki/tls/certs/ca.pem で、ファイル名はユーザーが設定します。
    cert
    管理対象ノード上の証明書ファイルへのパスを表します。デフォルトのパスは /etc/pki/tls/certs/server-cert.pem で、ファイル名はユーザーが設定します。
    private_key
    管理対象ノード上の秘密鍵ファイルへのパスを表します。デフォルトのパスは /etc/pki/tls/private/server-key.pem で、ファイル名はユーザーが設定します。
    ca_cert_src
    ターゲットホストの ca_cert で指定された場所にコピーされる、コントロールノード上の CA 証明書ファイルへのパスを表します。logging_certificates を使用する場合は、これを使用しないでください。
    cert_src
    ターゲットホストの cert で指定された場所にコピーされる、コントロールノード上の証明書ファイルへのパスを表します。logging_certificates を使用する場合は、これを使用しないでください。
    private_key_src
    ターゲットホストの private_key で指定された場所にコピーされる、コントロールノード上の秘密鍵ファイルへのパスを表します。logging_certificates を使用する場合は、これを使用しないでください。
    tls
    このパラメーターを true に設定すると、ネットワーク上でログがセキュアに転送されます。セキュアなラッパーが必要ない場合は、tls: false に設定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.logging/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.logging/README.md ファイル
  • /usr/share/doc/rhel-system-roles/logging/ ディレクトリー
  • /usr/share/ansible/roles/rhel-system-roles.certificate/README.md ファイル
  • /usr/share/doc/rhel-system-roles/certificate/ ディレクトリー
  • RHEL システムロールを使用した証明書の要求
  • rsyslog.conf(5) および syslog(3) man ページ

16.3.2. TLS を使用したサーバーロギングの設定

logging RHEL システムロールを使用すると、RHEL サーバーでのロギングを設定し、TLS 暗号化を使用してリモートロギングシステムからログを受信するようにサーバーを設定できます。

この手順では、秘密鍵と証明書を作成します。その後、Ansible インベントリーのサーバーグループ内の全ホストに TLS を設定します。

注記

証明書を作成するために、Playbook で certificate RHEL システムロールを呼び出す必要はありません。logging RHEL システムロールがこのロールを自動的に呼び出します。

CA が作成された証明書に署名できるようにするには、管理対象ノードが IdM ドメインに登録されている必要があります。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • 管理対象ノードが IdM ドメインに登録されている。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure remote logging solution using TLS for secure transfer of logs
      hosts: managed-node-01.example.com
      tasks:
        - name: Deploying remote input and remote_files output with certs
          ansible.builtin.include_role:
            name: rhel-system-roles.logging
          vars:
            logging_certificates:
              - name: logging_cert
                dns: ['localhost', 'www.example.com']
                ca: ipa
            logging_pki_files:
              - ca_cert: /local/path/to/ca_cert.pem
                cert: /local/path/to/logging_cert.pem
                private_key: /local/path/to/logging_cert.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_certificates
    このパラメーターの値は、certificate RHEL システムロールの certificate_requests に渡され、秘密鍵と証明書の作成に使用されます。
    logging_pki_files

    このパラメーターを使用すると、TLS に使用する CA、証明書、および鍵ファイルを検索するためにロギングで使用するパスとその他の設定 (サブパラメーター ca_certca_cert_srccertcert_srcprivate_keyprivate_key_src、および tls で指定) を設定できます。

    注記

    logging_certificates を使用して管理対象ノードにファイルを作成する場合は、ca_cert_srccert_src、および private_key_src を使用しないでください。これらは、logging_certificates によって作成されていないファイルのコピーに使用されます。

    ca_cert
    管理対象ノード上の CA 証明書ファイルへのパスを表します。デフォルトのパスは /etc/pki/tls/certs/ca.pem で、ファイル名はユーザーが設定します。
    cert
    管理対象ノード上の証明書ファイルへのパスを表します。デフォルトのパスは /etc/pki/tls/certs/server-cert.pem で、ファイル名はユーザーが設定します。
    private_key
    管理対象ノード上の秘密鍵ファイルへのパスを表します。デフォルトのパスは /etc/pki/tls/private/server-key.pem で、ファイル名はユーザーが設定します。
    ca_cert_src
    ターゲットホストの ca_cert で指定された場所にコピーされる、コントロールノード上の CA 証明書ファイルへのパスを表します。logging_certificates を使用する場合は、これを使用しないでください。
    cert_src
    ターゲットホストの cert で指定された場所にコピーされる、コントロールノード上の証明書ファイルへのパスを表します。logging_certificates を使用する場合は、これを使用しないでください。
    private_key_src
    ターゲットホストの private_key で指定された場所にコピーされる、コントロールノード上の秘密鍵ファイルへのパスを表します。logging_certificates を使用する場合は、これを使用しないでください。
    tls
    このパラメーターを true に設定すると、ネットワーク上でログがセキュアに転送されます。セキュアなラッパーが必要ない場合は、tls: false に設定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.logging/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

関連情報

16.4. RELP で logging RHEL システムロールの使用

Reliable Event Logging Protocol (RELP) とは、TCP ネットワークを使用する、データとメッセージロギング用のネットワーキングプロトコルのことです。イベントメッセージを確実に配信するので、メッセージの損失が許されない環境で使用できます。

RELP の送信側はコマンド形式でログエントリーを転送し、受信側は処理後に確認応答します。RELP は、一貫性を保つために、転送されたコマンドごとにトランザクション番号を保存し、各種メッセージの復旧します。

RELP Client と RELP Server の間に、リモートロギングシステムを検討することができます。RELP Client はリモートロギングシステムにログを転送し、RELP Server はリモートロギングシステムから送信されたすべてのログを受け取ります。このユースケースを実現するには、logging RHEL システムロールを使用して、ログエントリーが確実に送受信されるようにロギングシステムを設定できます。

16.4.1. RELP を使用したクライアントロギングの設定

logging RHEL システムロールを使用すると、ローカルに保存されたログメッセージを RELP を使用してリモートロギングシステムに転送するように設定できます。

この手順では、Ansible インベントリーの client グループ内の全ホストに RELP を設定します。RELP 設定は Transport Layer Security (TLS) を使用して、メッセージ送信を暗号化し、ネットワーク経由でログを安全に転送します。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure client-side of the remote logging solution using RELP
      hosts: managed-node-01.example.com
      tasks:
        - name: Deploy basic input and RELP output
          ansible.builtin.include_role:
            name: 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 に設定します。デフォルトでは tls パラメーターは true に設定されますが、RELP を使用する場合には鍵/証明書およびトリプレット {ca_certcertprivate_key} や {ca_cert_srccert_srcprivate_key_src} が必要です。

    • {ca_cert_srccert_srcprivate_key_src} のトリプレットを設定すると、デフォルトの場所 (/etc/pki/tls/certs/etc/pki/tls/private) が、コントロールノードからファイルを転送するため、管理対象ノードの宛先として使用されます。この場合、ファイル名はトリプレットの元の名前と同じです。
    • {ca_certcertprivate_key} トリプレットが設定されている場合は、ファイルはロギング設定の前にデフォルトのパスに配置されている必要があります。
    • トリプレットの両方が設定されている場合には、ファイルはコントロールノードのローカルのパスから管理対象ノードの特定のパスへ転送されます。
    ca_cert
    CA 証明書へのパスを表します。デフォルトのパスは /etc/pki/tls/certs/ca.pem で、ファイル名はユーザーが設定します。
    cert
    証明書へのパスを表します。デフォルトのパスは /etc/pki/tls/certs/server-cert.pem で、ファイル名はユーザーが設定します。
    private_key
    秘密鍵へのパスを表します。デフォルトのパスは /etc/pki/tls/private/server-key.pem で、ファイル名はユーザーが設定します。
    ca_cert_src
    ローカルの CA 証明書ファイルパスを表します。これは管理対象ノードにコピーされます。ca_cert を指定している場合は、その場所にコピーされます。
    cert_src
    ローカルの証明書ファイルパスを表します。これは管理対象ノードにコピーされます。cert を指定している場合には、その証明書が場所にコピーされます。
    private_key_src
    ローカルキーファイルのパスを表します。これは管理対象ノードにコピーされます。private_key を指定している場合は、その場所にコピーされます。
    pki_authmode
    name または fingerprint の認証モードを使用できます。
    permitted_servers
    ロギングクライアントが、TLS 経由での接続およびログ送信を許可するサーバーのリスト。
    inputs
    ロギング入力ディクショナリーのリスト。
    outputs
    ロギング出力ディクショナリーのリスト。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.logging/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.logging/README.md ファイル
  • /usr/share/doc/rhel-system-roles/logging/ ディレクトリー
  • rsyslog.conf(5) および syslog(3) man ページ

16.4.2. RELP を使用したサーバーログの設定

logging RHEL システムロールを使用すると、ログメッセージを RELP を使用してリモートロギングシステムから受信するようにサーバーを設定できます。

以下の手順では、Ansible インベントリーの server グループ内の全ホストに RELP を設定します。RELP 設定は TLS を使用して、メッセージ送信を暗号化し、ネットワーク経由でログを安全に転送します。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure server-side of the remote logging solution using RELP
      hosts: managed-node-01.example.com
      tasks:
        - name: Deploying remote input and remote_files output
          ansible.builtin.include_role:
            name: 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 に設定します。デフォルトでは tls パラメーターは true に設定されますが、RELP を使用する場合には鍵/証明書およびトリプレット {ca_certcertprivate_key} や {ca_cert_srccert_srcprivate_key_src} が必要です。

    • {ca_cert_srccert_srcprivate_key_src} のトリプレットを設定すると、デフォルトの場所 (/etc/pki/tls/certs/etc/pki/tls/private) が、コントロールノードからファイルを転送するため、管理対象ノードの宛先として使用されます。この場合、ファイル名はトリプレットの元の名前と同じです。
    • {ca_certcertprivate_key} トリプレットが設定されている場合は、ファイルはロギング設定の前にデフォルトのパスに配置されている必要があります。
    • トリプレットの両方が設定されている場合には、ファイルはコントロールノードのローカルのパスから管理対象ノードの特定のパスへ転送されます。
    ca_cert
    CA 証明書へのパスを表します。デフォルトのパスは /etc/pki/tls/certs/ca.pem で、ファイル名はユーザーが設定します。
    cert
    証明書へのパスを表します。デフォルトのパスは /etc/pki/tls/certs/server-cert.pem で、ファイル名はユーザーが設定します。
    private_key
    秘密鍵へのパスを表します。デフォルトのパスは /etc/pki/tls/private/server-key.pem で、ファイル名はユーザーが設定します。
    ca_cert_src
    ローカルの CA 証明書ファイルパスを表します。これは管理対象ノードにコピーされます。ca_cert を指定している場合は、その場所にコピーされます。
    cert_src
    ローカルの証明書ファイルパスを表します。これは管理対象ノードにコピーされます。cert を指定している場合には、その証明書が場所にコピーされます。
    private_key_src
    ローカルキーファイルのパスを表します。これは管理対象ノードにコピーされます。private_key を指定している場合は、その場所にコピーされます。
    pki_authmode
    name または fingerprint の認証モードを使用できます。
    permitted_clients
    ロギングサーバーが TLS 経由での接続およびログ送信を許可するクライアントのリスト。
    inputs
    ロギング入力ディクショナリーのリスト。
    outputs
    ロギング出力ディクショナリーのリスト。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.logging/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.logging/README.md ファイル
  • /usr/share/doc/rhel-system-roles/logging/ ディレクトリー
  • rsyslog.conf(5) および syslog(3) man ページ

第17章 RHEL システムロールを使用した PCP によるパフォーマンス監視の設定

Performance Co-Pilot (PCP) は、システムパフォーマンス分析ツールキットです。これを使用すると、Red Hat Enterprise Linux システム上の多くのコンポーネントからパフォーマンスデータを記録および分析できます。

metrics RHEL システムロールを使用すると、PCP のインストールと設定を自動化できます。また、ロールを使用して Grafana を設定し、PCP メトリクスを視覚化できます。

17.1. metrics RHEL システムロールを使用して Performance Co-Pilot を設定する

Performance Co-Pilot (PCP) を使用すると、CPU 使用率やメモリー使用量など、多くのメトリクスを監視できます。これは、たとえばリソースとパフォーマンスのボトルネックを特定するのに役立ちます。metrics RHEL システムロールを使用すると、複数のホストに PCP をリモートで設定してメトリクスを記録できます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Monitoring performance metrics
      hosts: managed-node-01.example.com
      tasks:
        - name: Configure Performance Co-Pilot
          ansible.builtin.include_role:
            name: rhel-system-roles.metrics
          vars:
            metrics_retention_days: 14
            metrics_manage_firewall: true
            metrics_manage_selinux: true

    サンプル Playbook で指定されている設定は次のとおりです。

    metrics_retention_days: <number>
    pmlogger_daily systemd タイマーが古い PCP アーカイブを削除するまでの日数を設定します。
    metrics_manage_firewall: <true|false>
    firewalld サービスで必要なポートをロールによって開くかどうかを定義します。管理対象ノード上の PCP にリモートでアクセスする場合は、この変数を true に設定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.metrics/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • メトリクスをクエリーします。次に例を示します。

    # ansible managed-node-01.example.com -m command -a 'pminfo -f kernel.all.load'

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.metrics/README.md ファイル
  • /usr/share/doc/rhel-system-roles/metrics/ ディレクトリー

17.2. metrics RHEL システムロールを使用して認証を使用する Performance Co-Pilot を設定する

Performance Co-Pilot (PCP) で認証を有効にすると、pmcd サービスと Performance Metrics Domain Agent (PDMA) によって、監視ツールを実行しているユーザーにアクションの実行を許可するかどうかを決定できるようになります。認証されたユーザーは機密情報を含むメトリクスにアクセスできます。また、エージェントの中には認証が必要なものもあります。たとえば、bpftrace エージェントは、認証を使用して、bpftrace スクリプトをカーネルにロードしてメトリクスを生成することがユーザーに許可されているかどうかを確認します。

metrics RHEL システムロールを使用すると、認証を使用する PCP を複数のホストにリモートで設定できます。

前提条件

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      metrics_usr: <username>
      metrics_pwd: <password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Monitoring performance metrics
      hosts: managed-node-01.example.com
      tasks:
        - name: Configure Performance Co-Pilot
          ansible.builtin.include_role:
            name: rhel-system-roles.metrics
          vars:
            metrics_retention_days: 14
            metrics_manage_firewall: true
            metrics_manage_selinux: true
    	metrics_username: "{{ metrics_usr }}"
            metrics_password: "{{ metrics_pwd }}"

    サンプル Playbook で指定されている設定は次のとおりです。

    metrics_retention_days: <number>
    pmlogger_daily systemd タイマーが古い PCP アーカイブを削除するまでの日数を設定します。
    metrics_manage_firewall: <true|false>
    firewalld サービスで必要なポートをロールによって開くかどうかを定義します。管理対象ノード上の PCP にリモートでアクセスする場合は、この変数を true に設定します。
    metrics_username: <username>
    このロールは、管理対象ノード上でこのユーザーをローカルに作成し、Simple Authentication and Security Layer (SASL) データベース /etc/pcp/passwd.db に認証情報を追加し、PCP に認証を設定します。さらに、Playbook で metrics_from_bpftrace: true を設定すると、PCP がこのアカウントを使用して bpftrace スクリプトを登録します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.metrics/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

検証

  • pcp パッケージがインストールされているホストで、認証を必要とするメトリクスをクエリーします。

    1. Playbook で使用した認証情報を使用してメトリクスをクエリーします。

      # pminfo -fmdt -h pcp://managed-node-01.example.com?username=<user> proc.fd.count
      Password: <password>
      
      proc.fd.count
          inst [844 or "000844 /var/lib/pcp/pmdas/proc/pmdaproc"] value 5

      コマンドが成功すると、proc.fd.count メトリクスの値が返されます。

    2. ユーザー名を省略してコマンドを再度実行し、認証されていないユーザーの場合はコマンドが失敗することを確認します。

      # pminfo -fmdt -h pcp://managed-node-01.example.com proc.fd.count
      
      proc.fd.count
      Error: No permission to perform requested operation

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.metrics/README.md ファイル
  • /usr/share/doc/rhel-system-roles/metrics/ ディレクトリー
  • Ansible vault

17.3. Performance Co-Pilot で複数のホストを監視するために metrics RHEL システムロールを使用して Grafana を設定する

複数のホストに Performance Co-Pilot (PCP) をすでに設定している場合は、Grafana のインスタンスを使用して、これらのホストのメトリクスを視覚化できます。ライブデータを表示できます。PCP データが Redis データベースに保存されている場合は、過去のデータも表示できます。

metrics RHEL システムロールを使用すると、Grafana、PCP プラグイン、オプションの Redis データベース、およびデータソースの設定のセットアッププロセスを自動化できます。

注記

metrics ロールを使用してホストに Grafana をインストールすると、ロールによってこのホストに PCP も自動的にインストールされます。

前提条件

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      grafana_admin_pwd: <password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Monitoring performance metrics
      hosts: managed-node-01.example.com
      vars_files:
        - vault.yml
      tasks:
        - name: Set up Grafana to monitor multiple hosts
          ansible.builtin.include_role:
            name: rhel-system-roles.metrics
          vars:
            metrics_graph_service: true
            metrics_query_service: true
            metrics_monitored_hosts:
              - <pcp_host_1.example.com>
              - <pcp_host_2.example.com>
            metrics_manage_firewall: true
            metrics_manage_selinux: true
    
        - name: Set Grafana admin password
          ansible.builtin.shell:
            cmd: grafana-cli admin reset-admin-password "{{ grafana_admin_pwd }}"

    サンプル Playbook で指定されている設定は次のとおりです。

    metrics_graph_service: true
    Grafana と PCP プラグインをインストールします。さらに、PCP VectorPCP Redis、および PCP bpftrace データソースが Grafana に追加されます。
    metrics_query_service: <true|false>
    ロールによって、一元的なメトリクス記録用に Redis をインストールして設定する必要があるかどうかを定義します。有効にすると、PCP クライアントから収集されたデータが Redis に保存され、ライブデータだけでなく履歴データも表示できるようになります。
    metrics_monitored_hosts: <list_of_hosts>
    監視するホストのリストを定義します。定義すると、Grafana で、これらのホストのデータに加えて、Grafana を実行しているホストのデータを表示できます。
    metrics_manage_firewall: <true|false>
    firewalld サービスで必要なポートをロールによって開くかどうかを定義します。この変数を true に設定すると、たとえば Grafana にリモートでアクセスできるようになります。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.metrics/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

検証

  1. ブラウザーで http://<grafana_server_IP_or_hostname>:3000 を開き、上記手順で設定したパスワードを使用して admin ユーザーとしてログインします。
  2. 監視データを表示します。

    • ライブデータを表示するには、次の手順を実行します。

      1. 左側のナビゲーションバーにある Performance Co-Pilot アイコンをクリックし、PCP Vector Checklist を選択します。
      2. デフォルトでは、Grafana を実行しているホストからのメトリクスがグラフに表示されます。別のホストに切り替えるには、hostspec フィールドにホスト名を入力して Enter キー を押します。
    • Redis データベースに保存されている履歴データを表示するには、PCP Redis データソースを使用してパネルを作成 します。そのためには、Playbook で metrics_query_service: true を設定する必要があります。

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.metrics/README.md ファイル
  • /usr/share/doc/rhel-system-roles/metrics/ ディレクトリー
  • Ansible vault

第18章 RHEL システムロールを使用した Microsoft SQL Server の設定

microsoft.sql.server Ansible システムロールを使用して、Microsoft SQL Server のインストールと管理を自動化できます。このロールは、mssql TuneD プロファイルを適用して Red Hat Enterprise Linux (RHEL) を最適化し、SQL Server のパフォーマンスとスループットを向上させます。

注記

このロールは、インストール中に SQL Server および関連パッケージのリポジトリーを管理対象ホストに追加します。これらのリポジトリー内のパッケージは、Microsoft によって提供、保守、ホストされています。

18.1. microsoft.sql.server Ansible システムロールと既存の証明書ファイルを使用して SQL Server をインストールおよび設定する

アプリケーションに Microsoft SQL Server データベースが必要な場合は、TLS 暗号化を使用して SQL Server を設定し、アプリケーションとデータベース間のセキュアな通信を有効にできます。microsoft.sql.server Ansible システムロールを使用すると、このプロセスを自動化し、TLS 暗号化を使用して SQL Server をリモートでインストールおよび設定できます。Playbook で、既存の秘密鍵と、認証局 (CA) によって発行された TLS 証明書を使用できます。

管理対象ホストの RHEL バージョンに応じて、インストールできる SQL Server のバージョンが異なります。

  • RHEL 7.9: SQL Server 2017 および 2019
  • RHEL 8: SQL Server 2017、2019、および 2022
  • RHEL 9.4 以降: SQL Server 2022

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • ansible-collection-microsoft-sql パッケージまたは microsoft.sql コレクションコントロールノードがインストールされている。
  • 管理対象ノードに 2 GB 以上の RAM がインストールされている。
  • 管理対象ノードが、RHEL 7.9、RHEL 8、RHEL 9.4 以降のいずれかのバージョンを使用している。
  • 証明書が、Playbook と同じディレクトリーの sql_crt.pem ファイルに保存されている。
  • 秘密鍵が、Playbook と同じディレクトリーの sql_cert.key ファイルに保存されている。
  • SQL クライアントによって証明書を発行した CA が信頼されている。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      sa_pwd: <sa_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Installing and configuring Microsoft SQL Server
      hosts: managed-node-01.example.com
      vars_files:
        - vault.yml
      tasks:
        - name: SQL Server with an existing private key and certificate
          ansible.builtin.include_role:
            name: microsoft.sql.server
          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_version: 2022
            mssql_password: "{{ sa_pwd  }}"
            mssql_edition: Developer
            mssql_tcp_port: 1433
            mssql_manage_firewall: true
    
            mssql_tls_enable: true
            mssql_tls_cert: sql_crt.pem
            mssql_tls_private_key: sql_cert.key
            mssql_tls_version: 1.2
            mssql_tls_force: true

    サンプル Playbook で指定されている設定は次のとおりです。

    mssql_tls_enable: true
    TLS 暗号化を有効にします。この設定を有効にする場合は、mssql_tls_certmssql_tls_private_key も定義する必要があります。
    mssql_tls_cert: <path>
    コントロールノードに保存されている TLS 証明書へのパスを設定します。ロールは、このファイルを管理対象ノードの /etc/pki/tls/certs/ ディレクトリーにコピーします。
    mssql_tls_private_key: <path>
    コントロールノード上の TLS 秘密鍵へのパスを設定します。ロールは、このファイルを管理対象ノードの /etc/pki/tls/private/ ディレクトリーにコピーします。
    mssql_tls_force: true
    宛先ディレクトリー内の TLS 証明書および秘密鍵を置き換えます (存在する場合)。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/microsoft.sql-server/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

検証

  • SQL Server ホストで、-N パラメーターを指定した sqlcmd ユーティリティーを使用して、SQL Server への暗号化された接続を確立し、クエリーを実行します。次に例を示します。

    $ /opt/mssql-tools/bin/sqlcmd -N -S server.example.com -U "sa" -P <sa_password> -Q 'SELECT SYSTEM_USER'

    コマンドが成功した場合、サーバーへの接続は TLS で暗号化されています。

関連情報

  • /usr/share/ansible/roles/microsoft.sql-server/README.md ファイル
  • Ansible vault

18.2. microsoft.sql.server Ansible システムロールと IdM から発行された TLS 証明書を使用して SQL Server をインストールおよび設定する

アプリケーションに Microsoft SQL Server データベースが必要な場合は、TLS 暗号化を使用して SQL Server を設定し、アプリケーションとデータベース間のセキュアな通信を有効にできます。SQL Server ホストが Red Hat Identity Management (IdM) ドメインのメンバーである場合、certmonger サービスが証明書要求と将来の更新を管理できます。

microsoft.sql.server Ansible システムロールを使用すると、このプロセスを自動化できます。TLS 暗号化を使用して SQL Server をリモートでインストールおよび設定することができます。microsoft.sql.server ロールは、certificate Ansible システムロールを使用して certmonger を設定し、IdM から証明書を要求します。

管理対象ホストの RHEL バージョンに応じて、インストールできる SQL Server のバージョンが異なります。

  • RHEL 7.9: SQL Server 2017 および 2019
  • RHEL 8: SQL Server 2017、2019、および 2022
  • RHEL 9.4 以降: SQL Server 2022

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • ansible-collection-microsoft-sql パッケージまたは microsoft.sql コレクションコントロールノードがインストールされている。
  • 管理対象ノードに 2 GB 以上の RAM がインストールされている。
  • 管理対象ノードが、RHEL 7.9、RHEL 8、RHEL 9.4 以降のいずれかのバージョンを使用している。
  • 管理対象ノードが、Red Hat Identity Management (IdM) ドメインに登録されている。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      sa_pwd: <sa_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Installing and configuring Microsoft SQL Server
      hosts: managed-node-01.example.com
      vars_files:
        - vault.yml
      tasks:
        - name: SQL Server with certificates issued by Red Hat IdM
          ansible.builtin.include_role:
            name: microsoft.sql.server
          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_version: 2022
            mssql_password: "{{ sa_pwd  }}"
            mssql_edition: Developer
            mssql_tcp_port: 1433
            mssql_manage_firewall: true
    
            mssql_tls_enable: true
            mssql_tls_certificates:
              - name: sql_cert
                dns: server.example.com
                ca: ipa

    サンプル Playbook で指定されている設定は次のとおりです。

    mssql_tls_enable: true
    TLS 暗号化を有効にします。この設定を有効にする場合は、mssql_tls_certificates も定義する必要があります。
    mssql_tls_certificates
    certificate ロールの設定を含む YAML ディクショナリーのリスト。
    name: <file_name>
    証明書と秘密鍵のベース名を定義します。certificate ロールは、証明書を /etc/pki/tls/certs/<file_name>.crt に保存し、秘密鍵を /etc/pki/tls/private/<file_name>.key ファイルに保存します。
    dns: <hostname_or_list_of_hostnames>
    発行された証明書のサブジェクト代替名 (SAN) フィールドに含まれるホスト名を設定します。ワイルドカード (*) を使用することも、YAML リスト形式で複数の名前を指定することもできます。
    ca: <ca_type>
    certificate ロールが証明書を要求する方法を定義します。ホストが IdM ドメインに登録されている場合はこの変数を ipa に設定し、自己署名証明書を要求する場合は self-sign に設定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/microsoft.sql-server/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

検証

  • SQL Server ホストで、-N パラメーターを指定した sqlcmd ユーティリティーを使用して、SQL Server への暗号化された接続を確立し、クエリーを実行します。次に例を示します。

    $ /opt/mssql-tools/bin/sqlcmd -N -S server.example.com -U "sa" -P <sa_password> -Q 'SELECT SYSTEM_USER'

    コマンドが成功した場合、サーバーへの接続は TLS で暗号化されています。

関連情報

18.3. microsoft.sql.server Ansible システムロールとカスタムストレージパスを使用して SQL Server をインストールおよび設定する

microsoft.sql.server Ansible システムロールを使用して新しい SQL Server をインストールおよび設定する場合、データディレクトリーとログディレクトリーのパスとモードをカスタマイズできます。たとえば、データベースとログファイルを、より多くのストレージ容量を持つ別のディレクトリーに保存する場合は、カスタムパスを設定します。

重要

データまたはログのパスを変更して Playbook を再実行すると、以前使用したディレクトリーとそのすべてのコンテンツが元のパスに残ります。新しい場所には新しいデータベースとログのみが保存されます。

表18.1 データおよびログディレクトリーの SQL Server デフォルト設定
タイプディレクトリーモードOwnerGroup

データ

/var/opt/mssql/data/

[a]

mssql

mssql

Logs

/var/opt/mssql/los/

[a]

mssql

mssql

[a] ディレクトリーが存在する場合、ロールはモードを保持します。ディレクトリーが存在しない場合、ロールはディレクトリーを作成するときに管理対象ノードにデフォルトの umask を適用します。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • ansible-collection-microsoft-sql パッケージまたは microsoft.sql コレクションコントロールノードがインストールされている。
  • 管理対象ノードに 2 GB 以上の RAM がインストールされている。
  • 管理対象ノードが、RHEL 7.9、RHEL 8、RHEL 9.4 以降のいずれかのバージョンを使用している。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      sa_pwd: <sa_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 既存の Playbook ファイル (例: ~/playbook.yml) を編集し、ストレージおよびログ関連の変数を追加します。

    ---
    - name: Installing and configuring Microsoft SQL Server
      hosts: managed-node-01.example.com
      vars_files:
        - vault.yml
      tasks:
        - name: SQL Server with custom storage paths
          ansible.builtin.include_role:
            name: microsoft.sql.server
          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_version: 2022
            mssql_password: "{{ sa_pwd  }}"
            mssql_edition: Developer
            mssql_tcp_port: 1433
            mssql_manage_firewall: true
    
            mssql_datadir: /var/lib/mssql/
            mssql_datadir_mode: '0700'
            mssql_logdir: /var/log/mssql/
            mssql_logdir_mode: '0700'

    サンプル Playbook で指定されている設定は次のとおりです。

    mssql_datadir_mode および mssql_logdir_mode
    権限モードを設定します。ロールが値を 8 進数ではなく文字列として解析するように、値を一重引用符で囲んで指定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/microsoft.sql-server/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

検証

  1. データディレクトリーのモードを表示します。

    $ ansible managed-node-01.example.com -m command -a 'ls -ld /var/lib/mssql/'
    drwx------. 12 mssql mssql 4096 Jul  3 13:53 /var/lib/mssql/
  2. ログディレクトリーのモードを表示します。

    $ ansible managed-node-01.example.com -m command -a 'ls -ld /var/log/mssql/'
    drwx------. 12 mssql mssql 4096 Jul  3 13:53 /var/log/mssql/

関連情報

  • /usr/share/ansible/roles/microsoft.sql-server/README.md ファイル
  • Ansible vault

18.4. microsoft.sql.server Ansible システムロールと AD 統合を使用して SQL Server をインストールおよび設定する

Microsoft SQL Server を Active Directory (AD) に統合して、AD ユーザーが SQL Server に対して認証できるようにすることができます。microsoft.sql.server Ansible システムロールを使用すると、このプロセスを自動化し、SQL Server をリモートでインストールして適切に設定できます。ただし、Playbook を実行した後、AD および SQL Server で手動の手順を実行する必要があることに注意してください。

管理対象ホストの RHEL バージョンに応じて、インストールできる SQL Server のバージョンが異なります。

  • RHEL 7.9: SQL Server 2017 および 2019
  • RHEL 8: SQL Server 2017、2019、および 2022
  • RHEL 9.4 以降: SQL Server 2022

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • ansible-collection-microsoft-sql パッケージまたは microsoft.sql コレクションコントロールノードがインストールされている。
  • 管理対象ノードに 2 GB 以上の RAM がインストールされている。
  • 管理対象ノードが、RHEL 7.9、RHEL 8、RHEL 9.4 以降のいずれかのバージョンを使用している。
  • ネットワーク内で AD ドメインを利用できる。
  • AD に逆引き DNS (RDNS) ゾーンが存在し、ゾーンに各 AD ドメインコントローラー (DC) の Pointer (PTR) リソースレコードが含まれている。
  • 管理対象ホストのネットワーク設定で、AD DNS サーバーが使用される。
  • 管理対象ホストが次の DNS エントリーを解決できる。

    • AD DC のホスト名と完全修飾ドメイン名 (FQDN) が両方とも IP アドレスに解決される。
    • AD DC の IP アドレスが FQDN に解決される。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      sa_pwd: <sa_password>
      sql_pwd: <SQL_AD_password>
      ad_admin_pwd: <AD_admin_password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Installing and configuring Microsoft SQL Server
      hosts: managed-node-01.example.com
      vars_files:
        - vault.yml
      tasks:
        - name: SQL Server with AD authentication
          ansible.builtin.include_role:
            name: microsoft.sql.server
          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_version: 2022
            mssql_password: "{{ sa_pwd }}"
            mssql_edition: Developer
            mssql_tcp_port: 1433
            mssql_manage_firewall: true
    
            mssql_ad_configure: true
            mssql_ad_join: true
            mssql_ad_sql_user: sqluser
            mssql_ad_sql_password: "{{ sql_pwd }}"
            ad_integration_realm: ad.example.com
            ad_integration_user: Administrator
            ad_integration_password: "{{ ad_admin_pwd }}"

    サンプル Playbook で指定されている設定は次のとおりです。

    mssql_ad_configure: true
    AD に対する認証を有効にします。
    mssql_ad_join: true
    ad_integration RHEL システムロールを使用して、管理対象ノードを AD に参加させます。ロールは、ad_integration_realmad_integration_user、および ad_integration_password 変数の設定を使用してドメインに参加します。
    mssql_ad_sql_user: <username>
    管理目的でロールが AD および SQL Server に作成する AD アカウントの名前を設定します。
    ad_integration_user: <AD_user>
    マシンをドメインに参加させる権限と、mssql_ad_sql_user で指定された AD ユーザーを作成する権限を持つ AD ユーザーの名前を設定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/microsoft.sql-server/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml
  5. AD ドメインで、Playbook で指定した AD SQL ユーザーに対して 128 ビットおよび 256 ビットの Kerberos 認証を有効にします。以下のオプションのいずれかを使用します。

    • Active Directory Users and Computers アプリケーションで、以下を実行します。

      1. ad.example.com > Users > sqluser > Accounts に移動します。
      2. Account options リストで、This account supports Kerberos AES 128 bit encryptionThis account supports Kerberos AES 256 bit encryption を選択します。
      3. Apply をクリックします。
    • 管理者モードの PowerShell で、次のように入力します。

      C:\> Set-ADUser -Identity sqluser -KerberosEncryptionType AES128,AES256
  6. SQL Server に対して認証できる AD ユーザーを許可します。SQL Server で、次の手順を実行します。

    1. Administrator ユーザーの Kerberos チケットを取得します。

      $ kinit Administrator@ad.example.com
    2. AD ユーザーを許可します。

      $ /opt/mssql-tools/bin/sqlcmd -S. -Q 'CREATE LOGIN [AD\<AD_user>] FROM WINDOWS;'

      SQL Server へのアクセスを許可するすべての AD ユーザーに対してこの手順を繰り返します。

検証

  • SQL Server を実行する管理対象ノードで、以下を実行します。

    1. AD ユーザーの Kerberos チケットを取得します。

      $ kinit <AD_user>@ad.example.com
    2. sqlcmd ユーティリティーを使用して SQL Server にログインし、クエリーを実行します。次に例を示します。

      $ /opt/mssql-tools/bin/sqlcmd -S. -Q 'SELECT SYSTEM_USER'

関連情報

  • /usr/share/ansible/roles/microsoft.sql-server/README.md ファイル
  • Ansible vault

第19章 RHEL システムロールを使用した NBDE の設定

nbde_client および nbde_server RHEL システムロールを使用すると、Clevis および Tang を使用した Policy-Based Decryption (PBD) ソリューションを自動でデプロイできます。rhel-system-roles パッケージには、これらのシステムロール、関連する例、リファレンスドキュメントが含まれます。

19.1. 複数の Tang サーバーのセットアップに nbde_server RHEL システムロールを使用する

nbde_server システムロールを使用すると、自動ディスク暗号化ソリューションの一部として、Tang サーバーをデプロイして管理できます。このロールは以下の機能をサポートします。

  • Tang 鍵のローテーション
  • Tang 鍵のデプロイおよびバックアップ

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Deploy a Tang server
    - hosts: tang.server.example.com
    - tasks:
      - name: Install and configure periodic key rotation
        ansible.builtin.include_role:
            name: rhel-system-roles.nbde_server
        vars:
          nbde_server_rotate_keys: yes
          nbde_server_manage_firewall: true
          nbde_server_manage_selinux: true

    このサンプル Playbook により、Tang サーバーのデプロイと鍵のローテーションが実行されます。

    サンプル Playbook で指定されている設定は次のとおりです。

    nbde_server_manage_firewall: true
    firewall システムロールを使用して、nbde_server ロールで使用されるポートを管理します。
    nbde_server_manage_selinux: true

    selinux システムロールを使用して、nbde_server ロールで使用されるポートを管理します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.nbde_server/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • NBDE クライアントで、次のコマンドを使用して、Tang サーバーが正しく動作していることを確認します。このコマンドにより、暗号化と復号化に渡すものと同じメッセージが返される必要があります。

    # ansible managed-node-01.example.com -m command -a 'echo test | clevis encrypt tang '{"url":"<tang.server.example.com>"}' -y | clevis decrypt'
    test

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.nbde_server/README.md ファイル
  • /usr/share/doc/rhel-system-roles/nbde_server/ ディレクトリー

19.2. nbde_client RHEL システムロールを使用して DHCP を使用する Clevis クライアントを設定する

nbde_client システムロールにより、複数の Clevis クライアントを自動的にデプロイできます。

このロールを使用すると、LUKS で暗号化されたボリュームを 1 つ以上の Network-Bound (NBDE) サーバー (Tang サーバー) にバインドすることが可能です。パスフレーズを使用して既存のボリュームの暗号化を保持するか、削除できます。パスフレーズを削除したら、NBDE だけを使用してボリュームのロックを解除できます。これは、システムのプロビジョニング後に削除する必要がある一時鍵またはパスワードを使用して、ボリュームが最初に暗号化されている場合に役立ちます。

パスフレーズと鍵ファイルの両方を指定する場合には、ロールは最初に指定した内容を使用します。有効なバインディングが見つからない場合は、既存のバインディングからパスフレーズの取得を試みます。

Policy-Based Decryption (PBD) では、デバイスとスロットのマッピングの形でバインディングを定義します。そのため、同じデバイスに対して複数のバインドを設定できます。デフォルトのスロットは 1 です。

注記

nbde_client システムロールは、Tang バインディングのみをサポートします。したがって、TPM2 バインディングには使用できません。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • LUKS を使用してすでに暗号化されているボリューム。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure clients for unlocking of encrypted volumes by Tang servers
      hosts: managed-node-01.example.com
      tasks:
        - name: Create NBDE client bindings
          ansible.builtin.include_role:
            name: rhel-system-roles.nbde_client
          vars:
            nbde_client_bindings:
              - device: /dev/rhel/root
                encryption_key_src: /etc/luks/keyfile
                nbde_client_early_boot: true
                state: present
                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

    このサンプル Playbook は、2 台の Tang サーバーのうち少なくとも 1 台が利用可能な場合に、LUKS で暗号化した 2 つのボリュームを自動的にアンロックするように Clevis クライアントを設定します。

    サンプル Playbook で指定されている設定は次のとおりです。

    state: present
    state の値は、Playbook を実行した後の設定を示します。新しいバインディングを作成するか、既存のバインディングを更新する場合は、present を使用します。clevis luks bind とは異なり、state: present を使用してデバイススロットにある既存のバインディングを上書きすることもできます。absent に設定すると、指定したバインディングが削除されます。
    nbde_client_early_boot: true

    nbde_client ロールは、デフォルトで、起動初期段階で Tang ピン用のネットワークを利用可能にします。この機能を無効にする必要がある場合は、Playbook に nbde_client_early_boot: false 変数を追加します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.nbde_client/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  1. NBDE クライアントで、Tang サーバーによって自動的にロック解除される暗号化ボリュームの LUKS ピンに、対応する情報が含まれていることを確認します。

    # ansible managed-node-01.example.com -m command -a 'clevis luks list -d /dev/rhel/root'
    1: tang '{"url":"<http://server1.example.com/>"}'
    2: tang '{"url":"<http://server2.example.com/>"}'
  2. nbde_client_early_boot: false 変数を使用しない場合は、起動初期にバインディングが使用できることを確認します。次に例を示します。

    # ansible managed-node-01.example.com -m command -a 'lsinitrd | grep clevis-luks'
    lrwxrwxrwx   1 root     root           48 Jan  4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path
    …

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.nbde_client/README.md ファイル
  • /usr/share/doc/rhel-system-roles/nbde_client/ ディレクトリー

19.3. nbde_client RHEL システムロールを使用して静的 IP Clevis クライアントを設定する

nbde_client RHEL システムロールは、Dynamic Host Configuration Protocol (DHCP) を使用する環境にのみ対応しています。静的 IP 設定の NBDE クライアントでは、ネットワーク設定をカーネルブートパラメーターとして渡す必要があります。

通常、管理者は Playbook を再利用します。Ansible が起動初期段階で静的 IP アドレスを割り当てるホストごとに、個別の Playbook を管理することはありません。そうすることにより、Playbook 内の変数を使用し、外部ファイルで設定を提供できます。そのため、必要なのは Playbook 1 つと設定を含むファイル 1 つだけです。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • LUKS を使用してすでに暗号化されているボリューム。

手順

  1. ホストのネットワーク設定を含むファイル (例: static-ip-settings-clients.yml) を作成し、ホストに動的に割り当てる値を追加します。

    clients:
      managed-node-01.example.com:
        ip_v4: 192.0.2.1
        gateway_v4: 192.0.2.254
        netmask_v4: 255.255.255.0
        interface: enp1s0
      managed-node-02.example.com:
        ip_v4: 192.0.2.2
        gateway_v4: 192.0.2.254
        netmask_v4: 255.255.255.0
        interface: enp1s0
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    - name: Configure clients for unlocking of encrypted volumes by Tang servers
      hosts: managed-node-01.example.com,managed-node-02.example.com
      vars_files:
        - ~/static-ip-settings-clients.yml
      tasks:
        - name: Create NBDE client bindings
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          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
    
        - name: Configure a Clevis client with static IP address during early boot
          ansible.builtin.include_role:
            name: rhel-system-roles.bootloader
          vars:
            bootloader_settings:
              - kernel: ALL
                options:
                  - name: ip
                    value: "{{ clients[inventory_hostname]['ip_v4'] }}::{{ clients[inventory_hostname]['gateway_v4'] }}:{{ clients[inventory_hostname]['netmask_v4'] }}::{{ clients[inventory_hostname]['interface'] }}:none"

    この Playbook は、~/static-ip-settings-clients.yml ファイルにリストされている各ホストの特定の値を動的に読み取ります。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

関連情報

第20章 RHEL システムロールを使用したネットワーク設定

network RHEL システムロールを使用すると、ネットワーク関連の設定および管理タスクを自動化できます。

20.1. network RHEL システムロールとインターフェイス名を使用した静的 IP アドレスでのイーサネット接続の設定

Red Hat Enterprise Linux ホストをイーサネットネットワークに接続するには、ネットワークデバイスの NetworkManager 接続プロファイルを作成します。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

network RHEL システムロールを使用すると、静的 IP アドレス、ゲートウェイ、および DNS 設定を使用してイーサネット接続を設定し、それらを指定のインターフェイス名に割り当てることができます。

通常、管理者は Playbook を再利用します。Ansible が静的 IP アドレスを割り当てるホストごとに、個別の Playbook を管理することはありません。そうすることにより、Playbook 内の変数を使用し、外部ファイルで設定を維持できます。その結果、複数のホストに個別の設定を動的に割り当てるために必要な Playbook が 1 つだけになります。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • サーバーの構成に物理または仮想イーサネットデバイスが存在する。
  • 管理対象ノードが NetworkManager を使用してネットワークを設定している。

手順

  1. ~/inventory ファイルを編集し、ホストエントリーにホスト固有の設定を追加します。

    managed-node-01.example.com interface=enp1s0 ip_v4=192.0.2.1/24 ip_v6=2001:db8:1::1/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe
    
    managed-node-02.example.com interface=enp1s0 ip_v4=192.0.2.2/24 ip_v6=2001:db8:1::2/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com,managed-node-02.example.com
      tasks:
        - name: Ethernet connection profile with static IP address settings
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              - name: "{{ interface }}"
                interface_name: "{{ interface }}"
                type: ethernet
                autoconnect: yes
                ip:
                  address:
                    - "{{ ip_v4 }}"
                    - "{{ ip_v6 }}"
                  gateway4: "{{ gateway_v4 }}"
                  gateway6: "{{ gateway_v6 }}"
                  dns:
                    - 192.0.2.200
                    - 2001:db8:1::ffbb
                  dns_search:
                    - example.com
                state: up

    この Playbook は、インベントリーファイルから各ホストの特定の値を動的に読み取り、すべてのホストで同じ設定に対して Playbook 内の静的な値を使用します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 管理対象ノードの Ansible fact をクエリーし、アクティブなネットワーク設定を確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.setup
    ...
            "ansible_default_ipv4": {
                "address": "192.0.2.1",
                "alias": "enp1s0",
                "broadcast": "192.0.2.255",
                "gateway": "192.0.2.254",
                "interface": "enp1s0",
                "macaddress": "52:54:00:17:b8:b6",
                "mtu": 1500,
                "netmask": "255.255.255.0",
                "network": "192.0.2.0",
                "prefix": "24",
                "type": "ether"
            },
            "ansible_default_ipv6": {
                "address": "2001:db8:1::1",
                "gateway": "2001:db8:1::fffe",
                "interface": "enp1s0",
                "macaddress": "52:54:00:17:b8:b6",
                "mtu": 1500,
                "prefix": "64",
                "scope": "global",
                "type": "ether"
            },
            ...
            "ansible_dns": {
                "nameservers": [
                    "192.0.2.1",
                    "2001:db8:1::ffbb"
                ],
                "search": [
                    "example.com"
                ]
            },
    ...

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.2. network RHEL システムロールとデバイスパスを使用した静的 IP アドレスでのイーサネット接続の設定

Red Hat Enterprise Linux ホストをイーサネットネットワークに接続するには、ネットワークデバイスの NetworkManager 接続プロファイルを作成します。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

network RHEL システムロールを使用すると、静的 IP アドレス、ゲートウェイ、および DNS 設定を使用してイーサネット接続を設定し、それらを名前ではなくパスに基づいてデバイスに割り当てることができます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • サーバーの設定に物理または仮想イーサネットデバイスが存在する。
  • 管理対象ノードが NetworkManager を使用してネットワークを設定している。
  • デバイスのパスがわかっている。udevadm info /sys/class/net/<device_name> | grep ID_PATH= コマンドを使用すると、デバイスパスを表示できます。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: Ethernet connection profile with static IP address settings
          ansible.builtin.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

    サンプル Playbook で指定されている設定は次のとおりです。

    match
    設定を適用するために満たす必要がある条件を定義します。この変数は path オプションでのみ使用できます。
    path
    デバイスの永続パスを定義します。固定パスまたは式の形式で設定できます。値には修飾子とワイルドカードを含めることができます。この例では、PCI ID 0000:00:0[1-3].0 に一致するデバイスには設定を適用しますが、0000:00:02.0 に一致するデバイスには適用しません。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 管理対象ノードの Ansible fact をクエリーし、アクティブなネットワーク設定を確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.setup
    ...
            "ansible_default_ipv4": {
                "address": "192.0.2.1",
                "alias": "enp1s0",
                "broadcast": "192.0.2.255",
                "gateway": "192.0.2.254",
                "interface": "enp1s0",
                "macaddress": "52:54:00:17:b8:b6",
                "mtu": 1500,
                "netmask": "255.255.255.0",
                "network": "192.0.2.0",
                "prefix": "24",
                "type": "ether"
            },
            "ansible_default_ipv6": {
                "address": "2001:db8:1::1",
                "gateway": "2001:db8:1::fffe",
                "interface": "enp1s0",
                "macaddress": "52:54:00:17:b8:b6",
                "mtu": 1500,
                "prefix": "64",
                "scope": "global",
                "type": "ether"
            },
            ...
            "ansible_dns": {
                "nameservers": [
                    "192.0.2.1",
                    "2001:db8:1::ffbb"
                ],
                "search": [
                    "example.com"
                ]
            },
    ...

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.3. network RHEL システムロールとインターフェイス名を使用した動的 IP アドレスでのイーサネット接続の設定

Red Hat Enterprise Linux ホストをイーサネットネットワークに接続するには、ネットワークデバイスの NetworkManager 接続プロファイルを作成します。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

network RHEL システムロールを使用すると、DHCP サーバーおよび IPv6 ステートレスアドレス自動設定 (SLAAC) から IP アドレス、ゲートウェイ、および DNS 設定を取得するイーサネット接続を設定できます。このロールを使用すると、指定のインターフェイス名に接続プロファイルを割り当てることができます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • サーバーの設定に物理または仮想イーサネットデバイスが存在する。
  • ネットワーク内で DHCP サーバーと SLAAC が利用できる。
  • 管理対象ノードが NetworkManager サービスを使用してネットワークを設定している。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: Ethernet connection profile with dynamic IP address settings
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              - name: enp1s0
                interface_name: enp1s0
                type: ethernet
                autoconnect: yes
                ip:
                  dhcp4: yes
                  auto6: yes
                state: up

    サンプル Playbook で指定されている設定は次のとおりです。

    dhcp4: yes
    DHCP、PPP、または同様のサービスからの自動 IPv4 アドレス割り当てを有効にします。
    auto6: yes
    IPv6 自動設定を有効にします。デフォルトでは、NetworkManager はルーター広告を使用します。ルーターが managed フラグを通知すると、NetworkManager は DHCPv6 サーバーに IPv6 アドレスと接頭辞を要求します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 管理対象ノードの Ansible fact をクエリーし、インターフェイスが IP アドレスと DNS 設定を受信したことを確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.setup
    ...
            "ansible_default_ipv4": {
                "address": "192.0.2.1",
                "alias": "enp1s0",
                "broadcast": "192.0.2.255",
                "gateway": "192.0.2.254",
                "interface": "enp1s0",
                "macaddress": "52:54:00:17:b8:b6",
                "mtu": 1500,
                "netmask": "255.255.255.0",
                "network": "192.0.2.0",
                "prefix": "24",
                "type": "ether"
            },
            "ansible_default_ipv6": {
                "address": "2001:db8:1::1",
                "gateway": "2001:db8:1::fffe",
                "interface": "enp1s0",
                "macaddress": "52:54:00:17:b8:b6",
                "mtu": 1500,
                "prefix": "64",
                "scope": "global",
                "type": "ether"
            },
            ...
            "ansible_dns": {
                "nameservers": [
                    "192.0.2.1",
                    "2001:db8:1::ffbb"
                ],
                "search": [
                    "example.com"
                ]
            },
    ...

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.4. network RHEL システムロールとデバイスパスを使用した動的 IP アドレスでのイーサネット接続の設定

Red Hat Enterprise Linux ホストをイーサネットネットワークに接続するには、ネットワークデバイスの NetworkManager 接続プロファイルを作成します。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

network RHEL システムロールを使用すると、DHCP サーバーおよび IPv6 ステートレスアドレス自動設定 (SLAAC) から IP アドレス、ゲートウェイ、および DNS 設定を取得するイーサネット接続を設定できます。このロールにより、インターフェイス名ではなくパスに基づいてデバイスに接続プロファイルを割り当てることができます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • サーバーの設定に物理または仮想イーサネットデバイスが存在する。
  • ネットワーク内で DHCP サーバーと SLAAC が利用できる。
  • 管理対象ホストは、NetworkManager を使用してネットワークを設定します。
  • デバイスのパスがわかっている。udevadm info /sys/class/net/<device_name> | grep ID_PATH= コマンドを使用すると、デバイスパスを表示できます。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: Ethernet connection profile with dynamic IP address settings
          ansible.builtin.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

    サンプル Playbook で指定されている設定は次のとおりです。

    match: path
    設定を適用するために満たす必要がある条件を定義します。この変数は path オプションでのみ使用できます。
    path: <path_and_expressions>
    デバイスの永続パスを定義します。固定パスまたは式の形式で設定できます。値には修飾子とワイルドカードを含めることができます。この例では、PCI ID 0000:00:0[1-3].0 に一致するデバイスには設定を適用しますが、0000:00:02.0 に一致するデバイスには適用しません。
    dhcp4: yes
    DHCP、PPP、または同様のサービスからの自動 IPv4 アドレス割り当てを有効にします。
    auto6: yes
    IPv6 自動設定を有効にします。デフォルトでは、NetworkManager はルーター広告を使用します。ルーターが managed フラグを通知すると、NetworkManager は DHCPv6 サーバーに IPv6 アドレスと接頭辞を要求します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 管理対象ノードの Ansible fact をクエリーし、インターフェイスが IP アドレスと DNS 設定を受信したことを確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.setup
    ...
            "ansible_default_ipv4": {
                "address": "192.0.2.1",
                "alias": "enp1s0",
                "broadcast": "192.0.2.255",
                "gateway": "192.0.2.254",
                "interface": "enp1s0",
                "macaddress": "52:54:00:17:b8:b6",
                "mtu": 1500,
                "netmask": "255.255.255.0",
                "network": "192.0.2.0",
                "prefix": "24",
                "type": "ether"
            },
            "ansible_default_ipv6": {
                "address": "2001:db8:1::1",
                "gateway": "2001:db8:1::fffe",
                "interface": "enp1s0",
                "macaddress": "52:54:00:17:b8:b6",
                "mtu": 1500,
                "prefix": "64",
                "scope": "global",
                "type": "ether"
            },
            ...
            "ansible_dns": {
                "nameservers": [
                    "192.0.2.1",
                    "2001:db8:1::ffbb"
                ],
                "search": [
                    "example.com"
                ]
            },
    ...

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.5. network RHEL システムロールを使用した VLAN タグ付けの設定

ネットワークで仮想ローカルエリアネットワーク (VLAN) を使用してネットワークトラフィックを論理ネットワークに分離する場合は、NetworkManager 接続プロファイルを作成して VLAN タグ付けを設定します。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

network RHEL システムロールを使用して VLAN タグ付けを設定できます。VLAN の親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。

注記

VLAN デバイスに IP アドレス、デフォルトゲートウェイ、および DNS 設定が必要な場合は、親デバイスではなく VLAN デバイスで設定してください。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: VLAN connection profile with Ethernet port
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              # Ethernet profile
              - name: enp1s0
                type: ethernet
                interface_name: enp1s0
                autoconnect: yes
                state: up
                ip:
                  dhcp4: no
                  auto6: no
    
              # VLAN profile
              - name: enp1s0.10
                type: vlan
                vlan:
                  id: 10
                ip:
                  dhcp4: yes
                  auto6: yes
                parent: enp1s0
                state: up

    サンプル Playbook で指定されている設定は次のとおりです。

    type: <profile_type>
    作成するプロファイルのタイプを設定します。このサンプル Playbook では、2 つの接続プロファイルを作成します。1 つは親イーサネットデバイス用、もう 1 つは VLAN デバイス用です。
    dhcp4: <value>
    yes に設定すると、DHCP、PPP、または同様のサービスからの自動 IPv4 アドレス割り当てが有効になります。親デバイスの IP アドレス設定を無効にします。
    auto6: <value>
    yes に設定すると、IPv6 自動設定が有効になります。この場合、デフォルトで NetworkManager がルーター広告を使用します。ルーターが managed フラグを通知すると、NetworkManager は DHCPv6 サーバーから IPv6 アドレスと接頭辞を要求します。親デバイスの IP アドレス設定を無効にします。
    parent: <parent_device>
    VLAN 接続プロファイルの親デバイスを設定します。この例では、親はイーサネットインターフェイスです。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • VLAN 設定を確認します。

    # ansible managed-node-01.example.com -m command -a 'ip -d addr show enp1s0.10'
    managed-node-01.example.com | CHANGED | rc=0 >>
    4: vlan10@enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 52:54:00:72:2f:6e brd ff:ff:ff:ff:ff:ff promiscuity 0
        vlan protocol 802.1Q id 10 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
        ...

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.6. network RHEL システムロールを使用したネットワークブリッジの設定

ネットワークブリッジを作成することにより、Open Systems Interconnection (OSI) モデルのレイヤー 2 で複数のネットワークを接続できます。ブリッジを設定するには、NetworkManager で接続プロファイルを作成します。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

network RHEL システムロールを使用してブリッジを設定できます。ブリッジの親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。

注記

IP アドレス、ゲートウェイ、DNS 設定をブリッジに割り当てる場合は、ポートではなくブリッジで設定してください。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: Bridge connection profile with two Ethernet ports
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              # Bridge profile
              - name: bridge0
                type: bridge
                interface_name: bridge0
                ip:
                  dhcp4: yes
                  auto6: yes
                state: up
    
              # Port profile for the 1st Ethernet device
              - name: bridge0-port1
                interface_name: enp7s0
                type: ethernet
                controller: bridge0
                port_type: bridge
                state: up
    
              # Port profile for the 2nd Ethernet device
              - name: bridge0-port2
                interface_name: enp8s0
                type: ethernet
                controller: bridge0
                port_type: bridge
                state: up

    サンプル Playbook で指定されている設定は次のとおりです。

    type: <profile_type>
    作成するプロファイルのタイプを設定します。このサンプル Playbook では、3 つの接続プロファイルを作成します。1 つはブリッジ用、2 つはイーサネットデバイス用です。
    dhcp4: yes
    DHCP、PPP、または同様のサービスからの自動 IPv4 アドレス割り当てを有効にします。
    auto6: yes
    IPv6 自動設定を有効にします。デフォルトでは、NetworkManager はルーター広告を使用します。ルーターが managed フラグを通知すると、NetworkManager は DHCPv6 サーバーに IPv6 アドレスと接頭辞を要求します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  1. 特定のブリッジのポートであるイーサネットデバイスのリンクステータスを表示します。

    # ansible managed-node-01.example.com -m command -a 'ip link show master bridge0'
    managed-node-01.example.com | CHANGED | rc=0 >>
    3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000
        link/ether 52:54:00:62:61:0e brd ff:ff:ff:ff:ff:ff
    4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000
        link/ether 52:54:00:9e:f1:ce brd ff:ff:ff:ff:ff:ff
  2. ブリッジデバイスのポートであるイーサネットデバイスのステータスを表示します。

    # ansible managed-node-01.example.com -m command -a 'bridge link show'
    managed-node-01.example.com | CHANGED | rc=0 >>
    3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100
    4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state listening priority 32 cost 100

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.7. network RHEL システムロールを使用したネットワークボンディングの設定

ネットワークインターフェイスをボンディングで組み合わせると、より高いスループットまたは冗長性を備えた論理インターフェイスを提供できます。ボンディングを設定するには、NetworkManager 接続プロファイルを作成します。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

network RHEL システムロールを使用してネットワークボンディングを設定できます。ボンディングの親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: Bond connection profile with two Ethernet ports
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              # Bond profile
              - name: bond0
                type: bond
                interface_name: bond0
                ip:
                  dhcp4: yes
                  auto6: yes
                bond:
                  mode: active-backup
                state: up
    
              # Port profile for the 1st Ethernet device
              - name: bond0-port1
                interface_name: enp7s0
                type: ethernet
                controller: bond0
                state: up
    
              # Port profile for the 2nd Ethernet device
              - name: bond0-port2
                interface_name: enp8s0
                type: ethernet
                controller: bond0
                state: up

    サンプル Playbook で指定されている設定は次のとおりです。

    type: <profile_type>
    作成するプロファイルのタイプを設定します。このサンプル Playbook では、3 つの接続プロファイルを作成します。1 つはボンディング用、2 つはイーサネットデバイス用です。
    dhcp4: yes
    DHCP、PPP、または同様のサービスからの自動 IPv4 アドレス割り当てを有効にします。
    auto6: yes
    IPv6 自動設定を有効にします。デフォルトでは、NetworkManager はルーター広告を使用します。ルーターが managed フラグを通知すると、NetworkManager は DHCPv6 サーバーに IPv6 アドレスと接頭辞を要求します。
    mode: <bond_mode>

    ボンディングモードを設定します。可能な値は次のとおりです。

    • balance-rr (デフォルト)
    • active-backup
    • balance-xor
    • broadcast
    • 802.3ad
    • balance-tlb
    • balance-alb

    設定したモードに応じて、Playbook で追加の変数を設定する必要があります。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • ネットワークデバイスの 1 つからネットワークケーブルを一時的に取り外し、ボンディング内の他のデバイスがトラフィックを処理しているかどうかを確認します。

    ソフトウェアユーティリティーを使用して、リンク障害イベントを適切にテストする方法がないことに注意してください。nmcli などの接続を非アクティブにするツールでは、ポート設定の変更を処理するボンディングドライバーの機能のみが表示され、実際のリンク障害イベントは表示されません。

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.8. network RHEL システムロールを使用した IPoIB 接続の設定

IP over InfiniBand (IPoIB) を使用すると、InfiniBand インターフェイス経由で IP パケットを送信できます。IPoIB を設定するには、NetworkManager 接続プロファイルを作成します。Ansible と network システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

network RHEL システムロールを使用して IPoIB を設定できます。InfiniBand の親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • mlx4_ib0 という名前の InfiniBand デバイスが管理対象ノードにインストールされている。
  • 管理対象ノードが NetworkManager を使用してネットワークを設定している。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: IPoIB connection profile with static IP address settings
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              # InfiniBand connection mlx4_ib0
              - name: mlx4_ib0
                interface_name: mlx4_ib0
                type: infiniband
    
              # IPoIB device mlx4_ib0.8002 on top of mlx4_ib0
              - name: mlx4_ib0.8002
                type: infiniband
                autoconnect: yes
                infiniband:
                  p_key: 0x8002
                  transport_mode: datagram
                parent: mlx4_ib0
                ip:
                  address:
                    - 192.0.2.1/24
                    - 2001:db8:1::1/64
                state: up

    サンプル Playbook で指定されている設定は次のとおりです。

    type: <profile_type>
    作成するプロファイルのタイプを設定します。このサンプル Playbook では、2 つの接続プロファイルを作成します。1 つは InfiniBand 接続用、もう 1 つは IPoIB デバイス用です。
    parent: <parent_device>
    IPoIB 接続プロファイルの親デバイスを設定します。
    p_key: <value>
    InfiniBand パーティションキーを設定します。この変数を設定する場合は、IPoIB デバイスに interface_name を設定しないでください。
    transport_mode: <mode>
    IPoIB 接続の動作モードを設定します。この変数は、datagram (デフォルト) または connected に設定できます。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  1. mlx4_ib0.8002 デバイスの IP 設定を表示します。

    # ansible managed-node-01.example.com -m command -a 'ip address show mlx4_ib0.8002'
    managed-node-01.example.com | CHANGED | rc=0 >>
    ...
    inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute ib0.8002
       valid_lft forever preferred_lft forever
    inet6 2001:db8:1::1/64 scope link tentative noprefixroute
       valid_lft forever preferred_lft forever
  2. mlx4_ib0.8002 デバイスのパーティションキー (P_Key) を表示します。

    # ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx4_ib0.8002/pkey'
    managed-node-01.example.com | CHANGED | rc=0 >>
    0x8002
  3. mlx4_ib0.8002 デバイスのモードを表示します。

    # ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx4_ib0.8002/mode'
    managed-node-01.example.com | CHANGED | rc=0 >>
    datagram

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.9. network RHEL システムロールを使用して、特定のサブネットから別のデフォルトゲートウェイにトラフィックをルーティングする

ポリシーベースのルーティングを使用して、特定のサブネットからのトラフィックに対して別のデフォルトゲートウェイを設定できます。たとえば、RHEL をルーターとして設定し、デフォルトルートを使用してすべてのトラフィックをインターネットプロバイダー A にデフォルトでルーティングできます。一方、内部ワークステーションのサブネットから受信したトラフィックは、プロバイダー B にルーティングできます。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

network RHEL システムロールを使用して、ルーティングテーブルやルールを含む接続プロファイルを設定できます。

この手順では、次のネットワークトポロジーを想定しています。

policy based routing

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • 管理対象ノードは、NetworkManager および firewalld サービスを使用します。
  • 設定する管理対象ノードには、次の 4 つのネットワークインターフェイスがあります。

    • enp7s0 インターフェイスはプロバイダー A のネットワークに接続されます。プロバイダーのネットワークのゲートウェイ IP は 198.51.100.2 で、ネットワークは /30 ネットワークマスクを使用します。
    • enp1s0 インターフェイスはプロバイダー B のネットワークに接続されます。プロバイダーのネットワークのゲートウェイ IP は 192.0.2.2 で、ネットワークは /30 ネットワークマスクを使用します。
    • enp8s0 インターフェイスは、内部ワークステーションで 10.0.0.0/24 サブネットに接続されています。
    • enp9s0 インターフェイスは、会社のサーバーで 203.0.113.0/24 サブネットに接続されています。
  • 内部ワークステーションのサブネット内のホストは、デフォルトゲートウェイとして 10.0.0.1 を使用します。この手順では、この IP アドレスをルーターの enp8s0 ネットワークインターフェイスに割り当てます。
  • サーバーサブネット内のホストは、デフォルトゲートウェイとして 203.0.113.1 を使用します。この手順では、この IP アドレスをルーターの enp9s0 ネットワークインターフェイスに割り当てます。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configuring policy-based routing
      hosts: managed-node-01.example.com
      tasks:
        - name: Routing traffic from a specific subnet to a different default gateway
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              - name: Provider-A
                interface_name: enp7s0
                type: ethernet
                autoconnect: True
                ip:
                  address:
                    - 198.51.100.1/30
                  gateway4: 198.51.100.2
                  dns:
                    - 198.51.100.200
                state: up
                zone: external
    
              - name: Provider-B
                interface_name: enp1s0
                type: ethernet
                autoconnect: True
                ip:
                  address:
                    - 192.0.2.1/30
                  route:
                    - network: 0.0.0.0
                      prefix: 0
                      gateway: 192.0.2.2
                      table: 5000
                state: up
                zone: external
    
              - name: Internal-Workstations
                interface_name: enp8s0
                type: ethernet
                autoconnect: True
                ip:
                  address:
                    - 10.0.0.1/24
                  route:
                    - network: 10.0.0.0
                      prefix: 24
                      table: 5000
                  routing_rule:
                    - priority: 5
                      from: 10.0.0.0/24
                      table: 5000
                state: up
                zone: trusted
    
              - name: Servers
                interface_name: enp9s0
                type: ethernet
                autoconnect: True
                ip:
                  address:
                    - 203.0.113.1/24
                state: up
                zone: trusted

    サンプル Playbook で指定されている設定は次のとおりです。

    table: <value>
    table 変数と同じリストエントリーのルートを、指定のルーティングテーブルに割り当てます。
    routing_rule: <list>
    指定のルーティングルールの優先度と、接続プロファイルからルールの割り当て先のルーティングテーブルを定義します。
    zone: <zone_name>
    接続プロファイルから指定の firewalld ゾーンにネットワークインターフェイスを割り当てます。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  1. 内部ワークステーションサブネットの RHEL ホストで、以下を行います。

    1. traceroute パッケージをインストールします。

      # yum install traceroute
    2. traceroute ユーティリティーを使用して、インターネット上のホストへのルートを表示します。

      # traceroute redhat.com
      traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets
       1  10.0.0.1 (10.0.0.1)     0.337 ms  0.260 ms  0.223 ms
       2  192.0.2.1 (192.0.2.1)   0.884 ms  1.066 ms  1.248 ms
       ...

      コマンドの出力には、ルーターがプロバイダー B のネットワークである 192.0.2.1 経由でパケットを送信することが表示されます。

  2. サーバーのサブネットの RHEL ホストで、以下を行います。

    1. traceroute パッケージをインストールします。

      # yum install traceroute
    2. traceroute ユーティリティーを使用して、インターネット上のホストへのルートを表示します。

      # traceroute redhat.com
      traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets
       1  203.0.113.1 (203.0.113.1)    2.179 ms  2.073 ms  1.944 ms
       2  198.51.100.2 (198.51.100.2)  1.868 ms  1.798 ms  1.549 ms
       ...

      コマンドの出力には、ルーターがプロバイダー A のネットワークである 198.51.100.2 経由でパケットを送信することが表示されます。

  3. RHEL システムロールを使用して設定した RHEL ルーターで、次の手順を実行します。

    1. ルールのリストを表示します。

      # ip rule list
      0:      from all lookup local
      5:    from 10.0.0.0/24 lookup 5000
      32766:  from all lookup main
      32767:  from all lookup default

      デフォルトでは、RHEL には、local テーブル、main テーブル、および default テーブルのルールが含まれます。

    2. テーブル 5000 のルートを表示します。

      # ip route list table 5000
      0.0.0.0/0 via 192.0.2.2 dev enp1s0 proto static metric 100
      10.0.0.0/24 dev enp8s0 proto static scope link src 192.0.2.1 metric 102
    3. インターフェイスとファイアウォールゾーンを表示します。

      # firewall-cmd --get-active-zones
      external
        interfaces: enp1s0 enp7s0
      trusted
        interfaces: enp8s0 enp9s0
    4. external ゾーンでマスカレードが有効になっていることを確認します。

      # firewall-cmd --info-zone=external
      external (active)
        target: default
        icmp-block-inversion: no
        interfaces: enp1s0 enp7s0
        sources:
        services: ssh
        ports:
        protocols:
        masquerade: yes
        ...

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.10. network RHEL システムロールを使用した 802.1X ネットワーク認証による静的イーサネット接続の設定

ネットワークアクセス制御 (NAC) は、不正なクライアントからネットワークを保護します。クライアントがネットワークにアクセスできるようにするために、認証に必要な詳細を NetworkManager 接続プロファイルで指定できます。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

Ansible Playbook を使用して秘密鍵、証明書、および CA 証明書をクライアントにコピーしてから、network RHEL システムロールを使用して 802.1X ネットワーク認証による接続プロファイルを設定できます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • ネットワークは 802.1X ネットワーク認証をサポートしている。
  • 管理対象ノードが NetworkManager を使用している。
  • TLS 認証に必要な次のファイルがコントロールノードに存在する。

    • クライアントキーが /srv/data/client.key ファイルに保存されている。
    • クライアント証明書が /srv/data/client.crt ファイルに保存されている。
    • 認証局 (CA) 証明書が /srv/data/ca.crt ファイルに保存されている。

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      pwd: <password>
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure an Ethernet connection with 802.1X authentication
      hosts: managed-node-01.example.com
      vars_files:
        - vault.yml
      tasks:
        - name: Copy client key for 802.1X authentication
          ansible.builtin.copy:
            src: "/srv/data/client.key"
            dest: "/etc/pki/tls/private/client.key"
            mode: 0600
    
        - name: Copy client certificate for 802.1X authentication
          ansible.builtin.copy:
            src: "/srv/data/client.crt"
            dest: "/etc/pki/tls/certs/client.crt"
    
        - name: Copy CA certificate for 802.1X authentication
          ansible.builtin.copy:
            src: "/srv/data/ca.crt"
            dest: "/etc/pki/ca-trust/source/anchors/ca.crt"
    
        - name: Ethernet connection profile with static IP address settings and 802.1X
          ansible.builtin.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: "{{ pwd }}"
                  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

    サンプル Playbook で指定されている設定は次のとおりです。

    ieee802_1x
    この変数には、802.1X 関連の設定を含めます。
    eap: tls
    Extensible Authentication Protocol (EAP) に証明書ベースの TLS 認証方式を使用するようにプロファイルを設定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

検証

  • ネットワーク認証が必要なネットワーク上のリソースにアクセスします。

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー
  • Ansible vault

20.11. network RHEL システムロールを使用して既存の接続にデフォルトゲートウェイを設定する

パケットの宛先に、直接接続されたネットワーク経由でも、ホストに設定されたルート経由でも到達できない場合、ホストはネットワークパケットをデフォルトゲートウェイに転送します。ホストのデフォルトゲートウェイを設定するには、デフォルトゲートウェイと同じネットワークに接続されているインターフェイスの NetworkManager 接続プロファイルで、そのゲートウェイを設定します。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

ほとんどの場合、管理者は接続を作成するときにデフォルトゲートウェイを設定します。ただし、以前に作成した接続でデフォルトゲートウェイ設定を設定または更新することもできます。

警告

network RHEL システムロールを使用して、既存接続プロファイル内の特定の値だけを更新することはできません。このロールは、接続プロファイルが Playbook の設定と正確に一致するようにします。同じ名前の接続プロファイルがすでに存在する場合、このロールは Playbook の設定を適用し、プロファイル内の他のすべての設定をデフォルトにリセットします。値がリセットされないようにするには、変更しない設定も含め、ネットワーク接続プロファイルの設定全体を Playbook に常に指定してください。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: Ethernet connection profile with static IP address settings
          ansible.builtin.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

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 管理対象ノードの Ansible fact をクエリーし、アクティブなネットワーク設定を確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.setup
    ...
            "ansible_default_ipv4": {
    	    ...
                "gateway": "198.51.100.254",
                "interface": "enp1s0",
    	    ...
            },
            "ansible_default_ipv6": {
    	    ...
                "gateway": "2001:db8:1::fffe",
                "interface": "enp1s0",
    	    ...
    	}
    ...

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.12. network RHEL システムロールを使用した静的ルートの設定

静的ルートを使用すると、デフォルトゲートウェイ経由では到達できない宛先にトラフィックを送信できるようになります。静的ルートは、ネクストホップと同じネットワークに接続されているインターフェイスの NetworkManager 接続プロファイルで設定します。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

警告

network RHEL システムロールを使用して、既存接続プロファイル内の特定の値だけを更新することはできません。このロールは、接続プロファイルが Playbook の設定と正確に一致するようにします。同じ名前の接続プロファイルがすでに存在する場合、このロールは Playbook の設定を適用し、プロファイル内の他のすべての設定をデフォルトにリセットします。値がリセットされないようにするには、変更しない設定も含め、ネットワーク接続プロファイルの設定全体を Playbook に常に指定してください。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: Ethernet connection profile with static IP address settings
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              - 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
                  route:
                    - network: 198.51.100.0
                      prefix: 24
                      gateway: 192.0.2.10
                    - network: 2001:db8:2::
                      prefix: 64
                      gateway: 2001:db8:1::10
                state: up

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  1. IPv4 ルートを表示します。

    # ansible managed-node-01.example.com -m command -a 'ip -4 route'
    managed-node-01.example.com | CHANGED | rc=0 >>
    ...
    198.51.100.0/24 via 192.0.2.10 dev enp7s0
  2. IPv6 ルートを表示します。

    # ansible managed-node-01.example.com -m command -a 'ip -6 route'
    managed-node-01.example.com | CHANGED | rc=0 >>
    ...
    2001:db8:2::/64 via 2001:db8:1::10 dev enp7s0 metric 1024 pref medium

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.13. network RHEL システムロールを使用した ethtool オフロード機能の設定

ネットワークインターフェイスコントローラーは、TCP オフロードエンジン (TOE) を使用して、特定の操作の処理をネットワークコントローラーにオフロードできます。これにより、ネットワークのスループットが向上します。オフロード機能は、ネットワークインターフェイスの接続プロファイルで設定します。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

警告

network RHEL システムロールを使用して、既存接続プロファイル内の特定の値だけを更新することはできません。このロールは、接続プロファイルが Playbook の設定と正確に一致するようにします。同じ名前の接続プロファイルがすでに存在する場合、このロールは Playbook の設定を適用し、プロファイル内の他のすべての設定をデフォルトにリセットします。値がリセットされないようにするには、変更しない設定も含め、ネットワーク接続プロファイルの設定全体を Playbook に常に指定してください。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: Ethernet connection profile with dynamic IP address settings and offload features
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              - name: enp1s0
                type: ethernet
                autoconnect: yes
                ip:
                  dhcp4: yes
                  auto6: yes
                ethtool:
                  features:
                    gro: no
                    gso: yes
                    tx_sctp_segmentation: no
                state: up

    サンプル Playbook で指定されている設定は次のとおりです。

    gro: no
    Generic Receive Offload (GRO) を無効にします。
    gso: yes
    Generic Segmentation Offload (GSO) を有効にします。
    tx_sctp_segmentation: no
    TX Stream Control Transmission Protocol (SCTP) セグメンテーションを無効にします。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 管理対象ノードの Ansible fact をクエリーし、オフロード設定を確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.setup
    ...
            "ansible_enp1s0": {
                "active": true,
                "device": "enp1s0",
    	    "features": {
    	        ...
    		"rx_gro_hw": "off,
    	        ...
    		"tx_gso_list": "on,
    	        ...
    		"tx_sctp_segmentation": "off",
    		...
                }
    ...

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.14. network RHEL システムロールを使用した ethtool 結合の設定

割り込み結合を使用すると、システムはネットワークパケットを収集し、複数のパケットに対して割り込みを 1 つ生成します。これにより、1 つのハードウェア割り込みでカーネルに送信されたデータ量が増大し、割り込み負荷が減り、スループットを最大化します。結合設定は、ネットワークインターフェイスの接続プロファイルで設定します。Ansible と network RHEL ロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

警告

network RHEL システムロールを使用して、既存接続プロファイル内の特定の値だけを更新することはできません。このロールは、接続プロファイルが Playbook の設定と正確に一致するようにします。同じ名前の接続プロファイルがすでに存在する場合、このロールは Playbook の設定を適用し、プロファイル内の他のすべての設定をデフォルトにリセットします。値がリセットされないようにするには、変更しない設定も含め、ネットワーク接続プロファイルの設定全体を Playbook に常に指定してください。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: Ethernet connection profile with dynamic IP address settings and coalesce settings
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              - name: enp1s0
                type: ethernet
                autoconnect: yes
                ip:
                  dhcp4: yes
                  auto6: yes
                ethtool:
                  coalesce:
                    rx_frames: 128
                    tx_frames: 128
                state: up

    サンプル Playbook で指定されている設定は次のとおりです。

    rx_frames: <value>
    RX フレームの数を設定します。
    gso: <value>
    TX フレームの数を設定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • ネットワークデバイスの現在のオフロード機能を表示します。

    # ansible managed-node-01.example.com -m command -a 'ethtool -c enp1s0'
    managed-node-01.example.com | CHANGED | rc=0 >>
    ...
    rx-frames:	128
    ...
    tx-frames:	128
    ...

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.15. network RHEL システムロールを使用して、高いパケットドロップ率を減らすためにリングバッファーサイズを増やす

パケットドロップ率が原因でアプリケーションがデータの損失、タイムアウト、またはその他の問題を報告する場合は、イーサネットデバイスのリングバッファーのサイズを増やします。

リングバッファーは循環バッファーであり、オーバーフローによって既存のデータが上書きされます。ネットワークカードは、送信 (TX) および受信 (RX) リングバッファーを割り当てます。受信リングバッファーは、デバイスドライバーとネットワークインターフェイスコントローラー (NIC) の間で共有されます。データは、ハードウェア割り込みまたは SoftIRQ とも呼ばれるソフトウェア割り込みによって NIC からカーネルに移動できます。

カーネルは RX リングバッファーを使用して、デバイスドライバーが着信パケットを処理できるようになるまで着信パケットを格納します。デバイスドライバーは、通常は SoftIRQ を使用して RX リングをドレインします。これにより、着信パケットは sk_buff または skb と呼ばれるカーネルデータ構造に配置され、カーネルを経由して関連するソケットを所有するアプリケーションまでの移動を開始します。

カーネルは TX リングバッファーを使用して、ネットワークに送信する必要がある発信パケットを保持します。これらのリングバッファーはスタックの一番下にあり、パケットドロップが発生する重要なポイントであり、ネットワークパフォーマンスに悪影響を及ぼします。

リングバッファー設定は、NetworkManager 接続プロファイルで設定します。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

警告

network RHEL システムロールを使用して、既存接続プロファイル内の特定の値だけを更新することはできません。このロールは、接続プロファイルが Playbook の設定と正確に一致するようにします。同じ名前の接続プロファイルがすでに存在する場合、このロールは Playbook の設定を適用し、プロファイル内の他のすべての設定をデフォルトにリセットします。値がリセットされないようにするには、変更しない設定も含め、ネットワーク接続プロファイルの設定全体を Playbook に常に指定してください。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • デバイスがサポートする最大リングバッファーサイズを把握している。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: Ethernet connection profile with dynamic IP address setting and increased ring buffer sizes
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              - name: enp1s0
                type: ethernet
                autoconnect: yes
                ip:
                  dhcp4: yes
                  auto6: yes
                ethtool:
                  ring:
                    rx: 4096
                    tx: 4096
                state: up

    サンプル Playbook で指定されている設定は次のとおりです。

    rx: <value>
    受信するリングバッファーエントリーの最大数を設定します。
    tx: <value>
    送信するリングバッファーエントリーの最大数を設定します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • 最大リングバッファーサイズを表示します。

    # ansible managed-node-01.example.com -m command -a 'ethtool -g enp1s0'
    managed-node-01.example.com | CHANGED | rc=0 >>
    ...
    Current hardware settings:
    RX:             4096
    RX Mini:        0
    RX Jumbo:       0
    TX:             4096

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

20.16. network RHEL システムロールのネットワーク状態

network RHEL システムロールは、Playbook でデバイスを設定するための状態設定をサポートしています。これには、network_state 変数の後に状態設定を使用します。

Playbook で network_state 変数を使用する利点:

  • 状態設定で宣言型の方法を使用すると、インターフェイスを設定でき、NetworkManager はこれらのインターフェイスのプロファイルをバックグラウンドで作成します。
  • network_state 変数を使用すると、変更が必要なオプションを指定できます。他のすべてのオプションはそのまま残ります。ただし、network_connections 変数を使用して、ネットワーク接続プロファイルを変更するには、すべての設定を指定する必要があります。
重要

network_state では Nmstate YAML 命令のみを設定できます。この命令は、network_connections で設定できる変数とは異なります。

たとえば、動的 IP アドレス設定でイーサネット接続を作成するには、Playbook で次の vars ブロックを使用します。

状態設定を含む Playbook

通常の Playbook

vars:
  network_state:
    interfaces:
    - name: enp7s0
      type: ethernet
      state: up
      ipv4:
        enabled: true
        auto-dns: true
        auto-gateway: true
        auto-routes: true
        dhcp: true
      ipv6:
        enabled: true
        auto-dns: true
        auto-gateway: true
        auto-routes: true
        autoconf: true
        dhcp: true
vars:
  network_connections:
    - name: enp7s0
      interface_name: enp7s0
      type: ethernet
      autoconnect: yes
      ip:
        dhcp4: yes
        auto6: yes
      state: up

たとえば、上記のように作成した動的 IP アドレス設定の接続ステータスのみを変更するには、Playbook で次の vars ブロックを使用します。

状態設定を含む Playbook

通常の Playbook

vars:
  network_state:
    interfaces:
    - name: enp7s0
      type: ethernet
      state: down
vars:
  network_connections:
    - name: enp7s0
      interface_name: enp7s0
      type: ethernet
      autoconnect: yes
      ip:
        dhcp4: yes
        auto6: yes
      state: down

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー

第21章 RHEL システムロールを使用したコンテナーの管理

podman RHEL システムロールを使用すると、Podman 設定、コンテナー、および Podman コンテナーを実行する systemd サービスを管理できます。

21.1. podman RHEL システムロールを使用したバインドマウントによるルートレスコンテナーの作成

podman RHEL システムロールを使用すると、Ansible Playbook を実行してバインドマウントによりルートレスコンテナーを作成し、アプリケーション設定を管理できます。

サンプルの Ansible Playbook は、データベース用と Web アプリケーション用の 2 つの Kubernetes Pod を起動します。データベース Pod の設定は Playbook で指定します。Web アプリケーション Pod は外部 YAML ファイルで定義します。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • ユーザーとグループ webapp が存在し、ホスト上の /etc/subuid および /etc/subgid ファイルにリストされている。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    - name: Configure Podman
      hosts: managed-node-01.example.com
      tasks:
        - name: Create a web application and a database
          ansible.builtin.include_role:
            name: rhel-system-roles.podman
          vars:
            podman_create_host_directories: true
            podman_firewall:
              - port: 8080-8081/tcp
                state: enabled
              - port: 12340/tcp
                state: enabled
            podman_selinux_ports:
              - ports: 8080-8081
                setype: http_port_t
            podman_kube_specs:
              - state: started
                run_as_user: dbuser
                run_as_group: dbgroup
                kube_file_content:
                  apiVersion: v1
                  kind: Pod
                  metadata:
                    name: db
                  spec:
                    containers:
                      - name: db
                        image:  quay.io/linux-system-roles/mysql:5.6
                        ports:
                          - containerPort: 1234
                            hostPort: 12340
                        volumeMounts:
                          - mountPath: /var/lib/db:Z
                            name: db
                    volumes:
                      - name: db
                        hostPath:
                          path: /var/lib/db
              - state: started
                run_as_user: webapp
                run_as_group: webapp
                kube_file_src: /path/to/webapp.yml

    サンプル Playbook で指定されている設定は次のとおりです。

    run_as_userrun_as_group
    コンテナーがルートレスであることを指定します。
    kube_file_content

    db という名前の 1 つ目コンテナーを定義する Kubernetes YAML ファイルが含まれています。Kubernetes YAML ファイルは、podman kube generate コマンドを使用して生成できます。

    • db コンテナーは、quay.io/db/db:stable コンテナーイメージに基づいています。
    • db バインドマウントは、ホスト上の /var/lib/db ディレクトリーをコンテナー内の /var/lib/db ディレクトリーにマップします。Z フラグはコンテンツにプライベート非共有ラベルを付けるため、db コンテナーのみがコンテンツにアクセスできます。
    kube_file_src: <path>
    2 つ目のコンテナーを定義します。コントローラーノードの /path/to/webapp.yml ファイルの内容は、マネージドノードの kube_file フィールドにコピーされます。
    volumes: <list>
    1 つ以上のコンテナーで提供するデータのソースを定義する YAML リスト。たとえば、ホスト上のローカルディスク (hostPath) またはその他のディスクデバイスなどです。
    volumeMounts: <list>
    個々のコンテナーが特定のボリュームをマウントするマウント先を定義する YAML リスト。
    podman_create_host_directories: true
    ホスト上にディレクトリーを作成します。これにより、hostPath ボリュームの kube 仕様を確認し、ホスト上にそれらのディレクトリーを作成するようにロールに指示します。所有権と権限をさらに細かく制御する必要がある場合は、podman_host_directories を使用します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.podman/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.podman/README.md ファイル
  • /usr/share/doc/rhel-system-roles/podman/ ディレクトリー

21.2. podman RHEL システムロールを使用した Podman ボリュームを持つルートフルコンテナーの作成

podman RHEL システムロールを使用すると、Ansible Playbook を実行して Podman ボリュームを持つルートフルコンテナーを作成し、アプリケーション設定を管理できます。

サンプルの Ansible Playbook は、ubi8-httpd という名前の Kubernetes Pod をデプロイします。この Pod は、registry.access.redhat.com/ubi8/httpd-24 イメージから HTTP サーバーコンテナーを実行します。コンテナーの Web コンテンツは、ubi8-html-volume という名前の永続ボリュームからマウントされます。デフォルトでは、podman ロールはルートフルコンテナーを作成します。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    - name: Configure Podman
      hosts: managed-node-01.example.com
      tasks:
        - name: Start Apache server on port 8080
          ansible.builtin.include_role:
            name: rhel-system-roles.podman
      vars:
        podman_firewall:
          - port: 8080/tcp
            state: enabled
        podman_kube_specs:
          - state: started
            kube_file_content:
              apiVersion: v1
              kind: Pod
              metadata:
                name: ubi8-httpd
              spec:
                containers:
                  - name: ubi8-httpd
                    image: registry.access.redhat.com/ubi8/httpd-24
                    ports:
                      - containerPort: 8080
                        hostPort: 8080
                    volumeMounts:
                      - mountPath: /var/www/html:Z
                        name: ubi8-html
                volumes:
                  - name: ubi8-html
                    persistentVolumeClaim:
                      claimName: ubi8-html-volume

    サンプル Playbook で指定されている設定は次のとおりです。

    kube_file_content