RHEL システムロールを使用したシステム管理の自動化
Red Hat Ansible Automation Platform Playbook を使用して複数のホストに RHEL をデプロイするための一貫性および反復性のある設定
概要
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある 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
パッケージが次のロールを提供します。
ロール名 | ロールの説明 | 章のタイトル |
---|---|---|
| 証明書の発行および更新 | RHEL システムロールを使用した証明書の要求 |
| Web コンソール | Cockpit RHEL システムロールを使用した Web コンソールのインストールと設定 |
| システム全体の暗号化ポリシー | システム間でのカスタム暗号化ポリシーの設定 |
| Firewalld | システムロールを使用した firewalld の設定 |
| HA クラスター | システムロールを使用した高可用性クラスターの設定 |
| カーネルダンプ | RHEL システムロールを使用した kdump の設定 |
| カーネル設定 | Ansible ロールを使用したカーネルパラメーターの永続的な設定 |
| ロギング | ロギングシステムロールの使用 |
| メトリック (PCP) | RHEL システムロールを使用したパフォーマンスの監視 |
| Microsoft SQL Server | Ansible ロール microsoft.sql.server を使用した Microsoft SQL Server の設定 |
| ネットワーキング | network RHEL システムロールを使用した InfiniBand 接続の管理 |
| ネットワークバインドディスク暗号化クライアント | nbde_client および nbde_server システムロールの使用 |
| ネットワークバインドディスク暗号化サーバー | nbde_client および nbde_server システムロールの使用 |
| postfix | システムロールの postfix ロールの変数 |
| PostgreSQL | postgresql RHEL システムロールを使用した PostgreSQL のインストールと設定 |
| SELinux | システムロールを使用した SELinux の設定 |
| SSH クライアント | ssh システムロールを使用したセキュアな通信の設定 |
| SSH サーバー | ssh システムロールを使用したセキュアな通信の設定 |
| ストレージ | RHEL システムロールを使用したローカルストレージの管理 |
| ターミナルセッションの記録 | tlog RHEL システムロールを使用したセッション記録用システムの設定 |
| 時刻同期 | RHEL システムロールを使用した時刻同期の設定 |
| VPN | vpn RHEL システムロールを使用した IPsec による VPN 接続の設定 |
関連情報
- Red Hat Enterprise Linux (RHEL) system roles
-
/usr/share/ansible/roles/rhel-system-roles.<role_name>/README.md
ファイル -
/usr/share/doc/rhel-system-roles/<role_name>/
ディレクトリー
第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
サブスクリプションがシステムにアタッチされている。
手順
Playbook を管理および実行するための
ansible
という名前のユーザーを作成します。[root@control-node]# useradd ansible
新しく作成した
ansible
ユーザーに切り替えます。[root@control-node]# su - ansible
このユーザーとして残りの手順を実行します。
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> ...
キーファイルの推奨されるデフォルトの場所を使用します。
- オプション: 接続を確立するたびに Ansible が SSH キーのパスワードを要求しないように、SSH エージェントを設定します。
~/.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 パスワードの入力を求められます。これは、セキュリティー上の理由から推奨されます。
管理対象ホストのホスト名をリストする
~/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 アドレスを指定します。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
ユーザーとして次の手順を実行します。-
~/.ansible.cfg
ファイルで コンテンツのプライマリーソースとして Red Hat Automation Hub を定義します。 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/
ディレクトリーにインストールします。
-
次のステップ
- 管理対象ノードを準備します。詳細は、管理対象ノードの準備 を参照してください。
関連情報
- RHEL 9 および RHEL 8.6 以降の AppStream リポジトリーに含まれる Ansible Core パッケージのサポート範囲
- How to register and subscribe a system to the Red Hat Customer Portal using subscription-manager (Red Hat ナレッジベース)
-
ssh-keygen(1)
man ページ - ssh-agent を使用して SSH キーでリモートマシンに接続する手順
- Ansible configuration settings
- How to build your inventory
- Updates to using Ansible in RHEL 8.6 and 9.0
2.2. 管理対象ノードの準備
管理対象ノードはインベントリーにリストされているシステムであり、Playbook に従ってコントロールノードによって設定されます。管理対象ホストに Ansible をインストールする必要はありません。
前提条件
- コントロールノードを準備している。詳細は、RHEL 8 でのコントロールノードの準備 を参照してください。
コントロールノードから SSH アクセスできる。
重要root
ユーザーとしての直接 SSH アクセスはセキュリティーリスクを引き起こします。このリスクを軽減するには、管理対象ノードを準備するときに、このノード上にローカルユーザーを作成し、sudo
ポリシーを設定します。続いて、コントロールノードの Ansible は、ローカルユーザーアカウントを使用して管理対象ノードにログインし、root
などの別のユーザーとして Playbook を実行できます。
手順
ansible
という名前のユーザーを作成します。[root@managed-node-01]# useradd ansible
コントロールノードは後でこのユーザーを使用して、このホストへの SSH 接続を確立します。
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
ユーザーとしてタスクを実行する場合は、このパスワードを入力する必要があります。ansible
ユーザーの SSH 公開鍵を管理対象ノードにインストールします。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.
プロンプトが表示されたら、
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
プロンプトが表示されたら、パスワードを入力します。
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.
コントロールノードでコマンドをリモートで実行して、SSH 接続を確認します。
[ansible@control-node]$ ssh managed-node-01.example.com whoami ansible
ansible
ユーザーのsudo
設定を作成します。visudo
コマンドを使用して、/etc/sudoers.d/ansible
ファイルを作成および編集します。[root@managed-node-01]# visudo /etc/sudoers.d/ansible
通常のエディターではなく
visudo
を使用する利点は、このユーティリティーがファイルをインストールする前に解析エラーなどの基本的なチェックを提供する点にあります。/etc/sudoers.d/ansible
ファイルで、要件に応じたsudoers
ポリシーを設定します。次に例を示します。ansible
ユーザーのパスワードを入力した後、このホスト上で任意のユーザーおよびグループとしてすべてのコマンドを実行する権限をansible
ユーザーに付与するには、以下を使用します。ansible ALL=(ALL) ALL
ansible
ユーザーのパスワードを入力せずに、このホスト上で任意のユーザーおよびグループとしてすべてのコマンドを実行する権限をansible
ユーザーに付与するには、以下を使用します。ansible ALL=(ALL) NOPASSWD: ALL
または、セキュリティー要件に合わせてより細かいポリシーを設定します。
sudoers
ポリシーの詳細は、sudoers(5)
man ページを参照してください。
検証
すべての管理対象ノード上のコントロールノードからコマンドを実行できることを確認します。
[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" } ...
ハードコーディングされたすべてのホストグループには、インベントリーファイルにリストされているすべてのホストが動的に含まれます。
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
が正しく設定されています。
関連情報
- RHEL 8 でのコントロールノードの準備
-
sudoers(5)
man ページ
第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 を実行します。
関連情報
-
システム上の
ansible-vault(1)
およびansible-playbook(1)
man ページ - Ansible vault
- Ansible Vault のベストプラクティス
第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 にアクセスするためのクレデンシャルがあります。
手順
次の内容を含む 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
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 にアクセスするためのクレデンシャルがあります。
手順
次の内容を含む 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
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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
コレクションで利用できます。
-
redfish_info
:redfish_info
モジュールは、システムインベントリーなどのリモートアウトオブバンド (OOB) コントローラーに関する情報を取得します。 -
redfish_command
:redfish_command
モジュールは、ログ管理やユーザー管理などの帯域外 (OOB) コントローラー操作と、システムの再起動、電源のオンとオフなどの電源操作を実行します。 -
redfish_config
:redfish_config
モジュールは、OOB 設定の変更や BIOS 設定の設定などの OOB コントローラー操作を実行します。
5.2. Redfish モジュールのパラメーター
Redfish モジュールに使用されるパラメーターは次のとおりです。
redfish_info パラメーター: | 説明 |
---|---|
| (必須) - OOB コントローラーのベース URI。 |
| (必須) - OOB コントローラーで実行するカテゴリーのリスト。デフォルト値は ["Systems"] です。 |
| (必須) - OOB コントローラーで実行するコマンドのリスト。 |
| OOB コントローラーへの認証用のユーザー名。 |
| OOB コントローラーへの認証用のパスワード。 |
redfish_command パラメーター: | 説明 |
---|---|
| (必須) - OOB コントローラーのベース URI。 |
| (必須) - OOB コントローラーで実行するカテゴリーのリスト。デフォルト値は ["Systems"] です。 |
| (必須) - OOB コントローラーで実行するコマンドのリスト。 |
| OOB コントローラーへの認証用のユーザー名。 |
| OOB コントローラーへの認証用のパスワード。 |
redfish_config パラメーター: | 説明 |
---|---|
| (必須) - OOB コントローラーのベース URI。 |
| (必須) - OOB コントローラーで実行するカテゴリーのリスト。デフォルト値は ["Systems"] です。 |
| (必須) - OOB コントローラーで実行するコマンドのリスト。 |
| OOB コントローラーへの認証用のユーザー名。 |
| OOB コントローラーへの認証用のパスワード。 |
| 更新する BIOS 属性。 |
5.3. redfish_info
モジュールの使用
次の例は、Playbook で redfish_info
モジュールを使用して CPU インベントリーに関する情報を取得する方法を示しています。わかりやすくするために、ここに示す例では Ansible コントロールホストおよび管理対象ホストと同じホストを使用しているため、Playbook が実行されるのと同じホストでモジュールを実行します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 -
ansible-collection-redhat-rhel_mgmt
パッケージがインストールされている。 -
python3-pyghmi
パッケージが、コントロールノードまたは管理対象ノードのいずれかにインストールされている。 - OOB コントローラーアクセスの詳細。
手順
次の内容を含む 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
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 コントローラーアクセスの詳細。
手順
次の内容を含む 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
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 コントローラーアクセスの詳細。
手順
次の内容を含む 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
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 (時刻同期が有効な場合)
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。usr: administrator pwd: <password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 を使用している。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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
は、デフォルトで証明書の有効期限が切れる前に更新を行います。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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
システムロールが、必要に応じてそれらを自動的に呼び出します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.cockpit/README.md
ファイル -
/usr/share/doc/rhel-system-roles/cockpit
ディレクトリー - RHEL システムロールを使用した証明書の要求
第9章 RHEL システムロールを使用したカスタム暗号化ポリシーの設定
カスタム暗号化ポリシーは、暗号化アルゴリズムとプロトコルの使用を管理する一連のルールと設定です。このポリシーは、複数のシステムとアプリケーションにまたがるセキュリティー環境の保護、一貫性、管理性を確保するのに役立ちます。
crypto_policies
RHEL システムロールを使用すると、多くのオペレーティングシステムにわたってカスタム暗号化ポリシーを自動化された方法で迅速かつ一貫して設定できます。
9.1. crypto_policies
RHEL システムロールを使用した FUTURE
暗号化ポリシーによるセキュリティーの強化
crypto_policies
RHEL システムロールを使用して、管理対象ノードで FUTURE
ポリシーを設定できます。このポリシーは、たとえば次のことを実現するのに役立ちます。
- 将来の新たな脅威への対応: 計算能力の向上を予測します。
- セキュリティーの強化: 強力な暗号化標準により、より長い鍵長とよりセキュアなアルゴリズムを必須にします。
- 高度なセキュリティー標準への準拠: 医療、通信、金融などの分野ではデータの機密性が高く、強力な暗号化を利用できることが重要です。
通常、FUTURE
は、機密性の高いデータを扱う環境、将来の規制に備える環境、長期的なセキュリティーストラテジーを採用する環境に適しています。
レガシーのシステムやソフトウェアでは、FUTURE
ポリシーによって強制される、より最新しく厳格なアルゴリズムやプロトコルをサポートする必要はありません。たとえば、古いシステムでは TLS 1.3 以上の鍵サイズがサポートされていない可能性があります。これにより互換性の問題が発生する可能性があります。
また、強力なアルゴリズムを使用すると、通常、計算負荷が増加し、システムのパフォーマンスに悪影響が及ぶ可能性があります。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 セクションを参照してください。
検証
コントロールノードで、たとえば
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。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/verify_playbook.yml
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
設定を自動的にデフォルト状態にリセットできます。これにより、意図しない、またはセキュアでないファイアウォールルールを効率的に削除し、管理を簡素化できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 システムロールを使用すると、トラフィックを効率的に別のポートに転送して、サービスの設定を変更せずにサービスを同時に実行できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 サーバーにアクセスできるようにします。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 以降)
dlm
やgfs2
などの耐障害性ストレージパッケージを含むリポジトリーを有効にするブールフラグ。このオプションを有効にするには、ha_cluster_enable_repos
をtrue
に設定する必要があります。この変数のデフォルト値はfalse
です。 ha_cluster_manage_firewall
(RHEL 9.2 以降)
ha_cluster
RHEL システムロールがファイアウォールを管理するかどうかを決定するブール値フラグ。ha_cluster_manage_firewall
がtrue
に設定されている場合、ファイアウォールの高可用性サービスとfence-virt
ポートが有効になります。ha_cluster_manage_firewall
がfalse
に設定されている場合、ha_cluster
RHEL システムロールはファイアウォールを管理しません。システムがfirewalld
サービスを実行している場合は、Playbook でパラメーターをtrue
に設定する必要があります。ha_cluster_manage_firewall
パラメーターを使用してポートを追加することはできますが、このパラメーターを使用してポートを削除することはできません。ポートを削除するには、firewall
システムロールを直接使用します。RHEL 8.8 以降、ファイアウォールはデフォルトでは設定されなくなりました。これは、ファイアウォールが設定されるのは、
ha_cluster_manage_firewall
がtrue
に設定されている場合のみであるためです。ha_cluster_manage_selinux
(RHEL 9.2 以降)
ha_cluster
RHEL システムロールがselinux
RHEL システムロールを使用してファイアウォール高可用性サービスに属するポートを管理するかどうかを決定するブール値フラグ。ha_cluster_manage_selinux
がtrue
に設定されている場合、ファイアウォール高可用性サービスに属するポートは、SELinux ポートタイプcluster_port_t
に関連付けられます。ha_cluster_manage_selinux
がfalse
に設定されている場合、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_present
をfalse
に設定すると、すべての 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_srcr
、ha_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_src
、ha_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
が無視されます。
-
IPA を使用しており、システムを IPA ドメインに参加させていない限り、
この変数のデフォルト値は
[]
です。高可用性クラスターで TLS 証明書とキーファイルを作成する
ha_cluster
RHEL システムロール Playbook の例については、高可用性クラスターの pcsd TLS 証明書とキーファイルの作成 を参照してください。ha_cluster_regenerate_keys
-
true
に設定すると、事前共有キーと TLS 証明書が再生成されることを決定するブール型フラグ。キーおよび証明書が再生成されるタイミングの詳細は、ha_cluster_corosync_key_src
、ha_cluster_pacemaker_key_src
、ha_cluster_fence_virt_key_src
、ha_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
(オプション) - トランスポートタイプ:knet
、udp
、またはudpu
。udp
およびudpu
トランスポートタイプは、1 つのリンクのみをサポートします。udp
とudpu
の暗号化は常に無効になっています。指定しない場合、デフォルトで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_breaker
、last_man_standing
、last_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_timeout
とtimeout
です。モデル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
- デフォルトはfalse
。SBD_DELAY_START
としてドキュメントに記載されています。 -
startmode
- デフォルトはalways
。SBD_START_MODE
としてドキュメントに記載されています。 -
timeout-action
- デフォルトはflush,reboot
。SBD_TIMEOUT_ACTION
としてドキュメントに記載されています。 -
watchdog-timeout
- デフォルトは5
。SBD_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 は、
node1
とnode2
で構成されるクラスターを設定し、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 以降) リソースエージェントは通常、特定のエージェント向けに最適化された、interval
やtimeout
などのリソース操作のデフォルト設定を定義します。この変数が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_primitives
のcopy_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
値は、リソースがノードで実行されないようにする必要があることを意味します。 -
-INFINITY
のscore
値は、リソースがノードで実行されないようにする必要があることを意味します。 -
score
が指定されていない場合、スコア値はデフォルトでINFINITY
になります。
-
正の
-
デフォルトでは、リソースの場所の制約は定義されていません。
リソース ID とノード名を指定するリソースの場所に対する制約の構造は次のとおりです。
ha_cluster_constraints_location: - resource: id: resource-id node: node-name id: constraint-id options: - name: score value: score-value - name: option-name value: option-value
リソースパターンを指定するリソースの場所の制約に対して設定する項目は、リソース ID を指定するリソースの場所の制約に対して設定する項目と同じです。ただし、リソース仕様そのものは除きます。リソース仕様に指定する項目は次のとおりです。
-
pattern
(必須) - POSIX 拡張正規表現リソース ID が照合されます。
-
リソースパターンとノード名を指定するリソースの場所に対する制約の構造は次のとおりです。
ha_cluster_constraints_location: - resource: pattern: resource-pattern node: node-name id: constraint-id options: - name: score value: score-value - name: resource-discovery value: resource-discovery-value
リソース ID とルールを指定するリソースの場所の制約に対して、次の項目を設定できます。
resource
(必須) - 制約が適用されるリソースの仕様。-
id
(必須) - リソース ID。 -
role
(オプション) - 制約が制限されるリソースのロール。Started
、Unpromoted
、Promoted
。
-
-
rule
(必須) -pcs
構文を使用して記述された制約ルール。詳細は、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
(オプション) - 制約が制限されるリソースのロール。Started
、Unpromoted
、Promoted
。
-
resource_leader
(必須) - クラスターは、最初にこのリソースを配置する場所を決定してから、resource_follower
を配置する場所を決定します。-
id
(必須) - リソース ID。 -
role
(オプション) - 制約が制限されるリソースのロール。Started
、Unpromoted
、Promoted
。
-
-
id
(オプション) - 制約の ID。指定しない場合、自動生成されます。 options
(オプション) - 名前と値のディクショナリーリスト。score
- 制約の重みを設定します。-
正の
score
値は、リソースが同じノードで実行される必要があることを示します。 -
負の
score
値は、リソースが異なるノードで実行される必要があることを示します。 -
+ INFINITY
のscore
値は、リソースが同じノードで実行される必要があることを示します。 -
-INFINITY
のscore
値は、リソースが異なるノードで実行される必要があることを示します。 -
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
リソースに対してアクションを開始する前に完了する必要のあるアクション。許可される値:start
、stop
、promote
、demote
。
-
resource_then
(必須) - 依存リソース。-
id
(必須) - リソース ID。 -
action
(オプション) -resource_first
リソースに対するアクションが完了した後にのみリソースが実行できるアクション。許可される値:start
、stop
、promote
、demote
。
-
-
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
(オプション) - 制約が制限されるリソースのロール。Started
、Unpromoted
、Promoted
。
-
-
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_present
をfalse
に設定する必要があります。 -
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 でのコントロールノードの準備 を参照してください。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。cluster_password: <cluster_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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/
ディレクトリー - RHEL システムロールを使用した証明書の要求
11.4. リソースを実行していない高可用性クラスターの設定
ha_cluster
システムロールを使用すると、基本的なクラスターをシンプルかつ自動的に設定できます。基本的なクラスターを作成したら、pcs
コマンドラインインターフェイスを使用して、リソースごとに他のクラスターコンポーネントと動作を設定できます。次の手順の例では、必要最小限のパラメーターを使用して、フェンシングが設定されていない基本的な 2 ノードクラスターを設定します。
ha_cluster
システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
- ha_cluster システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。cluster_password: <cluster_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 でのコントロールノードの準備 を参照してください。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。cluster_password: <cluster_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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/
ディレクトリー - Red Hat High Availability クラスターでのフェンシングの設定
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 でのコントロールノードの準備 を参照してください。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。cluster_password: <cluster_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 でのコントロールノードの準備 を参照してください。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。cluster_password: <cluster_password> fence1_password: <fence1_password> fence2_password: <fence2_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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. リソースに制約のある高可用性クラスターの設定
クラスターを設定するときに、アプリケーションの要件に合わせてクラスターリソースの動作を指定できます。リソース制約を設定することで、クラスターリソースの動作を制御できます。
次のカテゴリーのリソース制約を定義できます。
- 場所の制約: リソースがどのノードで実行できるかを決定します。場所の制約の詳細は、リソースを実行するノードの決定 を参照してください。
- 順序の制約: リソースが実行される順序を決定します。順序の制約の詳細は、クラスターリソースの実行順序の決定 を参照してください。
- コロケーションの制約。1 つのリソースの場所が別のリソースの場所に依存することを指定します。コロケーションの制約の詳細は、クラスターリソースのコロケーション を参照してください。
- チケットの制約。特定の Booth チケットに依存するリソースを示します。Booth チケットの制約の詳細は、マルチサイト Pacemaker クラスター を参照してください。
次の手順の例では、ha_cluster
RHEL システムロールを使用して、リソースの場所の制約、リソースコロケーションの制約、リソース順序の制約、およびリソースチケットの制約を含む高可用性クラスターを作成します。
ha_cluster
RHEL システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
- ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。
- ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。cluster_password: <cluster_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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 チケットの制約を定義する変数。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 でのコントロールノードの準備 を参照してください。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。cluster_password: <cluster_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 以降でサポート) をロードするインベントリーファイルを使用します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
- ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。
手順
次の内容を含む 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 で暗号化します。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 でのコントロールノードの準備 を参照してください。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。cluster_password: <cluster_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ホストを設定する変数。
Playbook の構文を検証します。
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook-qdevice.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 でのコントロールノードの準備 を参照してください。
- クォーラムデバイスが設定されている。
手順
次の内容を含む 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>
- クラスターでクォーラムデバイスを使用することを指定するのに使用できるクラスタークォーラムを設定する変数。
Playbook の構文を検証します。
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook-cluster-qdevice.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 でのコントロールノードの準備 を参照してください。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。cluster_password: <cluster_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 に指定されていない設定はすべて失われます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
- ha_cluster RHEL システムロールのインベントリーの指定 で説明されているように、インベントリーファイルでクラスターノードが指定されている。インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。
- Pacemaker クラスターで XFS ファイルシステムを持つ LVM ボリュームを設定する の説明に従って、XFS ファイルシステムを使用して LVM 論理ボリュームを設定している。
- Configuring an Apache HTTP Server の説明に従って、Apache HTTP サーバーを設定している。
- システムには、クラスターノードをフェンスするのに使用される APC 電源スイッチが含まれている。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。cluster_password: <cluster_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook --ask-vault-pass ~/playbook.yml
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
検証
クラスター内のノードのいずれかから、クラスターのステータスを確認します。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
クラスターが起動したら、
IPaddr2
リソースとして定義した IP アドレスをブラウザーで指定して、単純な単語 "Hello" で構成される表示例を確認できます。Hello
z1.example.com
で実行しているリソースグループがz2.example.com
ノードにフェイルオーバーするかどうかをテストするには、ノードz1.example.com
をstandby
にすると、ノードがリソースをホストできなくなります。[root@z1 ~]# pcs node standby z1.example.com
ノード
z1
をstandby
モードにしたら、クラスター内のノードのいずれかからクラスターのステータスを確認します。リソースはすべて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 サイトは、中断せず表示されているはずです。
スタンバイ
モードから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 システムロールを使用すると、複数のシステムで一貫して永続的なロギングを設定できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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
設定ファイルの内容を置き換えます。以前の設定は、ロール変数で指定された設定に変更され、ロール変数で指定されていない場合は失われます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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
- ループバックインターフェイスを使用してネットワーク経由で送信する最大パケットサイズ
- 同時に開くことができるファイル数の制限
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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
権限がある。 - 更新するブートローダーエントリーに対応するカーネルを特定した。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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" ...
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.bootloader/README.md
ファイル -
/usr/share/doc/rhel-system-roles/bootloader/
ディレクトリー - Playbook の使用
- 変数の使用
- ロール
- カーネルコマンドラインパラメーターの設定
15.4. bootloader
RHEL システムロールを使用したブートローダー設定情報の収集
bootloader
RHEL システムロールを使用して、GRUB2 ブートローダーエントリーに関する情報を自動的に収集できます。この方法により、システムが正しく起動するように設定され、すべてのエントリーが正しいカーネルと初期 RAM ディスクイメージを参照していることをすぐに確認できます。
その結果、たとえば次のことが可能になります。
- ブートの失敗を防止する。
- トラブルシューティング時に既知の正常な状態に戻す。
- セキュリティー関連のカーネルコマンドラインパラメーターを確実に正しく設定する。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 システムロールのプロパティーベースのフィルターを使用すると、さまざまな条件に基づいてローカルログメッセージをフィルタリングできます。その結果、たとえば以下を実現できます。
- 明確なログ: トラフィック量の多い環境では、ログが急増することがあります。エラーなどの特定のメッセージに注目することで、問題をより早く特定できるようになります。
- システムパフォーマンスの最適化: ログの量が多すぎると、通常、システムパフォーマンスが低下します。重要なイベントのみを選択的にログに記録することで、リソースの枯渇を防ぎ、システムをより効率的に運用できます。
- セキュリティーの強化: システムエラーやログイン失敗などのセキュリティーメッセージを効率的にフィルタリングすることで、関連するログのみを取得できます。これは、違反を検出し、コンプライアンス基準を満たすために重要です。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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: msg
、property: contains
、およびproperty_value: error
オプションを指定すると、error
文字列を含むすべてのログが/var/log/errors.log
ファイルに保存されます。property: msg
、property: !contains
、およびproperty_value: error
オプションを指定すると、他のすべてのログが/var/log/others.log
ファイルに保存されます。error
値は、フィルタリングする必要がある文字列に置き換えることができます。 logging_flows
-
ロギングのフローディクショナリーのリストを定義して、
logging_inputs
とlogging_outputs
の関係を指定します。inputs: [files_input]
オプションは、ログの処理を開始する入力のリストを指定します。outputs: [files_output0, files_output1]
オプションは、ログ送信先の出力のリストを指定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
管理対象ノードで、
/etc/rsyslog.conf
ファイルの構文をテストします。# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run... rsyslogd: End of config validation run. Bye.
管理対象ノードで、システムが
error
文字列を含むメッセージをログに送信することを確認します。テストメッセージを送信します。
# logger error
以下のように
/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 カ所に集中して保存すると、セキュアで改ざん不可能な環境にログを保存しやすくなります。このような環境により、セキュリティーインシデントをより効果的に検出して対応し、監査要件を満たすことが容易になります。
- ログ分析の効率向上: 複数のマシンまたはサービスにまたがる複雑な問題を迅速にトラブルシューティングするには、複数のシステムからのログメッセージを相関させることが重要です。これにより、さまざまなソースからのイベントをすばやく分析し、相互参照することができます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - サーバーまたはクライアントシステムの SELinux ポリシーでポートを定義し、それらのポートのファイアウォールを開く。デフォルトの SELinux ポリシーには、ポート 601、514、6514、10514、および 20514 が含まれます。別のポートを使用するには、クライアントおよびサーバーシステムの SELinux ポリシーの変更 を参照してください。
手順
次の内容を含む 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_ports
とtcp_ports
の両方が設定されている場合、udp_ports
が使用され、tcp_ports
は削除されます。 logging_outputs
-
ロギングの出力ディクショナリーのリストを定義します。
type: remote_files
オプションを指定すると、ログの送信元であるリモートホストとプログラム名ごとに、出力がローカルファイルに保存されます。 logging_flows
-
ロギングのフローディクショナリーのリストを定義して、
logging_inputs
とlogging_outputs
の関係を指定します。inputs: [remote_udp_input、remote_tcp_input]
オプションは、ログの処理を開始する入力のリストを指定します。outputs: [remote_files_output]
オプションは、ログ送信先の出力のリストを指定します。
サンプル Playbook の 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_inputs
とlogging_outputs
の関係を指定します。inputs: [basic_input]
オプションは、ログの処理を開始する入力のリストを指定します。outputs: [forward_output0, forward_output1]
オプションは、ログ送信先の出力のリストを指定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
クライアントとサーバーシステムの両方で、
/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.
クライアントシステムがサーバーにメッセージを送信することを確認します。
クライアントシステムで、テストメッセージを送信します。
# logger test
サーバーシステムで、
/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 ドメインに登録されている。
手順
次の内容を含む 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_cert
、ca_cert_src
、cert
、cert_src
、private_key
、private_key_src
、およびtls
で指定) を設定できます。注記logging_certificates
を使用して管理対象ノードにファイルを作成する場合は、ca_cert_src
、cert_src
、およびprivate_key_src
を使用しないでください。これらは、logging_certificates
によって作成されていないファイルのコピーに使用されます。ca_cert
-
管理対象ノード上の CA 証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pem
で、ファイル名はユーザーが設定します。 cert
-
管理対象ノード上の証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pem
で、ファイル名はユーザーが設定します。 private_key
-
管理対象ノード上の秘密鍵ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pem
で、ファイル名はユーザーが設定します。 ca_cert_src
-
ターゲットホストの
ca_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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 ドメインに登録されている。
手順
次の内容を含む 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_cert
、ca_cert_src
、cert
、cert_src
、private_key
、private_key_src
、およびtls
で指定) を設定できます。注記logging_certificates
を使用して管理対象ノードにファイルを作成する場合は、ca_cert_src
、cert_src
、およびprivate_key_src
を使用しないでください。これらは、logging_certificates
によって作成されていないファイルのコピーに使用されます。ca_cert
-
管理対象ノード上の CA 証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pem
で、ファイル名はユーザーが設定します。 cert
-
管理対象ノード上の証明書ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pem
で、ファイル名はユーザーが設定します。 private_key
-
管理対象ノード上の秘密鍵ファイルへのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pem
で、ファイル名はユーザーが設定します。 ca_cert_src
-
ターゲットホストの
ca_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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
ファイル -
/usr/share/doc/rhel-system-roles/logging/
ディレクトリー - RHEL システムロールを使用した証明書の要求
-
rsyslog.conf(5)
およびsyslog(3)
man ページ
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) を使用して、メッセージ送信を暗号化し、ネットワーク経由でログを安全に転送します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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_cert
、cert
、private_key
} や {ca_cert_src
、cert_src
、private_key_src
} が必要です。-
{
ca_cert_src
、cert_src
、private_key_src
} のトリプレットを設定すると、デフォルトの場所 (/etc/pki/tls/certs
と/etc/pki/tls/private
) が、コントロールノードからファイルを転送するため、管理対象ノードの宛先として使用されます。この場合、ファイル名はトリプレットの元の名前と同じです。 -
{
ca_cert
、cert
、private_key
} トリプレットが設定されている場合は、ファイルはロギング設定の前にデフォルトのパスに配置されている必要があります。 - トリプレットの両方が設定されている場合には、ファイルはコントロールノードのローカルのパスから管理対象ノードの特定のパスへ転送されます。
-
{
ca_cert
-
CA 証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pem
で、ファイル名はユーザーが設定します。 cert
-
証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pem
で、ファイル名はユーザーが設定します。 private_key
-
秘密鍵へのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pem
で、ファイル名はユーザーが設定します。 ca_cert_src
-
ローカルの CA 証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
ca_cert
を指定している場合は、その場所にコピーされます。 cert_src
-
ローカルの証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
cert
を指定している場合には、その証明書が場所にコピーされます。 private_key_src
-
ローカルキーファイルのパスを表します。これは管理対象ノードにコピーされます。
private_key
を指定している場合は、その場所にコピーされます。 pki_authmode
-
name
またはfingerprint
の認証モードを使用できます。 permitted_servers
- ロギングクライアントが、TLS 経由での接続およびログ送信を許可するサーバーのリスト。
inputs
- ロギング入力ディクショナリーのリスト。
outputs
- ロギング出力ディクショナリーのリスト。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 を使用して、メッセージ送信を暗号化し、ネットワーク経由でログを安全に転送します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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_cert
、cert
、private_key
} や {ca_cert_src
、cert_src
、private_key_src
} が必要です。-
{
ca_cert_src
、cert_src
、private_key_src
} のトリプレットを設定すると、デフォルトの場所 (/etc/pki/tls/certs
と/etc/pki/tls/private
) が、コントロールノードからファイルを転送するため、管理対象ノードの宛先として使用されます。この場合、ファイル名はトリプレットの元の名前と同じです。 -
{
ca_cert
、cert
、private_key
} トリプレットが設定されている場合は、ファイルはロギング設定の前にデフォルトのパスに配置されている必要があります。 - トリプレットの両方が設定されている場合には、ファイルはコントロールノードのローカルのパスから管理対象ノードの特定のパスへ転送されます。
-
{
ca_cert
-
CA 証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/ca.pem
で、ファイル名はユーザーが設定します。 cert
-
証明書へのパスを表します。デフォルトのパスは
/etc/pki/tls/certs/server-cert.pem
で、ファイル名はユーザーが設定します。 private_key
-
秘密鍵へのパスを表します。デフォルトのパスは
/etc/pki/tls/private/server-key.pem
で、ファイル名はユーザーが設定します。 ca_cert_src
-
ローカルの CA 証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
ca_cert
を指定している場合は、その場所にコピーされます。 cert_src
-
ローカルの証明書ファイルパスを表します。これは管理対象ノードにコピーされます。
cert
を指定している場合には、その証明書が場所にコピーされます。 private_key_src
-
ローカルキーファイルのパスを表します。これは管理対象ノードにコピーされます。
private_key
を指定している場合は、その場所にコピーされます。 pki_authmode
-
name
またはfingerprint
の認証モードを使用できます。 permitted_clients
- ロギングサーバーが TLS 経由での接続およびログ送信を許可するクライアントのリスト。
inputs
- ロギング入力ディクショナリーのリスト。
outputs
- ロギング出力ディクショナリーのリスト。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 をリモートで設定してメトリクスを記録できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 を複数のホストにリモートで設定できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。metrics_usr: <username> metrics_pwd: <password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook --ask-vault-pass ~/playbook.yml
検証
pcp
パッケージがインストールされているホストで、認証を必要とするメトリクスをクエリーします。Playbook で使用した認証情報を使用してメトリクスをクエリーします。
# pminfo -fmdt -h pcp://managed-node-01.example.com?username=<user> proc.fd.count Password: <password> proc.fd.count inst [844 or "000844 /var/lib/pcp/pmdas/proc/pmdaproc"] value 5
コマンドが成功すると、
proc.fd.count
メトリクスの値が返されます。ユーザー名を省略してコマンドを再度実行し、認証されていないユーザーの場合はコマンドが失敗することを確認します。
# pminfo -fmdt -h pcp://managed-node-01.example.com proc.fd.count proc.fd.count Error: No permission to perform requested operation
次のステップ
関連情報
-
/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 も自動的にインストールされます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - 監視対象ホストへのリモートアクセス用に PCP が設定されている。
- Grafana をインストールするホストが、監視する予定の PCP ノードのポート 44321 にアクセスできる。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。grafana_admin_pwd: <password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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 Vector
、PCP 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook --ask-vault-pass ~/playbook.yml
検証
-
ブラウザーで
http://<grafana_server_IP_or_hostname>:3000
を開き、上記手順で設定したパスワードを使用してadmin
ユーザーとしてログインします。 監視データを表示します。
ライブデータを表示するには、次の手順を実行します。
-
左側のナビゲーションバーにある
Performance Co-Pilot
アイコンをクリックし、PCP Vector Checklist
を選択します。 -
デフォルトでは、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 が信頼されている。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。sa_pwd: <sa_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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_cert
とmssql_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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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) ドメインに登録されている。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。sa_pwd: <sa_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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
ファイル - RHEL システムロールを使用した証明書の要求
- Ansible vault
18.3. microsoft.sql.server
Ansible システムロールとカスタムストレージパスを使用して SQL Server をインストールおよび設定する
microsoft.sql.server
Ansible システムロールを使用して新しい SQL Server をインストールおよび設定する場合、データディレクトリーとログディレクトリーのパスとモードをカスタマイズできます。たとえば、データベースとログファイルを、より多くのストレージ容量を持つ別のディレクトリーに保存する場合は、カスタムパスを設定します。
データまたはログのパスを変更して Playbook を再実行すると、以前使用したディレクトリーとそのすべてのコンテンツが元のパスに残ります。新しい場所には新しいデータベースとログのみが保存されます。
タイプ | ディレクトリー | モード | Owner | Group |
---|---|---|---|---|
データ |
|
|
| |
Logs |
|
|
| |
[a]
ディレクトリーが存在する場合、ロールはモードを保持します。ディレクトリーが存在しない場合、ロールはディレクトリーを作成するときに管理対象ノードにデフォルトの umask を適用します。
|
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 -
ansible-collection-microsoft-sql
パッケージまたはmicrosoft.sql
コレクションコントロールノードがインストールされている。 - 管理対象ノードに 2 GB 以上の RAM がインストールされている。
- 管理対象ノードが、RHEL 7.9、RHEL 8、RHEL 9.4 以降のいずれかのバージョンを使用している。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。sa_pwd: <sa_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
既存の 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook --ask-vault-pass ~/playbook.yml
検証
データディレクトリーのモードを表示します。
$ 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/
ログディレクトリーのモードを表示します。
$ 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 に解決される。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。sa_pwd: <sa_password> sql_pwd: <SQL_AD_password> ad_admin_pwd: <AD_admin_password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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_realm
、ad_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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook --ask-vault-pass ~/playbook.yml
AD ドメインで、Playbook で指定した AD SQL ユーザーに対して 128 ビットおよび 256 ビットの Kerberos 認証を有効にします。以下のオプションのいずれかを使用します。
Active Directory Users and Computers アプリケーションで、以下を実行します。
- ad.example.com > Users > sqluser > Accounts に移動します。
- Account options リストで、This account supports Kerberos AES 128 bit encryption と This account supports Kerberos AES 256 bit encryption を選択します。
- Apply をクリックします。
管理者モードの PowerShell で、次のように入力します。
C:\> Set-ADUser -Identity
sqluser
-KerberosEncryptionType AES128,AES256
SQL Server に対して認証できる AD ユーザーを許可します。SQL Server で、次の手順を実行します。
Administrator
ユーザーの Kerberos チケットを取得します。$ kinit Administrator@ad.example.com
AD ユーザーを許可します。
$ /opt/mssql-tools/bin/sqlcmd -S. -Q 'CREATE LOGIN [AD\<AD_user>] FROM WINDOWS;'
SQL Server へのアクセスを許可するすべての AD ユーザーに対してこの手順を繰り返します。
検証
SQL Server を実行する管理対象ノードで、以下を実行します。
AD ユーザーの Kerberos チケットを取得します。
$ kinit <AD_user>@ad.example.com
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 鍵のデプロイおよびバックアップ
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 を使用してすでに暗号化されているボリューム。
手順
次の内容を含む 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
ファイルを参照してください。
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
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/>"}'
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 を使用してすでに暗号化されているボリューム。
手順
ホストのネットワーク設定を含むファイル (例:
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
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.nbde_client/README.md
ファイル -
/usr/share/doc/rhel-system-roles/nbde_client/
ディレクトリー - Looking forward to Linux network configuration in the initial ramdisk (initrd) (Red Hat Enable Sysadmin)
第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 を使用してネットワークを設定している。
手順
~/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
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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=
コマンドを使用すると、デバイスパスを表示できます。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 サービスを使用してネットワークを設定している。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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=
コマンドを使用すると、デバイスパスを表示できます。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 デバイスで設定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
特定のブリッジのポートであるイーサネットデバイスのリンクステータスを表示します。
# 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
ブリッジデバイスのポートであるイーサネットデバイスのステータスを表示します。
# 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 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 を使用してネットワークを設定している。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
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
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
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 システムロールを使用して、ルーティングテーブルやルールを含む接続プロファイルを設定できます。
この手順では、次のネットワークトポロジーを想定しています。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 -
管理対象ノードは、
NetworkManager
およびfirewalld
サービスを使用します。 設定する管理対象ノードには、次の 4 つのネットワークインターフェイスがあります。
-
enp7s0
インターフェイスはプロバイダー A のネットワークに接続されます。プロバイダーのネットワークのゲートウェイ IP は198.51.100.2
で、ネットワークは/30
ネットワークマスクを使用します。 -
enp1s0
インターフェイスはプロバイダー B のネットワークに接続されます。プロバイダーのネットワークのゲートウェイ IP は192.0.2.2
で、ネットワークは/30
ネットワークマスクを使用します。 -
enp8s0
インターフェイスは、内部ワークステーションで10.0.0.0/24
サブネットに接続されています。 -
enp9s0
インターフェイスは、会社のサーバーで203.0.113.0/24
サブネットに接続されています。
-
-
内部ワークステーションのサブネット内のホストは、デフォルトゲートウェイとして
10.0.0.1
を使用します。この手順では、この IP アドレスをルーターのenp8s0
ネットワークインターフェイスに割り当てます。 -
サーバーサブネット内のホストは、デフォルトゲートウェイとして
203.0.113.1
を使用します。この手順では、この IP アドレスをルーターのenp9s0
ネットワークインターフェイスに割り当てます。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
内部ワークステーションサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。# yum install traceroute
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
経由でパケットを送信することが表示されます。
サーバーのサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。# yum install traceroute
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
経由でパケットを送信することが表示されます。
RHEL システムロールを使用して設定した RHEL ルーターで、次の手順を実行します。
ルールのリストを表示します。
# ip rule list 0: from all lookup local 5: from 10.0.0.0/24 lookup 5000 32766: from all lookup main 32767: from all lookup default
デフォルトでは、RHEL には、
local
テーブル、main
テーブル、およびdefault
テーブルのルールが含まれます。テーブル
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
インターフェイスとファイアウォールゾーンを表示します。
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0
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
ファイルに保存されている。
-
クライアントキーが
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。pwd: <password>
- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 に常に指定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 に常に指定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
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
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 に常に指定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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 に常に指定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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
権限がある。 - デバイスがサポートする最大リングバッファーサイズを把握している。
手順
次の内容を含む 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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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
ファイルにリストされている。
手順
次の内容を含む 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_user
とrun_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
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
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
ロールはルートフルコンテナーを作成します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む 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