--- # Патч message-hub для контура УГМК. # # ВНИМАНИЕ: envs — список, kustomize заменяет его ЦЕЛИКОМ (JSON merge patch), # поэтому здесь продублирован весь набор из apps/message-hub/base/message-hub.yaml. # podAnnotations — map, мержится по ключам, поэтому переопределён только # agent-inject-template-message-hub-kafka; остальные берутся из base. apiVersion: helm.toolkit.fluxcd.io/v2 kind: HelmRelease metadata: name: message-hub namespace: message-hub spec: values: services: backend: # base: production_24425472 от 15.02.2026 — 18 production-релизов назад. # Здесь актуальный production от 31.07.2026. image: name: _default: cr.yandex/crp3ccidau046kdj8g9q/message-hub:production_e8010fe4 envs: - name: WORKER_TIMEOUT value: _default: "60" - name: PYTHONPATH value: _default: "src" - name: SETTINGS_MAX_RETRIES value: _default: "1" # base: '{"planning": "pm", "assets": "assets_broadcast", "project_entity": "issues_broadcast"}' # Два исправления: # 1. ключ project_entity невалиден — TopicsType (src/enums.py) знает только # assets / planning / issues / resources_updated / resources_deleted, # на прочих валидатор check_topics_keys кидает ValueError при старте. # Консьюмер лежит в project_entity.py, но подписан на TopicsType.issues. # 2. planning был "pm", а django публикует в "message-hub-stage" # (KAFKA_TOPICS, apps/django/d8-ugmk-prod/backend.yaml) — продюсер # и консьюмер сидели на разных топиках. - name: SETTINGS_TOPICS value: _default: '{"planning": "message-hub-stage", "assets": "assets_broadcast", "issues": "issues_broadcast"}' # В base нет, дефолт True. S3 контура (s3.uralmine.com) отдаёт # самоподписанный сертификат — тот же случай, что S3_VERIFY=False у pm. # Флаг общий: гасит проверку TLS сразу и для S3, и для всех HTTP-клиентов. - name: SETTINGS_VERIFY_SSL value: _default: "0" # base: http://backend-service.pm.svc.cluster.local:8000 — сервис pm # называется backend-svc (apps/pm/base/backend.yaml:91). - name: SAREX_BASE_HOST value: _default: "http://backend-svc.pm.svc.cluster.local:8000" # В base нет. Без него ServiceConfig с префиксом PM_ уходит # в дефолт http://localhost:8001. В dsinv и brusnika задан. - name: PM_HOST value: _default: "http://backend-svc.pm.svc.cluster.local:8000" # Имена сверены с infrastructure/istio-config/d8-ugmk-prod/istio-config.yaml. - name: EAV_HOST value: _default: "http://backend-svc.eav.svc.cluster.local:80" - name: ISSUES_HOST value: _default: "http://backend-svc.issues.svc.cluster.local:80" - name: CACHE_HOST value: _default: "redis.pm.svc.cluster.local" - name: CACHE_PORT value: _default: "6379" - name: CACHE_SSL value: _default: "0" # Подтверждено вживую (kubectl exec в kafka-kafka-contour-controller-0, # server.properties): реальный CLIENT-листенер (SASL_SSL) — порт 9092 # на обычном (не headless) сервисе kafka-kafka-contour. Порт 9094 — # это INTERNAL (SASL_PLAINTEXT, inter-broker), не для приложений; # 9093 — CONTROLLER (raft, свой API, METADATA не поддерживает). # Сертификат брокера (SAN) покрывает голое имя kafka-kafka-contour, # но НЕ голое имя headless-сервиса (только *. с одним # префиксом-подом) — поэтому именно обычный сервис, не headless. # Задано переменной, а не vault-шаблоном, специально: ошибка в шаблоне # блокирует старт пода (agent-init-first), ошибка в env — только логи. - name: KAFKA_HOST value: _default: "kafka-kafka-contour.kafka.svc.cluster.local" - name: KAFKA_PORT value: _default: "9092" # listeners.client.protocol: SASL_SSL — без CA соединение не поднимется. - name: KAFKA_SSL_CAFILE value: _default: "/usr/local/share/ca-certificates/kafka.crt" # В секрете pm security_protocol = SASL_PLAINTEXT — верно для того, # как им пользуется сам pm, но реальный листенер (см. выше) требует # SASL_SSL. Фиксируем тут, а не из вольта, чтобы не переписать это # значение обратно на PLAINTEXT — по той же причине, что и KAFKA_HOST/PORT. - name: KAFKA_SECURITY_PROTOCOL value: _default: "SASL_SSL" volumes: _default: - name: kafka-ca-cert mountPath: _default: /usr/local/share/ca-certificates/kafka.crt subPath: _default: kafka.crt readOnly: _default: true configMap: name: _default: kafka-ca-cert items: - key: kafka.crt path: _default: kafka.crt podAnnotations: _default: # Из base убраны KAFKA_HOST/KAFKA_PORT/KAFKA_SECURITY_PROTOCOL: файл # /vault/secrets/message-hub-kafka подгружается через `set -a; . file`, # то есть переписывает переменные окружения поверх envs. vault.hashicorp.com/agent-inject-secret-message-hub-kafka: secrets/data/kafka/apps/pm vault.hashicorp.com/agent-inject-template-message-hub-kafka: |- {{- with secret "secrets/data/kafka/apps/pm" -}} KAFKA_USERNAME={{ index .Data.data "username" }} KAFKA_PASSWORD={{ index .Data.data "password" }} KAFKA_SASL_MECHANISM={{ index .Data.data.auth "sasl_mechanism" }} {{- end -}}