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="[email protected]"
-
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