This repository contains the Kubernetes manifests and configuration for the Salon Booking System microservices deployment using ArgoCD.
salon-gitops/
βββ argocd/ # ArgoCD Application definitions
β βββ appointment_service.yaml
β βββ ecr_credential_helper.yaml
β βββ frontend.yaml
β βββ notification_service.yaml
β βββ reports_analytics.yaml
β βββ service_management.yaml
β βββ staff_management.yaml
β βββ user_service.yaml
β βββ prod-*.yaml # Production variants
β
βββ staging/ # Staging environment manifests
β βββ appointment_service/
β β βββ deployment.yaml
β β βββ service.yaml
β βββ frontend/
β βββ notification_service/
β βββ reports_analytics/
β βββ service_management/
β βββ staff_management/
β βββ user_service/
β βββ secrets/
β β βββ app-secrets.example.yaml # Template (DO NOT commit real secrets)
β βββ ecr-credential-helper.yaml
β
βββ production/ # Production environment manifests
β βββ (same structure as staging)
β
βββ istio/ # Istio Gateway configuration
β βββ gateway.yaml
β
βββ docs/ # Documentation
βββ SECRETS_AND_DATABASE_SETUP.md
- Kubernetes cluster (v1.28+)
- ArgoCD installed
- Istio service mesh
- AWS CLI configured
- kubectl configured
-
Create namespaces:
kubectl create namespace staging kubectl create namespace production kubectl label namespace staging istio-injection=enabled kubectl label namespace production istio-injection=enabled
-
Create application secrets:
# See docs/SECRETS_AND_DATABASE_SETUP.md for full details kubectl create secret generic app-secrets \ --namespace=staging \ --from-literal=JWT_SECRET_KEY="<your-jwt-secret>" \ --from-literal=DB_HOST="database-1.cn8e0eyq896c.eu-north-1.rds.amazonaws.com" \ --from-literal=DB_USER="admin" \ --from-literal=DB_PASSWORD="<your-password>" \ --from-literal=SMTP_HOST="smtp.gmail.com" \ --from-literal=SMTP_PORT="587" \ --from-literal=SMTP_USER="<smtp-user>" \ --from-literal=SMTP_PASSWORD="<smtp-password>" \ --from-literal=FROM_EMAIL="noreply@aurora-glam.com"
-
Create ECR pull secrets:
ECR_TOKEN=$(aws ecr get-login-password --region us-east-1) kubectl create secret docker-registry aws-ecr-cred \ --namespace=staging \ --docker-server=024955634588.dkr.ecr.us-east-1.amazonaws.com \ --docker-username=AWS \ --docker-password="${ECR_TOKEN}"
-
Apply ArgoCD applications:
kubectl apply -f argocd/
| Service | Port | Description |
|---|---|---|
| user_service | 8001 | User authentication and management |
| service_management | 8002 | Salon services catalog |
| staff_management | 8003 | Staff and availability management |
| appointment_service | 8004 | Booking appointments |
| reports_analytics | 8005 | Business reports and analytics |
| notification_service | 8006 | Email/SMS notifications |
| frontend | 3000 | Next.js web application |
| Component | Region | Purpose |
|---|---|---|
| Kubernetes | ap-south-1 | Application workloads |
| AWS ECR | us-east-1 | Container image registry |
| AWS RDS MySQL | eu-north-1 | Database (salon-db) |
| AWS ALB | ap-south-1 | Load balancer with HTTPS |
Internet β ALB (HTTPS) β Istio Gateway β Services
β
VirtualService
β
βββββββββββ΄ββββββββββ
β β
Frontend Backend APIs
(Next.js) (FastAPI)
- Secrets and Database Setup - Complete guide for secrets management, RDS configuration, and troubleshooting
- Secrets Template (Staging) - Template for staging secrets
- Secrets Template (Production) - Template for production secrets
Code Push β GitHub Actions CI/CD β Build & Push to ECR β Update GitOps Repo β ArgoCD Sync β Deploy to K8s
- Backend repo (
salon-booking-backend-dev): Builds all microservices - Frontend repo (
salon-booking-frontend-dev): Builds Next.js app - GitOps repo (this repo): Updated automatically with new image tags
- ArgoCD: Watches this repo and syncs to Kubernetes
- NEVER commit real secrets to this repository
- Use
kubectl create secretto create secrets directly in the cluster - Template files in
*/secrets/are examples only (contain placeholders)
- All services use
salon-dbdatabase in RDS user_servicerequires explicitDB_NAME=salon-db(see deployment)- RDS endpoint:
database-1.cn8e0eyq896c.eu-north-1.rds.amazonaws.com:3306
- Image tags are automatically updated by CI/CD pipelines
- Format:
<short-sha>-<timestamp>(e.g.,d77fdfa8-20251214185501) - Do not manually edit image tags unless necessary
kubectl get pods -n staging
kubectl get pods -n productionkubectl logs deployment/user-service -n staging -c user-servicekubectl rollout restart deployment -n stagingargocd app sync user-service --force- Namespaces created with Istio injection
-
app-secretscreated in target namespace -
aws-ecr-credcreated in target namespace - ArgoCD applications applied
- RDS security group allows cluster IP
- Istio Gateway configured
- DNS pointing to ALB
- salon-booking-backend-dev - Backend microservices
- salon-booking-frontend-dev - Frontend application
- salon-k8s-infra - Terraform infrastructure
For issues or questions:
- Check Secrets and Database Setup documentation
- Review pod events:
kubectl describe pod <pod-name> -n staging - Check ArgoCD sync status in the ArgoCD UI