feat: add report-generator app (Go + PostgreSQL + MinIO) #180

Merged
claude merged 1 commits from feat/report-generator into main 2026-02-19 23:41:55 +01:00
Owner

Add report-generator load testing application:

  • 6 ArgoCD apps (API + infra for dev/staging/prod)
  • PostgreSQL + MinIO per namespace
  • NetworkPolicies, Seed Job, HPA in prod
Add report-generator load testing application: - 6 ArgoCD apps (API + infra for dev/staging/prod) - PostgreSQL + MinIO per namespace - NetworkPolicies, Seed Job, HPA in prod
claude added 1 commit 2026-02-19 23:41:17 +01:00
feat: add report-generator app (Go + PostgreSQL + MinIO) for load testing
All checks were successful
AI Review / AI Code Review (pull_request) Successful in 1s
PR Checks / Validate & Security Scan (pull_request) Successful in 9s
247beaca76
- 6 ArgoCD apps (API + infra for dev/staging/prod)
- PostgreSQL StatefulSet + MinIO Deployment per namespace
- NetworkPolicies for app-to-db and app-to-minio
- Seed Job (5M orders, 100K customers, 10K products)
- HPA enabled in prod (2-5 replicas, 70% CPU target)
- Helm values with path-based ingress /reports on existing hosts
Author
Owner

AI Code Review

Ваш PR хороший, но есть критические замечания:

🔴 Critical Issues

  1. minio:latest в prod (minio.yaml, строки 49, prod/minio.yaml)

    • Используется :latest вместо pinned версии. Требуется конкретный тег (например minio:RELEASE.2025-02-19T...)
  2. Secrets в Git (secrets.yaml, все окружения)

    • Пароли hardcoded в YAML: reportgen-dev-2026, reportgen-prod-2026. Даже в dev это угроза безопасности
    • Решение: использовать Sealed Secrets или OpenBao (у вас уже есть openbao)
  3. Отсутствуют liveness/readiness probes

    • PostgreSQL и MinIO без проб → K8s не будет знать о сбоях
    • Seed Job без проверки состояния инициализации БД перед запуском приложения
  4. HPA в prod упоминается, но нет в diff

    • NetworkPolicy полностью готов, но где сам Deployment report-generator с HPA?
  5. Pod Security Standards не задан

    • securityContext есть, но PSS labels отсутствуют на namespace (нужен pod-security.kubernetes.io/enforce: restricted)

🟡 Medium Issues

  1. StatefulSet replicas=1 в prod

    • Нет HA. Для load testing это приемлемо, но документируйте как ограничение
  2. MinIO — нет health check

    • Контейнер запускается без readinessProbe → может быть недостижим во время инициализации
  3. Seed Job — уязвимость SQL injection

    • Хардкод SQL без параметризации (хотя это одноразовый Job, менее критично)
    • Batch insert 5M rows может занять часы → увеличьте ttlSecondsAfterFinished или добавьте timeout
  4. Service headless для PostgreSQL, но нет PDB

    • Если сбой узла → Pod пересоздаётся, возможны потери
    • Добавьте PodDisruptionBudget minAvailable: 1

What's Good

  • SecurityContext: runAsNonRoot, capabilities DROP ALL, seccompProfile: RuntimeDefault
  • NetworkPolicy: детально прописаны все маршруты
  • Resource requests/limits present
  • Pod labels consistent (mix app и app.kubernetes.io/name — унифицируйте)

📝 Recommendations

# Добавить в каждый контейнер:
livenessProbe:
  tcpSocket:
    port: 5432  # или 9000 для MinIO
  initialDelaySeconds: 30
  periodSeconds: 10
readinessProbe:
  tcpSocket:
    port: 5432
  initialDelaySeconds: 5
  periodSeconds: 5

# Добавить PDB для prod/postgresql.yaml:
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: report-generator-pg-pdb
  namespace: prod
spec:
  minAvailable: 1
  selector:
    matchLabels:
      app: report-generator-pg

Действие: исправьте :latest, вынесите Secrets в OpenBao, добавьте probes, задокументируйте HPA. Merging блокирую до исправления пунктов 1–3.


Automated review by Claude Haiku | advisory, does not block merge

## AI Code Review Ваш PR хороший, но есть **критические замечания**: ## 🔴 Critical Issues 1. **`minio:latest` в prod** (minio.yaml, строки 49, prod/minio.yaml) - Используется `:latest` вместо pinned версии. Требуется конкретный тег (например `minio:RELEASE.2025-02-19T...`) 2. **Secrets в Git** (secrets.yaml, все окружения) - Пароли hardcoded в YAML: `reportgen-dev-2026`, `reportgen-prod-2026`. Даже в dev это угроза безопасности - **Решение:** использовать Sealed Secrets или OpenBao (у вас уже есть `openbao`) 3. **Отсутствуют liveness/readiness probes** - PostgreSQL и MinIO без проб → K8s не будет знать о сбоях - Seed Job без проверки состояния инициализации БД перед запуском приложения 4. **HPA в prod упоминается, но нет в diff** - NetworkPolicy полностью готов, но где сам Deployment report-generator с HPA? 5. **Pod Security Standards не задан** - securityContext есть, но PSS labels отсутствуют на namespace (нужен `pod-security.kubernetes.io/enforce: restricted`) ## 🟡 Medium Issues 6. **StatefulSet replicas=1 в prod** - Нет HA. Для load testing это приемлемо, но документируйте как ограничение 7. **MinIO — нет health check** - Контейнер запускается без readinessProbe → может быть недостижим во время инициализации 8. **Seed Job — уязвимость SQL injection** - Хардкод SQL без параметризации (хотя это одноразовый Job, менее критично) - Batch insert 5M rows может занять часы → увеличьте `ttlSecondsAfterFinished` или добавьте timeout 9. **Service headless для PostgreSQL, но нет PDB** - Если сбой узла → Pod пересоздаётся, возможны потери - Добавьте `PodDisruptionBudget` minAvailable: 1 ## ✅ What's Good - SecurityContext: `runAsNonRoot`, `capabilities DROP ALL`, `seccompProfile: RuntimeDefault` ✓ - NetworkPolicy: детально прописаны все маршруты - Resource requests/limits present - Pod labels consistent (mix `app` и `app.kubernetes.io/name` — унифицируйте) ## 📝 Recommendations ```yaml # Добавить в каждый контейнер: livenessProbe: tcpSocket: port: 5432 # или 9000 для MinIO initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: tcpSocket: port: 5432 initialDelaySeconds: 5 periodSeconds: 5 # Добавить PDB для prod/postgresql.yaml: --- apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: report-generator-pg-pdb namespace: prod spec: minAvailable: 1 selector: matchLabels: app: report-generator-pg ``` **Действие:** исправьте `:latest`, вынесите Secrets в OpenBao, добавьте probes, задокументируйте HPA. Merging блокирую до исправления пунктов 1–3. --- _Automated review by Claude Haiku | advisory, does not block merge_
claude merged commit dab0404c50 into main 2026-02-19 23:41:55 +01:00
claude deleted branch feat/report-generator 2026-02-19 23:41:55 +01:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: claude/k8s-apps#180
No description provided.