Processing: S3 задачам через Vault и секрет реестра dockerhub

Два шага к тому, чтобы под задачи наконец поехал.

--- 1. S3 через vault-аннотации, а не Secret в namespace ---

Аннотации созданного пода показали точное поведение движка:
  agent-inject-secret-yc-s3:   <VAULT_MOUNT_PATH>
  agent-inject-template-yc-s3: {{- with secret "<VAULT_MOUNT_PATH>" -}}
                               {{ 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.
This commit is contained in:
emelinda 2026-08-10 00:22:48 +03:00
parent 36313e8f6f
commit ab086a86b4
2 changed files with 36 additions and 1 deletions

View File

@ -89,6 +89,13 @@ registry_secrets:
- {name: regcred, namespace: processing} - {name: regcred, namespace: processing}
- {name: regcred, namespace: workspaces} - {name: regcred, namespace: workspaces}
- {name: regcred, namespace: bim} - {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 compose up -d). Требует запущенной службы docker и
# docker login в cr.yandex — по умолчанию выключено. # docker login в cr.yandex — по умолчанию выключено.
@ -381,6 +388,24 @@ vault_app_secrets:
access_key_id: "{{ sarex_minio_k8s_user }}" access_key_id: "{{ sarex_minio_k8s_user }}"
secret_access_key: "{{ sarex_secrets.SAREX_MINIO_ROOT_PASSWORD }}" secret_access_key: "{{ sarex_secrets.SAREX_MINIO_ROOT_PASSWORD }}"
region: us-east-1 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 --------------------------------------- # --- Секреты приложения measurements ---------------------------------------
# Структура задана vault-шаблоном в apps/measurements/base/backend.yaml: он # Структура задана vault-шаблоном в apps/measurements/base/backend.yaml: он
# собирает из этих ключей одну переменную S3_JSON_SETTINGS и читает endpoint # собирает из этих ключей одну переменную S3_JSON_SETTINGS и читает endpoint

View File

@ -267,12 +267,22 @@ patches:
name: VAULT_SA name: VAULT_SA
value: value:
_default: processing-vault _default: processing-vault
# VAULT_MOUNT_PATH — вопреки имени НЕ корень KV, а ПОЛНЫЙ путь секрета:
# движок подставляет значение в шаблон целиком. Проверено по аннотациям
# созданного пода задачи:
# agent-inject-secret-yc-s3: <VAULT_MOUNT_PATH>
# agent-inject-template-yc-s3:
# {{- with secret "<VAULT_MOUNT_PATH>" -}}
# {{ index .Data.data "yc-s3-service-account.json" }}
# Отсюда два следствия: путь пишется в форме чтения KV v2 (с /data/), а в
# секрете обязан быть ключ с именем ФАЙЛА — yc-s3-service-account.json.
# Сам секрет кладёт ansible, vault_app_secrets.
- op: add - op: add
path: /spec/values/services/backend/envs/- path: /spec/values/services/backend/envs/-
value: value:
name: VAULT_MOUNT_PATH name: VAULT_MOUNT_PATH
value: value:
_default: secrets _default: secrets/data/apps/processing/yc-s3
# S3 из Vault, как у api. # S3 из Vault, как у api.
- op: add - op: add