add regcred namespace propagation

This commit is contained in:
Kochetkov S 2026-07-20 12:03:50 +03:00
parent 417a2bdb77
commit e445c6689b
4 changed files with 1033 additions and 975 deletions

View File

@ -244,12 +244,67 @@ valkey_users:
```yaml
namespaces:
- name: pulse
manage: true
labels:
environment: stage
annotations:
managed-by: terraform
```
`manage` по умолчанию равен `true`. Для уже существующего неймспейс укажите
`manage: false`: модуль не будет пытаться создать или изменить его, но запись можно использовать
как цель для других стеков.
#### Раскатка общего regcred в неймспейс
Единый источник учётных данных —
`environments.<env>.vault.common.regcred.dockerconfigjson` в зашифрованном
`infrastructure-secrets.yaml`. Из него независимо работают два направления:
- vault-платформа записывает значение в Vault, если включён `vault.features.create_regcred`;
- стек `live/secrets` создаёт секрет `regcred` типа `kubernetes.io/dockerconfigjson`
в каждом неймспейс с `image_pull_secret: true`.
Для уже существующих неймспейс:
```yaml
environments:
yc-k8s-test:
namespaces:
- name: django
manage: false
image_pull_secret: true
- name: issues
manage: false
image_pull_secret: true
```
`manage: false` обязателен, если неймспейс уже существует и не находится в state
`live/namespace`: иначе terraform попытается создать его заново.
Если `regcred` в целевом неймспейс уже существует, перед первым apply его нужно один раз
принять в state стека `live/secrets`:
```bash
cd live/secrets
terragrunt import \
'kubernetes_secret.without_ignore["django/regcred"]' \
django/regcred
terragrunt import \
'kubernetes_secret.without_ignore["issues/regcred"]' \
issues/regcred
terragrunt plan
terragrunt apply
```
Если секрета ещё нет, импорт не требуется: apply создаст его. После одноразового импорта
дальнейшие изменения общего `dockerconfigjson` раскатываются обычным apply. Для k8s fan-out
включать `vault.features.create_regcred` не требуется — этот флаг управляет только записью
в Vault.
## Использование
### Локальный запуск

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
# Создание namespace'ов в Kubernetes
# Создание неймспейс в kubernetes
resource "kubernetes_namespace" "this" {
for_each = { for ns in var.namespaces : ns.name => ns }
for_each = { for ns in var.namespaces : ns.name => ns if ns.manage }
metadata {
name = each.value.name

View File

@ -4,8 +4,11 @@ variable "namespaces" {
name = string
labels = optional(map(string), {})
annotations = optional(map(string), {})
# When true, the secrets stack rolls the common regcred (dockerconfigjson)
# into this namespace. Not used by the namespace module itself.
# false для уже существующего неймспейс: он остаётся вне state этого модуля,
# но запись доступна другим стекам как декларативная цель.
manage = optional(bool, true)
# true раскатывает общий regcred в неймспейс через стек secrets.
# Сам модуль namespace это поле не использует.
image_pull_secret = optional(bool, false)
}))
}