Топология k3s: 1 мастер + 2 воркера (убран k3s-worker-3 с томом).
Vault ↔ k3s. Vault живёт в compose, вне кластера, поэтому получает
статический IP 172.28.0.13, DNS-мост в namespace vault и token reviewer
(SA vault-auth + system:auth-delegator). Ansible включает auth/kubernetes,
передавая адрес apiserver, CA и JWT ревьюера явно, и заводит политику с
ролями. Секрет token reviewer'а читается целиком в JSON: вариант
-o jsonpath={.data.ca\.crt} НЕ работает — модуль command разбирает строку
через shlex, съедает обратный слэш, kubectl возвращает пустую строку с
кодом 0, и отказ остаётся незамеченным до падения vault write.
Синхронизация репозитория в gitea. Нужное подмножество путей (замыкание
ссылок clusters/aero) едет архивом на хост и коммитится там: gitea не
публикуется дальше самого хоста, контур остаётся замкнутым. flux-bootstrap
вынесен в отдельную волну — до неё Vault получает auth/kubernetes, а
репозиторий наполняется, иначе первая реконсиляция падает на пустом репо.
Инфраструктура: vault-agent-injector (чарт vault-contour в режиме внешнего
Vault), local-path-provisioner взамен встроенного в k3s (--disable=
local-storage; путь данных прежний), rabbitmq и minio с кредами из Vault.
Выход наружу: порты 80/443 k3s-server опубликованы (istio ingressgateway
занимает эти hostPort), общий contour-gateway на wildcard-хост, сертификат
Let's Encrypt через http01. Имена в сертификате перечислены явно —
http01 не выдаёт wildcard, для них нужен dns01.
Разорваны два дедлока Flux: infra-configs больше не зависит от
infra-controllers (издатели не должны зависеть от здоровья чартов, которые
их используют), istio-config получил disableWait.
Модули ядра iptable_nat и смежные грузятся на хосте: ноды k3s —
контейнеры, istio-init правит iptables через ядро хоста, а на RED OS 8
(nf_tables) legacy-модули не загружены, из-за чего любой под с
istio-injection навсегда вставал в Init:Error.
Собственные Gateway/VirtualService/Certificate чартов rabbitmq и dashboard
отключены — маршрутизация описана централизованно. У rabbitmq это сделано
postRenderers, а не values: kustomize нормализует null в {}, а пустую карту
Helm сливает с дефолтами, возвращая их целиком.
50 lines
2.0 KiB
YAML
50 lines
2.0 KiB
YAML
# Vault Agent Injector контура aero.
|
||
#
|
||
# Тот же чарт vault-contour, что и в остальных кластерах (это официальный
|
||
# hashicorp/vault-helm, перепубликованный в cr.yandex), но в режиме «внешний
|
||
# Vault»: сервер Vault здесь живёт в docker-compose, а в кластер ставится
|
||
# ТОЛЬКО injector.
|
||
#
|
||
# global.externalVaultAddr сам по себе отключает деплой vault-сервера — это
|
||
# документированное поведение чарта, отдельный server.enabled=false не нужен.
|
||
# Адрес указывает на DNS-мост (Service vault в namespace vault), который
|
||
# заводит ansible: k3s/manifests/vault/bridge-vault.yaml.
|
||
#
|
||
# Имя релиза — vault-injector, а не vault (как в прод-кластерах): чарт
|
||
# составляет имена ресурсов из имени релиза, и релиз `vault` рисковал бы
|
||
# перекрыть Service `vault` моста, оставив Vault недоступным.
|
||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||
kind: HelmRelease
|
||
metadata:
|
||
name: vault-injector
|
||
namespace: vault
|
||
spec:
|
||
interval: 10m
|
||
chart:
|
||
spec:
|
||
chart: vault-contour
|
||
version: "0.2.3"
|
||
sourceRef:
|
||
kind: HelmRepository
|
||
name: yc-oci-charts
|
||
namespace: flux-system
|
||
interval: 10m
|
||
install:
|
||
createNamespace: true
|
||
remediation:
|
||
retries: 3
|
||
upgrade:
|
||
remediation:
|
||
retries: 3
|
||
values:
|
||
global:
|
||
# Отключает vault-сервер и задаёт адрес внешнего Vault для агентов.
|
||
externalVaultAddr: http://vault.vault.svc.cluster.local:8200
|
||
# Образы чарта лежат в приватном cr.yandex; секрет создаёт роль
|
||
# sarex_stack (registry_secrets), см. registry-secret.yaml.j2.
|
||
imagePullSecrets:
|
||
- name: regcred
|
||
tlsDisable: true
|
||
injector:
|
||
enabled: true
|