D10.5 Swarm Secrets & Configs 🔐
Docker Swarm Secrets
Τα Swarm secrets αποθηκεύονται κρυπτογραφημένα στο Raft log του Swarm και γίνονται mount ως αρχεία:
tasks:
# ── Δημιουργία Swarm secret ───────────────
- name: "🔐 PostgreSQL password secret"
community.docker.docker_secret:
name: pg_password
data: "{{ vault_postgres_pass }}"
state: present
delegate_to: manager-01
no_log: true
- name: "🔐 App secret key"
community.docker.docker_secret:
name: app_secret_key
data: "{{ vault_app_secret }}"
state: present
delegate_to: manager-01
no_log: true
# ── Χρήση σε service ──────────────────────
- name: "🚀 App service με secret"
community.docker.docker_swarm_service:
name: myapp
image: "myapp:{{ app_version }}"
state: present
replicas: 2
secrets:
- secret_name: app_secret_key
filename: /run/secrets/secret_key # ← mount path
uid: "1000"
gid: "1000"
mode: 0400
Docker Swarm Configs
Τα configs είναι σαν secrets αλλά δεν κρυπτογραφούνται (για configuration files):
tasks:
# ── Nginx config ───────────────────────────
- name: "⚙️ Nginx config"
community.docker.docker_config:
name: nginx_conf
data: "{{ lookup('template', 'templates/nginx.conf.j2') }}"
state: present
delegate_to: manager-01
# ── Prometheus config ──────────────────────
- name: "⚙️ Prometheus config"
community.docker.docker_config:
name: prometheus_yml
data: "{{ lookup('template', 'templates/prometheus.yml.j2') }}"
state: present
delegate_to: manager-01
# ── Χρήση config σε service ───────────────
- name: "🌐 Nginx service με config"
community.docker.docker_swarm_service:
name: nginx
image: "nginx:1.25-alpine"
state: present
replicas: 3
configs:
- config_name: nginx_conf
filename: /etc/nginx/nginx.conf
uid: "101"
gid: "101"
mode: 0444
Secret rotation
tasks:
# ── Νέο secret με suffix ──────────────────
- name: "🔄 Rotate secret"
community.docker.docker_secret:
name: "pg_password_v{{ secret_version }}"
data: "{{ vault_postgres_pass_new }}"
state: present
delegate_to: manager-01
no_log: true
# ── Update service να χρησιμοποιεί νέο ───
- name: "🔄 Update service με νέο secret"
community.docker.docker_swarm_service:
name: postgres_app
state: present
secrets:
- secret_name: "pg_password_v{{ secret_version }}"
filename: /run/secrets/pg_password
delegate_to: manager-01
no_log: true
# ── Διαγραφή παλιού ───────────────────────
- name: "🗑️ Remove old secret"
community.docker.docker_secret:
name: "pg_password_v{{ (secret_version | int) - 1 }}"
state: absent
delegate_to: manager-01
Σύνοψη D10.5
Swarm Secrets & Configs
│
├── Secrets:
│ ├── Κρυπτογραφημένα στο Raft log
│ ├── Mount ως /run/secrets/name
│ └── no_log: true στο playbook!
│
├── Configs:
│ ├── Non-encrypted config files
│ ├── Mount ως αρχείο (π.χ. nginx.conf)
│ └── Jinja2 template → config
│
└── Rotation:
└── Νέο secret με version suffix → update service