21.3. podman RHEL システムロールを使用したシークレットを含む Quadlet アプリケーションの作成
podman
RHEL システムロールを使用して、Ansible Playbook を実行することで、シークレットを含む Quadlet アプリケーションを作成できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 -
コンテナー内の Web サーバーが使用する証明書と対応する秘密鍵が、
~/certificate.pem
ファイルと~/key.pem
ファイルに保存されている。
手順
証明書と秘密鍵ファイルの内容を表示します。
$ cat ~/certificate.pem -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- $ cat ~/key.pem -----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY-----
この情報は後の手順で必要になります。
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。root_password: <root_password> certificate: |- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- key: |- -----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY-----
certificate
変数およびkey
変数のすべての行が 2 つのスペースで始まるようにします。- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。- name: Deploy a wordpress CMS with MySQL database hosts: managed-node-01.example.com vars_files: - vault.yml tasks: - name: Create and run the container ansible.builtin.include_role: name: rhel-system-roles.podman vars: podman_create_host_directories: true podman_activate_systemd_unit: false podman_quadlet_specs: - name: quadlet-demo type: network file_content: | [Network] Subnet=192.168.30.0/24 Gateway=192.168.30.1 Label=app=wordpress - file_src: quadlet-demo-mysql.volume - template_src: quadlet-demo-mysql.container.j2 - file_src: envoy-proxy-configmap.yml - file_src: quadlet-demo.yml - file_src: quadlet-demo.kube activate_systemd_unit: true podman_firewall: - port: 8000/tcp state: enabled - port: 9000/tcp state: enabled podman_secrets: - name: mysql-root-password-container state: present skip_existing: true data: "{{ root_password }}" - name: mysql-root-password-kube state: present skip_existing: true data: | apiVersion: v1 data: password: "{{ root_password | b64encode }}" kind: Secret metadata: name: mysql-root-password-kube - name: envoy-certificates state: present skip_existing: true data: | apiVersion: v1 data: certificate.key: {{ key | b64encode }} certificate.pem: {{ certificate | b64encode }} kind: Secret metadata: name: envoy-certificates
この手順では、MySQL データベースと組み合わせた WordPress コンテンツ管理システムを作成します。
podman_quadlet_specs
ロール変数では、Quadlet の一連の設定を定義します。この設定は、特定の方法で連携するコンテナーまたはサービスのグループを参照します。これには次の仕様を含めます。-
Wordpress ネットワークを、
quadlet-demo
ネットワークユニットで定義します。 -
MySQL コンテナーのボリューム設定を、
file_src: quadlet-demo-mysql.volume
フィールドで定義します。 -
template_src: quadlet-demo-mysql.container.j2
フィールドを使用して、MySQL コンテナーの設定を生成します。 -
その後に、2 つの YAML ファイル
file_src: envoy-proxy-configmap.yml
およびfile_src:quadlet-demo.yml
を指定します。.yml は有効な Quadlet ユニットタイプではないため、これらのファイルはコピーされるだけで、Quadlet 仕様としては処理されないことに注意してください。 -
Wordpress および envoy プロキシーコンテナーと設定を、
file_src: quadlet-demo.kube
フィールドで定義します。kube ユニットは、[Kube]
セクション内の上記の YAML ファイルを、Yaml=quadlet-demo.yml
およびConfigMap=envoy-proxy-configmap.yml
として参照します。
-
Wordpress ネットワークを、
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/
ディレクトリー