15.3. シークレットを使用した Quadlet アプリケーションの作成

Podman システムロールを使用して、Ansible Playbook を実行することで、シークレットを含む Quadlet アプリケーションを作成できます。

注記

podman_quadlet_specs 変数は、Podman v4.6 以降で使用可能です。

前提条件

  • コントロールノード (このシステムから Red Hat Ansible Engine は他のシステムを設定) へのアクセスおよびパーミッション。
  • コントロールノードでは、

    • rhel-system-roles パッケージがインストールされている。
    • マネージドのホストと適用するその他のパラメーターをリストした Ansible インベントリーファイル。
    • シークレット - できれば Ansible Vault 暗号化変数を使用して、以下を定義する必要があります。
    • MySQL の root パスワード ("root_password_from_vault")
    • TLS 証明書と鍵 ("cert_from_vault" および "key_from_vault")
注記
  • ansible-playbook コマンドは、rhel-system-roles パッケージの依存関係として自動的にインストールされる ansible-core パッケージによって提供されます。
  • この例で使用するファイルは、/usr/share/ansible/roles/rhel-system-roles.podman/tests/files および /usr/share/ansible/roles/rhel-system-roles.podman/tests/templates ディレクトリーの rhel-system-roles パッケージで提供されています。

手順

  1. 以下のコンテンツを含む新しい playbook.yml ファイルを作成します。

    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_from_vault }}"
      - name: mysql-root-password-kube
        state: present
        skip_existing: true
        data: |
          apiVersion: v1
          data:
            password: "{{ root_password_from_vault | b64encode }}"
          kind: Secret
          metadata:
            name: mysql-root-password-kube
      - name: envoy-certificates
        state: present
        skip_existing: true
        data: |
          apiVersion: v1
          data:
            certificate.key: {{ key_from_vault | b64encode }}
            certificate.pem: {{ cert_from_vault | 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 として参照します。
  2. オプション: Playbook の構文を確認します。

    # ansible-playbook --syntax-check playbook.yml -i inventory_file
  3. インベントリーファイルで Playbook を実行します。

    # ansible-playbook -i inventory_file playbook.yml

関連情報