15.3. 使用 podman RHEL 系统角色创建带有 secret 的 Quadlet 应用程序
您可以通过运行 Ansible playbook,使用 podman
RHEL 系统角色创建一个带有 secret 的 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
变量中的所有行都以两个空格开头。- 保存更改,并关闭编辑器。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 role
为 Quadlet 定义一组配置,它指向以某种方式一起工作的一组容器或服务。它包括以下规范:-
Wordpress 网络由
quadlet-demo
网络单元定义。 -
MySQL 容器的卷配置由
file_src: quadlet-demo-mysql.volume
字段定义。 -
template_src: quadlet-demo-mysql.container.j2
字段用于生成 MySQL 容器的配置。 -
两个 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/
目录