# Systeemarchitectuur & GitOps Dit document beschrijft de algehele architectuur van het homelab-cluster, het netwerkverkeer en de geautomatiseerde deployment-pipeline. --- ## 🏗️ GitOps & Deployment Pipeline Alle services volgen een strict GitOps-model aangedreven door **Gitea Actions** en **ArgoCD**: ```mermaid flowchart TD subgraph Development Dev[Developer push naar main] end subgraph CI Pipeline ["Gitea Actions (git.bnhmeijer.nl)"] Trigger[Push / PR Trigger] --> Filter[dorny/paths-filter: Detecteer gewijzigde componenten] Filter -->|Component gewijzigd| Build[Bouw Docker Image] Build --> PushReg[Push image naar Container Registry git.bnhmeijer.nl] PushReg --> SyncGitOps[Update manifests met nieuwe tag in k8s-infra-vmserver] end subgraph GitOps Repo ["k8s-infra-vmserver (Git)"] GitOpsPath["workloads/cluster-infra//"] end subgraph Kubernetes Cluster Argo[ArgoCD ApplicationSet] K8sWorkloads[K8s Deployments / Services / HTTPRoutes] end Dev --> Trigger SyncGitOps -->|Commit & Push| GitOpsPath GitOpsPath -->|Gemonitord via Git poll / webhook| Argo Argo -->|Reconcile & Deploy| K8sWorkloads ``` ### ArgoCD ApplicationSet In [`cluster-infra/argocd/applicationset.yaml`](file:///home/bart/git/cluster/cluster-infra/argocd/applicationset.yaml) is een ApplicationSet gedefinieerd: - **Repo URL**: `https://git.bnhmeijer.nl/bart/k8s-infra-vmserver.git` - **Directories**: `workloads/cluster-infra/*` - **Doel Namespace**: `cluster-infra` - **Sync Policy**: Geautomatiseerd (`prune: true`, `selfHeal: true`, `CreateNamespace=true`). Zodra een service manifests toevoegt onder `workloads/cluster-infra/`, maakt ArgoCD automatisch een nieuwe applicatie aan (`cluster-infra-`) en houdt deze synchroon. --- ## 🌐 Netwerk, Ingress & Routing (Apache + Envoy Gateway) Het externe netwerkverkeer wordt op twee lagen afgehandeld: 1. **Edge Reverse Proxy & TLS/OIDC (Apache op `10.2.0.4`)**: * Apache draait rechtstreeks op de host `vmserver` (`10.2.0.4`) en leest zijn configuraties uit **`/sites/vhosts/`** (versiebeheerd in [`cluster-infra/vhosts/`](file:///home/bart/git/cluster/cluster-infra/vhosts)). * Verzorgt SSL-terminatie met Let's Encrypt certificaten (`/etc/letsencrypt/live/thuus.bnhmeijer.nl/`). * Verzorgt OpenID Connect (OIDC) authenticatie via Keycloak (`https://login.bnhmeijer.nl`). * Routeert lokaal naar bare-metal hostdiensten (Gitea op port 3000, Jellyfin, Icecast, *Arr stack, Nextcloud) en stuurt clusterverkeer door naar **Envoy Gateway NodePort `127.0.0.1:32608`**. * Zie voor alle details: **[`docs/apache-reverse-proxy.md`](file:///home/bart/git/cluster/docs/apache-reverse-proxy.md)**. 2. **In-Cluster Gateway API (Envoy Gateway)**: * Ontvangt verkeer vanaf Apache op NodePort `32608`. * HTTPRoute resources koppelen domeinen en paden aan specifieke Kubernetes pods/services: * `thuus.bnhmeijer.nl/argocd` $\rightarrow$ `argocd/argocd-server:80` * `herms.bnhmeijer.nl` & `herms.lan` $\rightarrow$ `herms/frontend:3000` * `login.bnhmeijer.nl` $\rightarrow$ `keycloak/keycloak:8080` * `influx.bnhmeijer.nl` & `influx-ui.bnhmeijer.nl` $\rightarrow$ InfluxDB services in `cluster-infra` * `infra.bnhmeijer.nl` $\rightarrow$ `cluster-infra/infra-web:3000` * `gravitymon.lan` $\rightarrow$ `herms/gravitymon-2-nats:8002` --- ## 💾 Data & Berichtuitwisseling (Middleware Layer) Binnen het cluster worden verschillende persistente opslag- en messaging-engines gebruikt: 1. **Mosquitto (MQTT)**: * Broker voor IoT-hardware, sensoren en ESP32 firmware communicatie. * Hoofdgebruiker: HERMS firmware/hardware en Home Assistant. 2. **NATS**: * Lichtgewicht high-throughput pub/sub event bus voor microservice-interne communicatie binnen HERMS. 3. **InfluxDB**: * Time-series database voor temperatuur- en procesmetingen van het brouwproces en sensordata. 4. **PostgreSQL & MongoDB**: * Relationele en document stores voor algemene cluster- en applicatiedata. 5. **RabbitMQ**: * Enterprise message broker voor asynchrone taken en wachtrijen.