diff --git a/aero/roles/sarex_stack/defaults/main.yml b/aero/roles/sarex_stack/defaults/main.yml index 30840e0..f94d4b9 100644 --- a/aero/roles/sarex_stack/defaults/main.yml +++ b/aero/roles/sarex_stack/defaults/main.yml @@ -89,6 +89,13 @@ registry_secrets: - {name: regcred, namespace: processing} - {name: regcred, namespace: workspaces} - {name: regcred, namespace: bim} + # Поды задач workflows. Имя dockerhub выбрано не нами: движок проставляет + # его создаваемым Job'ам жёстко, строка зашита в бинарник, настраиваемой + # переменной нет (из pull-настроек есть только DEFAULT_IMAGE_PULL_POLICY). + # Без него под задачи встаёт в Init:0/1 с + # Unable to retrieve some image pull secrets (dockerhub) + # Содержимое то же, что у regcred, — доступ в тот же cr.yandex. + - {name: dockerhub, namespace: processing} # Поднимать стек (docker compose up -d). Требует запущенной службы docker и # docker login в cr.yandex — по умолчанию выключено. @@ -381,6 +388,24 @@ vault_app_secrets: access_key_id: "{{ sarex_minio_k8s_user }}" secret_access_key: "{{ sarex_secrets.SAREX_MINIO_ROOT_PASSWORD }}" region: us-east-1 + # S3 для ПОДОВ ЗАДАЧ workflows — отдельно от секрета самого движка. + # + # Движок (VAULT_USE=true) вешает на создаваемый Job аннотации vault-agent и + # подставляет VAULT_MOUNT_PATH в шаблон как полный путь секрета, а имя ключа + # берёт равным имени файла. Поэтому здесь ключ называется именно + # yc-s3-service-account.json, а не как-нибудь читаемо, и путь обязан + # совпадать с VAULT_MOUNT_PATH в apps/processing/aero. + # + # Содержимое — тот же JSON, что движок получает в /vault/secrets/processing-s3, + # только одной строкой: агент кладёт значение ключа в файл как есть. + - path: secrets/apps/processing/yc-s3 + data: + yc-s3-service-account.json: >- + {"host": "http://minio.minio.svc.cluster.local:9000", + "bucket": "{{ sarex_django_s3_bucket }}", + "access_key_id": "{{ sarex_minio_k8s_user }}", + "secret_access_key": "{{ sarex_secrets.SAREX_MINIO_ROOT_PASSWORD }}", + "region": "us-east-1", "verify": false} # --- Секреты приложения measurements --------------------------------------- # Структура задана vault-шаблоном в apps/measurements/base/backend.yaml: он # собирает из этих ключей одну переменную S3_JSON_SETTINGS и читает endpoint diff --git a/apps/processing/aero/kustomization.yaml b/apps/processing/aero/kustomization.yaml index d4e957f..f893903 100644 --- a/apps/processing/aero/kustomization.yaml +++ b/apps/processing/aero/kustomization.yaml @@ -267,12 +267,22 @@ patches: name: VAULT_SA value: _default: processing-vault + # VAULT_MOUNT_PATH — вопреки имени НЕ корень KV, а ПОЛНЫЙ путь секрета: + # движок подставляет значение в шаблон целиком. Проверено по аннотациям + # созданного пода задачи: + # agent-inject-secret-yc-s3: + # agent-inject-template-yc-s3: + # {{- with secret "" -}} + # {{ index .Data.data "yc-s3-service-account.json" }} + # Отсюда два следствия: путь пишется в форме чтения KV v2 (с /data/), а в + # секрете обязан быть ключ с именем ФАЙЛА — yc-s3-service-account.json. + # Сам секрет кладёт ansible, vault_app_secrets. - op: add path: /spec/values/services/backend/envs/- value: name: VAULT_MOUNT_PATH value: - _default: secrets + _default: secrets/data/apps/processing/yc-s3 # S3 из Vault, как у api. - op: add