15.3. podman RHEL 시스템 역할을 사용하여 시크릿이 있는 Quadlet 애플리케이션 생성
podman
RHEL 시스템 역할을 사용하여 Ansible 플레이북을 실행하여 시크릿과 함께 Quadlet 애플리케이션을 생성할 수 있습니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다. -
인증서 및 컨테이너의 웹 서버가 사용해야 하는 해당 개인 키는
~/certificate.pem
및~/key.pem
파일에 저장됩니다.
절차
인증서 및 개인 키 파일의 내용을 표시합니다.
$ cat ~/certificate.pem -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- $ cat ~/key.pem -----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY-----
이 정보는 이후 단계에서 필요합니다.
중요한 변수를 암호화된 파일에 저장합니다.
자격 증명 모음을 생성합니다.
$ 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-----
인증서
및키
변수의 모든 행이 두 개의 공백으로 시작하는지 확인합니다.- 변경 사항을 저장하고 편집기를 종료합니다. Ansible은 자격 증명 모음의 데이터를 암호화합니다.
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/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 데이터베이스와 페어링된 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 네트워크는
플레이북 구문을 확인합니다.
$ 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/
디렉터리