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: 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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user