16.3. podman RHEL 시스템 ROLE을 사용하여 비밀을 가진 Quadlet 애플리케이션을 만듭니다.
podman RHEL 시스템 ROLE을 사용하여 Ansible Playbook를 실행하여 비밀이 포함된 Quadlet 애플리케이션을 만들 수 있습니다.
사전 요구 사항
- Control 노드와 Managed 노드를 준비했습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는 이러한 노드에 대한
사두권한이 있습니다. -
컨테이너에 있는 웹 서버의 인증서와 해당 개인 키가
~/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명령이 편집기를 열면: <value>format:에 민감한 데이터를 입력합니다.root_password: <root_password> certificate: |- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- key: |- -----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY-----증명서및키 변수의 모든 줄이 두 개의 빈자로 시작하는지 확인합니다.- 변경 사항을 저장하고 편집기를 종료합니다. Ansible는 vault에 있는 데이터를 암호화합니다.
다음 내용이 있는 플레이북 파일(예:
~/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: redhat.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 데이터베이스와 페어링된 grub 콘텐츠 관리 시스템을 생성합니다.
podman_quadlet_specs 역할변수는 특정 방식으로 함께 작동하는 컨테이너 또는 서비스 그룹을 참조하는 Quadlet의 구성 세트를 정의합니다. 여기에는 다음 사양이 포함됩니다.-
Wordpress 네트워크는
쿼드릿-demo네트워크 단위로 정의됩니다. -
MySQL 컨테이너의 볼륨 구성은
file_src: quadlet-demo-mysql.volume필드에 의해 정의됩니다. -
template_src: quadlet-demo-mysql.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