feat: expose Gitea externally at git.georgepet.duckdns.org #235

Merged
claude merged 1 commits from feature/gitea-external into main 2026-02-24 20:10:05 +01:00
Owner

Phase 22: Service+Endpoints+Ingress for external Gitea access

Phase 22: Service+Endpoints+Ingress for external Gitea access
claude added 1 commit 2026-02-24 20:10:03 +01:00
feat: expose Gitea externally at git.georgepet.duckdns.org
All checks were successful
AI Review / AI Code Review (pull_request) Successful in 3s
PR Checks / Validate & Security Scan (pull_request) Successful in 10s
b9a84c674f
Service+Endpoints pointing to 10.10.10.1:3000, Ingress with TLS.
Phase 22: Git-based PaaS deploy pipeline.
admin approved these changes 2026-02-24 20:10:03 +01:00
claude merged commit b806355a61 into main 2026-02-24 20:10:05 +01:00
Author
Owner

AI Code Review

Обзор PR: Gitea External Access

Плюсы

  • TLS автоматизирован (cert-manager + letsencrypt-prod)
  • Ingress конфиг чистый, правильный pathType и className
  • Endpoints паттерн правильный для external сервиса
  • ArgoCD app с автоматической синхронизацией

🔴 Критические проблемы

1. IP-адрес 10.10.10.1 hardcoded в Endpoints

  • Это IP docker-bridge или внутреннего сервиса (нужно уточнить архитектуру)
  • Должен быть переменной в values.yaml или ConfigMap
  • При смене инфраструктуры потребуется ручной edit, Gitops будет ломаться

2. NetworkPolicy блокирует трафик

  • Ingress-controller (ingress-nginx) → Service → Endpoints (10.10.10.1)
  • Нужно проверить, разрешен ли egress из prod namespace на 10.10.10.1
  • Если NetworkPolicy запретит — Ingress вернет 502
  • Добавить правило или подтвердить, что оно есть

3. Сервис без selector

  • Service без selector + Endpoints — это статические маршруты
  • Legit для external services, но требует документации в PR why
  • ArgoCD не сможет ничего переправить, если IP дрифтит

⚠️ Рекомендации

Service labels:

apiVersion: v1
kind: Service
metadata:
  name: gitea-external
  namespace: prod
  labels:
    app: gitea
    version: external

Endpoints — параметризировать:

# Либо в values.yaml ArgoCD app:
# gitea_external_ip: 10.10.10.1

Или использовать ExternalName (если DNS стабилен):

apiVersion: v1
kind: Service
metadata:
  name: gitea-external
  namespace: prod
spec:
  type: ExternalName
  externalName: git-internal.local  # или IP если DNS недоступен
  ports:
    - port: 3000

NetworkPolicy проверка:

kubectl get networkpolicy -A | grep prod
# Убедиться: prod → 10.10.10.1:3000 разрешен (или весь кластер → этот IP)

Блокер перед merge

  1. Подтвердить: 10.10.10.1 — это какой сервис и почему hardcoded?
  2. Обновить MEMORY.md или CHANGELOG: что такое gitea-external и где живет оригинальный Gitea?
  3. Тест: curl -k https://git.georgepet.duckdns.org после деплоя → должна быть Gitea, не 502

Итог: Merge после параметризации IP и проверки NetworkPolicy. Архитектура паттерна верная, но хардкоды убивают GitOps.


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

## AI Code Review ## Обзор PR: Gitea External Access ### ✅ Плюсы - TLS автоматизирован (cert-manager + letsencrypt-prod) - Ingress конфиг чистый, правильный pathType и className - Endpoints паттерн правильный для external сервиса - ArgoCD app с автоматической синхронизацией --- ### 🔴 Критические проблемы **1. IP-адрес 10.10.10.1 hardcoded в Endpoints** - Это IP docker-bridge или внутреннего сервиса (нужно уточнить архитектуру) - Должен быть переменной в values.yaml или ConfigMap - При смене инфраструктуры потребуется ручной edit, Gitops будет ломаться **2. NetworkPolicy блокирует трафик** - Ingress-controller (ingress-nginx) → Service → Endpoints (10.10.10.1) - Нужно проверить, разрешен ли egress из prod namespace на 10.10.10.1 - Если NetworkPolicy запретит — Ingress вернет 502 - Добавить правило или подтвердить, что оно есть **3. Сервис без selector** - Service без `selector` + Endpoints — это статические маршруты - Legit для external services, но требует документации в PR why - ArgoCD не сможет ничего переправить, если IP дрифтит --- ### ⚠️ Рекомендации **Service labels:** ```yaml apiVersion: v1 kind: Service metadata: name: gitea-external namespace: prod labels: app: gitea version: external ``` **Endpoints — параметризировать:** ```yaml # Либо в values.yaml ArgoCD app: # gitea_external_ip: 10.10.10.1 ``` **Или использовать ExternalName (если DNS стабилен):** ```yaml apiVersion: v1 kind: Service metadata: name: gitea-external namespace: prod spec: type: ExternalName externalName: git-internal.local # или IP если DNS недоступен ports: - port: 3000 ``` **NetworkPolicy проверка:** ```bash kubectl get networkpolicy -A | grep prod # Убедиться: prod → 10.10.10.1:3000 разрешен (или весь кластер → этот IP) ``` --- ### ✋ Блокер перед merge 1. **Подтвердить:** 10.10.10.1 — это какой сервис и почему hardcoded? 2. **Обновить MEMORY.md или CHANGELOG:** что такое gitea-external и где живет оригинальный Gitea? 3. **Тест:** `curl -k https://git.georgepet.duckdns.org` после деплоя → должна быть Gitea, не 502 **Итог:** Merge после параметризации IP и проверки NetworkPolicy. Архитектура паттерна верная, но хардкоды убивают GitOps. --- _Automated review by Claude Haiku | advisory, does not block merge_
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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