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:
parent
36313e8f6f
commit
ab086a86b4
@ -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
|
||||
|
||||
@ -267,12 +267,22 @@ patches:
|
||||
name: VAULT_SA
|
||||
value:
|
||||
_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
|
||||
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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user