feat: добавлены аддоны SMTP Relay, HashiCorp Vault, External Secrets Operator

- SMTP Relay (bokysan/mail): Postfix relay через Yandex SMTP, порт 465 с
  TLS wrappermode, trusted networks only (pod/service CIDR), без аутентификации
  внутри кластера — поды отправляют на smtp-relay:25
- HashiCorp Vault (hashicorp/vault): standalone и HA (Raft) режимы,
  auto-unseal: k8s Secret (homelab), AWS KMS, GCP CKMS, Azure Key Vault,
  Transit; Vault Agent Injector по умолчанию; Job инициализации + Unsealer
  Deployment для k8s режима; README с полным гайдом по injection в YAML/Helm
- External Secrets Operator (ESO): синхронизирует Vault секреты в k8s Secrets,
  ClusterSecretStore с AppRole auth, README с примерами ExternalSecret в
  YAML манифестах, Helm чартах и ArgoCD

Обновлены: addons.yml (3 новых флага + секции), vault.yml.example
(smtp_relay_password, aws_kms_*, eso_approle_secret_id),
playbooks/addons.yml, Makefile
This commit is contained in:
Sergey Antropoff
2026-04-25 18:31:06 +03:00
parent a209b8a9bf
commit 3765bc87b6
20 changed files with 1599 additions and 0 deletions

View File

@@ -33,6 +33,9 @@ addon_csi_s3: false # CSI S3 Driver (объектное хран
addon_csi_ceph: false # CSI Ceph / Rook-Ceph (distributed block + filesystem storage)
addon_csi_glusterfs: false # CSI GlusterFS Driver (требует внешний GlusterFS + Heketi)
addon_vaultwarden: false # Vaultwarden (self-hosted Bitwarden-совместимый менеджер паролей)
addon_smtp_relay: false # SMTP Relay (Postfix → Yandex/другой SMTP) — для уведомлений из подов
addon_vault: false # HashiCorp Vault (секреты, PKI, динамические credentials)
addon_external_secrets: false # External Secrets Operator → Vault/AWS/GCP (k8s Secret sync)
# ─── NFS Server ───────────────────────────────────────────────────────────────
nfs_exports:
@@ -287,6 +290,37 @@ minio_api_ingress_host: "s3.example.com"
# vaultwarden_smtp_security: "force_tls" # force_tls | starttls | off
# vaultwarden_smtp_username: "user@example.com"
# ─── SMTP Relay ───────────────────────────────────────────────────────────────
# Postfix relay для отправки почты из подов через внешний SMTP (Yandex/Gmail/etc).
# Пароль задаётся в vault.yml: vault_smtp_relay_password
# Использование: SMTP_HOST=smtp-relay.smtp-relay.svc.cluster.local, SMTP_PORT=25
# smtp_relay_host: "smtp.yandex.ru"
# smtp_relay_port: 465
# smtp_relay_username: "sergey@antropoff.ru"
# smtp_relay_from: "vault@antropoff.ru"
# smtp_relay_allowed_sender_domains: "antropoff.ru"
# smtp_relay_mynetworks: "10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.0/8"
# ─── HashiCorp Vault ──────────────────────────────────────────────────────────
# Менеджер секретов. README: addons/vault/README.md
# vault_mode: "standalone" # standalone (1 pod) | ha (3 pods Raft)
# vault_auto_unseal_type: "none" # none | k8s | aws | gcp | azure | transit
# k8s: ключи в Secret (homelab), aws/gcp/azure/transit (production)
# vault_injector_enabled: true # Vault Agent Injector (авто-инжекция в поды)
# vault_ingress_enabled: false
# vault_ingress_host: "vault-hc.example.com"
# vault_storage_size: "10Gi"
# Для AWS KMS unseal (vault.yml): vault_aws_kms_access_key, vault_aws_kms_secret_key
# ─── External Secrets Operator ────────────────────────────────────────────────
# Синхронизирует секреты из Vault/AWS/GCP в k8s Secrets. README: addons/external-secrets/README.md
# Требует предварительно созданного AppRole в Vault (шаги в README).
# external_secrets_vault_url: "http://vault.vault.svc.cluster.local:8200"
# external_secrets_vault_kv_path: "secret"
# external_secrets_vault_role_id: "" # после создания AppRole в Vault
# external_secrets_vault_store_name: "vault-backend"
# Пароль задаётся в vault.yml: vault_eso_approle_secret_id
# ─── etcd backup ──────────────────────────────────────────────────────────────
etcd_backup_dir: "{{ k3s_data_dir }}/server/db/snapshots"
etcd_backup_retention: 5 # сколько снимков хранить

View File

@@ -69,3 +69,22 @@ vault_vaultwarden_smtp_password: "fntwztnkacanpbwa" # пароль SMTP (Y
# ─── CSI GlusterFS / Heketi ────────────────────────────────────────────────────
vault_glusterfs_heketi_secret: "changeme-heketi" # пароль Heketi admin
# ─── SMTP Relay ────────────────────────────────────────────────────────────────
vault_smtp_relay_password: "fntwztnkacanpbwa" # Yandex App Password для sergey@antropoff.ru
# ─── HashiCorp Vault (auto-unseal: aws) ────────────────────────────────────────
# Используется только при vault_auto_unseal_type: aws
vault_aws_kms_access_key: "" # AWS IAM Access Key ID
vault_aws_kms_secret_key: "" # AWS IAM Secret Access Key
# Vault Transit Seal (vault_auto_unseal_type: transit)
vault_transit_seal_token: "" # token для доступа к transit engine другого Vault
# Azure Key Vault unseal (vault_auto_unseal_type: azure)
vault_azure_kv_client_secret: ""
# ─── External Secrets Operator → HashiCorp Vault ───────────────────────────────
# Получить после шага 6 в addons/external-secrets/README.md:
# vault write -f -field=secret_id auth/approle/role/eso-role/secret-id
vault_eso_approle_secret_id: "" # AppRole Secret ID для ESO → Vault