feat: add ArgoCD bootstrap with ApplicationSet pattern

- Add root ApplicationSet using Git Directory Generator
- Configure AppProjects for infrastructure and apps separation
- Add cert-manager with Let's Encrypt ClusterIssuers (staging/prod)
- Add SOPS configuration for age-encrypted secrets
- Add bootstrap documentation (docs/BOOTSTRAP.md)
- Scaffold infrastructure dirs (networking, storage, monitoring)
- Update README with quick start and architecture

GitOps pattern: directories auto-discovered by ArgoCD ApplicationSets
Reference: CNCF App-of-Apps best practices 2025
This commit is contained in:
Greg Hendrickson
2026-02-02 18:02:32 +00:00
parent 1e402ff027
commit 124a29a0a9
16 changed files with 503 additions and 13 deletions

31
.sops.yaml Normal file
View File

@@ -0,0 +1,31 @@
# .sops.yaml
# SOPS configuration for encrypting Kubernetes secrets
# Generate age key: age-keygen -o key.txt
# Export: export SOPS_AGE_KEY_FILE=~/.config/sops/age/keys.txt
# Encrypt: sops -e -i secret.yaml
# Decrypt: sops -d secret.yaml
#
# Reference: https://github.com/getsops/sops
creation_rules:
# Infrastructure secrets (networking, storage, monitoring)
- path_regex: infrastructure/.*/.*secret.*\.yaml$
encrypted_regex: ^(data|stringData)$
age: >-
age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Application secrets
- path_regex: apps/.*/.*secret.*\.yaml$
encrypted_regex: ^(data|stringData)$
age: >-
age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Cluster-specific secrets
- path_regex: clusters/.*/.*secret.*\.yaml$
encrypted_regex: ^(data|stringData)$
age: >-
age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# NOTE: Replace the age public key above with your actual key
# The encrypted_regex ensures only data/stringData fields are encrypted,
# leaving metadata readable for GitOps tooling