{ "_комментарий": "Профиль контура: всё, что зависит от конкретной инсталляции. Значения здесь — ПРИМЕР. Для реального контура скопируйте файл, подставьте настоящие имена и держите копию вне репозитория.", "model": { "name": "СДЕ Sarex — типовой контур (пример)", "purpose": "Технологический слой типового контура. Имена кластера, узлов, доменов и реестра заменены на примеры. Прикладной слой присутствует только как потребители технологических сервисов — межсервисные связи приложений моделируются отдельно." }, "cluster": { "name": "Кластер k8s-prod", "doc": "clusters//kustomization.yaml. Развёртывание через FluxCD v2 (GitOps)." }, "software": [ { "id": "ss-istio-gw", "name": "Istio Ingress Gateway", "doc": "Ingress-контроллер, публикует контур наружу через NodePort." }, { "id": "ss-istio-mesh", "name": "Istio Service Mesh", "doc": "chart istio-config-contour. Gateway, VirtualService, RequestAuthentication." }, { "id": "ss-certmanager", "name": "cert-manager", "doc": "Выпуск сертификатов. В примере — самоподписанный ClusterIssuer, wildcard на домен контура." }, { "id": "ss-zitadel", "name": "Zitadel", "doc": "chart idp-contour, ns zitadel. Основной поставщик идентичности." }, { "id": "ss-vault", "name": "Vault + Agent Injector", "doc": "chart vault-contour, ns vault. Единственный механизм доставки секретов, путь secrets/data/apps//postgres." }, { "id": "ss-postgres", "name": "PostgreSQL", "doc": "chart postgresql-contour, ns postgresql. PVC на сетевом хранилище." }, { "id": "ss-redis", "name": "Redis", "doc": "Разворачивается не во всех контурах и не для всех приложений." }, { "id": "ss-kafka", "name": "Kafka", "doc": "chart kafka-contour, ns kafka." }, { "id": "ss-rabbit", "name": "RabbitMQ", "doc": "chart rabbitmq-contour, ns rabbitmq." }, { "id": "ss-camunda", "name": "Camunda Platform", "doc": "chart camunda-contour, ns camunda. Воркеры прикладных сервисов подключаются к Zeebe-gateway как job-workers, HTTP-часть ходит в Operate. Переменные ZEEBE_*/CAMUNDA_* приходят из k8s-секрета, поэтому в манифестах не видны." } ], "camunda_sub": ["Zeebe", "Zeebe Gateway", "Operate", "Tasklist", "Optimize", "Identity", "Connectors"], "external": [ { "id": "nd-s3", "name": "s3.example.com — объектное хранилище", "doc": "Внешнее по отношению к кластеру.", "realizes": "ts-object" }, { "id": "nd-nfs", "name": "Сетевое хранилище (StorageClass)", "doc": "Класс хранения для PVC.", "serves": "ss-postgres" }, { "id": "nd-gitea", "name": "Git-сервер контура", "doc": "Источник манифестов для Flux.", "serves": "cluster" }, { "id": "nd-cr", "name": "registry.example.com", "doc": "Реестр Helm-чартов (OCI) и образов контейнеров.", "serves": "cluster", "artifacts": [ { "id": "ar-charts", "name": "Helm-чарты (OCI)" }, { "id": "ar-images", "name": "Образы контейнеров" } ] } ], "frontend_node": { "id": "nd-frontend", "name": "frontend-node-01", "doc": "Выделенный узел, к которому ingress-gateway прибит через nodeSelector.", "assigned_to": "ss-istio-gw" }, "_узлы": "Группы узлов из инвентаря серверов. runs_software — id из software/external, runs_apps — имена приложений; группа с \"runs_apps\": \"*\" забирает все приложения, не заявленные другими группами. Необязательный hosts позволяет раскрыть группу до отдельных хостов, если такой список появится.", "node_groups": [ { "id": "ng-processing", "name": "Группа узлов processing (Сервера приложений)", "runs_apps": ["processing"] }, { "id": "ng-app", "name": "Группа узлов generic (Сервера приложений)", "runs_apps": "*" }, { "id": "ng-storage", "name": "Объектное хранилище", "runs_software": ["nd-s3"] }, { "id": "ng-db", "name": "Группа узлов DB (Базы данных)", "runs_software": ["ss-postgres"] }, { "id": "ng-k8s", "name": "Группа узлов K8s (Поддерживающая инфраструктура)", "runs_software": ["ss-istio-gw", "ss-istio-mesh", "ss-certmanager", "ss-zitadel", "ss-vault", "ss-redis", "ss-kafka", "ss-rabbit", "ss-camunda"] }, { "id": "ng-repo", "name": "Репозиторий компонентов", "doc": "Реестр Helm-чартов и образов + Git-сервер контура, из которого Flux читает манифесты. Состав требует подтверждения.", "runs_software": ["nd-cr", "nd-gitea"] }, { "id": "ng-cad", "name": "CAD ферма", "doc": "Состав не выведен из репозитория — заполнить вручную: какие сервисы и ПО работают на этой группе узлов." } ], "services": [ { "id": "ts-ingress", "name": "Маршрутизация HTTPS-трафика", "realizers": ["ss-istio-gw", "ss-istio-mesh"], "key": "istio" }, { "id": "ts-tls", "name": "Выпуск TLS-сертификатов", "realizers": ["ss-certmanager"], "key": null, "serves_software": "ss-istio-gw" }, { "id": "ts-oidc", "name": "Аутентификация OIDC", "realizers": ["ss-zitadel"], "key": "oidc" }, { "id": "ts-secrets", "name": "Управление секретами", "realizers": ["ss-vault"], "key": "vault" }, { "id": "ts-rdbms", "name": "Реляционное хранилище", "realizers": ["ss-postgres"], "key": "postgres" }, { "id": "ts-cache", "name": "Кэш", "realizers": ["ss-redis"], "key": "redis" }, { "id": "ts-events", "name": "Событийная шина", "realizers": ["ss-kafka"], "key": "kafka" }, { "id": "ts-amqp", "name": "Очередь сообщений AMQP", "realizers": ["ss-rabbit"], "key": "rabbitmq" }, { "id": "ts-bpmn", "name": "Оркестрация процессов BPMN", "realizers": ["ss-camunda"], "key": "camunda" }, { "id": "ts-object", "name": "Объектное хранилище", "realizers": ["nd-s3"], "key": "s3" } ] }