vault зависит от localpv-provisioner через dependsOn (кросс-namespace).
Примечания
HTTPRoute цепляется к https-листенеру: http-листенер envoy-internal принимает маршруты только из ns network (from: Same). Сертификат подписан ClusterIssuer internal-ca (самоподписанный CA) — его нужно импортировать в доверенные на клиенте, иначе браузер будет ругаться.
После рестарта пода Vault остаётся sealed: распечатывается вручную ключами Shamir (5 долей, порог 3). Ключи и root token кладём в sops-секрет в репе (отдельным PR) + офлайн-копия.
TLS на листенере Vault пока выключен (внутрикластерный трафик, ClusterIP). Включим отдельным шагом сертификатом от internal-ca + caBundle в ClusterSecretStore.
Что НЕ входит в этот MR
external-secrets + ClusterSecretStore + первый ExternalSecret (следующий шаг);
init/unseal Vault и настройка kv-v2 + kubernetes-auth (руками после мёржа);
flux-вебхук (Receiver + секрет + маршрут).
После мёржа
just kube reconcile
KUBECONFIG=./kubeconfig kubectl -n storage get sc,deploy
KUBECONFIG=./kubeconfig kubectl -n security get sts,pvc,svc,httproute
KUBECONFIG=./kubeconfig kubectl -n security exec -it vault-0 -- vault operator init -key-shares=5 -key-threshold=3
## Зачем
1. В кластере **не было ни одного StorageClass** — любой PVC оставался `Pending`, то есть персистентных приложений быть не могло.
2. Под секреты приложений выбираем Vault (self-hosted, без интернет-зависимости) + External Secrets Operator; Vault'у под integrated storage (raft) нужен PVC.
## Что добавлено
**`kubernetes/apps/storage/`** — OpenEBS Dynamic Local PV Provisorer (ns `storage`):
- `openebs-hostpath` становится StorageClass **по умолчанию**, тома в `/var/openebs/local` на ноде пода;
- chart `localpv-provisioner` 4.6.0 из `https://openebs.github.io/dynamic-localpv-provisioner`.
**`kubernetes/apps/security/`** — HashiCorp Vault (ns `security`):
- chart `vault` 0.34.1 (Vault 2.0.4) из `https://helm.releases.hashicorp.com`;
- режим standalone + raft на PVC 5 Gi (`storageClass: openebs-hostpath`), UI включён, Service ClusterIP;
- `authDelegator` включён — нужен для auth-метода `kubernetes`, через который external-secrets будет получать токен;
- injector и csi-provider выключены (не нужны);
- HTTPRoute `vault.grachevko.ru` → `envoy-internal`, сервис `vault-ui:8200`.
`vault` зависит от `localpv-provisioner` через `dependsOn` (кросс-namespace).
## Примечания
- HTTPRoute цепляется к **https**-листенеру: http-листенер `envoy-internal` принимает маршруты только из ns `network` (`from: Same`). Сертификат подписан ClusterIssuer `internal-ca` (самоподписанный CA) — его нужно импортировать в доверенные на клиенте, иначе браузер будет ругаться.
- После рестарта пода Vault остаётся sealed: распечатывается вручную ключами Shamir (5 долей, порог 3). Ключи и root token кладём в sops-секрет в репе (отдельным PR) + офлайн-копия.
- TLS на листенере Vault пока выключен (внутрикластерный трафик, ClusterIP). Включим отдельным шагом сертификатом от `internal-ca` + `caBundle` в ClusterSecretStore.
## Что НЕ входит в этот MR
- external-secrets + ClusterSecretStore + первый ExternalSecret (следующий шаг);
- init/unseal Vault и настройка kv-v2 + kubernetes-auth (руками после мёржа);
- flux-вебхук (Receiver + секрет + маршрут).
## После мёржа
```sh
just kube reconcile
KUBECONFIG=./kubeconfig kubectl -n storage get sc,deploy
KUBECONFIG=./kubeconfig kubectl -n security get sts,pvc,svc,httproute
KUBECONFIG=./kubeconfig kubectl -n security exec -it vault-0 -- vault operator init -key-shares=5 -key-threshold=3
```
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Зачем
Pending, то есть персистентных приложений быть не могло.Что добавлено
kubernetes/apps/storage/— OpenEBS Dynamic Local PV Provisorer (nsstorage):openebs-hostpathстановится StorageClass по умолчанию, тома в/var/openebs/localна ноде пода;localpv-provisioner4.6.0 изhttps://openebs.github.io/dynamic-localpv-provisioner.kubernetes/apps/security/— HashiCorp Vault (nssecurity):vault0.34.1 (Vault 2.0.4) изhttps://helm.releases.hashicorp.com;storageClass: openebs-hostpath), UI включён, Service ClusterIP;authDelegatorвключён — нужен для auth-методаkubernetes, через который external-secrets будет получать токен;vault.grachevko.ru→envoy-internal, сервисvault-ui:8200.vaultзависит отlocalpv-provisionerчерезdependsOn(кросс-namespace).Примечания
envoy-internalпринимает маршруты только из nsnetwork(from: Same). Сертификат подписан ClusterIssuerinternal-ca(самоподписанный CA) — его нужно импортировать в доверенные на клиенте, иначе браузер будет ругаться.internal-ca+caBundleв ClusterSecretStore.Что НЕ входит в этот MR
После мёржа
Pull request closed