From ab086a86b4cd5a9c7353fded0692e4126a46b075 Mon Sep 17 00:00:00 2001 From: emelinda Date: Mon, 10 Aug 2026 00:22:48 +0300 Subject: [PATCH] =?UTF-8?q?Processing:=20S3=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B0=D0=BC=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20Vault=20?= =?UTF-8?q?=D0=B8=20=D1=81=D0=B5=D0=BA=D1=80=D0=B5=D1=82=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D1=80=D0=B0=20dockerhub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Два шага к тому, чтобы под задачи наконец поехал. --- 1. S3 через vault-аннотации, а не Secret в namespace --- Аннотации созданного пода показали точное поведение движка: agent-inject-secret-yc-s3: agent-inject-template-yc-s3: {{- with secret "" -}} {{ index .Data.data "yc-s3-service-account.json" }} secret-volume-path-yc-s3: /etc/sarex/yc-s3 То есть VAULT_MOUNT_PATH вопреки имени — не корень KV, а ПОЛНЫЙ путь секрета, а имя ключа в нём должно совпадать с именем файла. Путь исправлен на secrets/data/apps/processing/yc-s3 (форма чтения KV v2), и заведён соответствующий секрет с ключом yc-s3-service-account.json. Инжекция уже подтверждена на живом поде: agent-inject-status: injected, том vault-secrets-custom-0, Secret yc-s3 в namespace больше не монтируется. --- 2. Секрет реестра для подов задач --- Под задачи вставал в Init:0/1: Unable to retrieve some image pull secrets (dockerhub) Движок проставляет Job'ам imagePullSecrets: dockerhub, и это имя зашито в бинарник — настраиваемой переменной нет, из pull-настроек существует только DEFAULT_IMAGE_PULL_POLICY. Поэтому заводим секрет с таким именем в namespace задач через существующий механизм registry_secrets; содержимое то же, что у regcred. --- aero/roles/sarex_stack/defaults/main.yml | 25 ++++++++++++++++++++++++ apps/processing/aero/kustomization.yaml | 12 +++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) 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