Production-grade Banking Application with AI Integration, deployed on Amazon EKS using a complete GitOps pipeline.
A fully automated, zero-touch deployment pipeline featuring a Java Spring Boot banking app with a self-hosted TinyLlama AI chatbot, secured with TLS, monitored with Prometheus & Grafana, and managed through GitOps.
- Overview
- Architecture
- Infrastructure as Code
- GitOps Pipeline
- Networking & Ingress
- Live Application
- Monitoring & Observability
- Tech Stack
- Quick Start
This project demonstrates an end-to-end DevOps lifecycle for banking application. Every component β from cloud infrastructure to application deployment β is automated, version-controlled, and observable.
| Feature | Implementation |
|---|---|
| π₯οΈ Core App | Java 21 + Spring Boot 3.4.1 with Glassmorphism UI |
| π€ AI Integration | Self-hosted TinyLlama via Ollama running on EKS |
| π GitOps | Fully automated deployments with ArgoCD auto-sync |
| π Security | Automated TLS via Cert-Manager + Let's Encrypt |
| π Scalability | Custom HPA logic for traffic spike handling |
| π Observability | Full Prometheus + Grafana + Node Exporter stack |
| ποΈ IaC | 84 AWS resources provisioned via Terraform |
Managed EKS cluster running Kubernetes 1.35 across 3 Availability Zones, provisioned entirely through Terraform.
Active bankapp-eks cluster on Kubernetes v1.35 β Standard support until March 2027
The entire AWS infrastructure is defined as code β VPC, subnets, EKS cluster, node groups, KMS encryption keys, IAM roles, and security groups. A single terraform apply provisions everything from scratch.
module "eks" {
source = "terraform-aws-modules/eks/aws"
cluster_name = "bankapp-eks"
cluster_version = "1.35"
# KMS encryption for secrets at rest
cluster_encryption_config = {
provider_key_arn = module.kms.key_arn
resources = ["secrets"]
}
# Tags managed by Terraform
tags = {
Environment = "production"
ManagedBy = "terraform"
Project = "BankApp-EKS"
}
}
terraform plan output β 84 resources to add, including VPC, EKS cluster, managed node groups, and KMS encryption keys
Key Terraform resources provisioned:
aws_eks_clusterβ Managed control plane with private API endpointaws_kms_keyβ Envelope encryption for Kubernetes secrets (ENCRYPT_DECRYPT)aws_vpc+ subnets β Isolated network across 3 AZsaws_eks_node_groupβ Managed node groupbankapp-ngwith auto-scaling
This project follows a Zero-Touch Deployment strategy. Any commit pushed to the main branch is automatically detected and reconciled by ArgoCD β no manual kubectl apply ever needed.
Developer β git push β GitHub β ArgoCD detects diff β Auto-sync to EKS
ArgoCD showing all 18 resources Synced and Healthy β bankapp, mysql, ollama deployments all running
ArgoCD Sync Status:
- β App Health: Healthy
- β
Sync Status: Synced to
main (358e8d6) - β Last Sync: Succeeded β "feat: improve UI for better dashboard visibility"
- π Auto sync: Enabled
Instead of the traditional Nginx Ingress, this project uses the modern Kubernetes Gateway API with Envoy Gateway β the future standard for Kubernetes traffic management.
Internet β AWS NLB β Envoy Gateway β HTTPRoute β bankapp Service β Pods
kubectl get gatewayclass,gateway,httproute -A β GatewayClass accepted, Gateway programmed, HTTPRoutes active
Networking highlights:
- Load Balancer: AWS Network Load Balancer (NLB) β
ae60421e9a46c4647986bd338593c86c-90267515.us-east-1.elb.amazonaws.com - Gateway Controller:
gateway.envoyproxy.io/gatewayclass-controller - Dynamic DNS: nip.io for instant public access without custom domain setup
- TLS/SSL: Automated certificate issuance and renewal via Cert-Manager + Let's Encrypt
The BankApp is a modern banking dashboard built with Spring Boot, featuring real-time balance display, deposits, withdrawals, and peer-to-peer transfers β all backed by MySQL on Kubernetes.
Live BankApp running at https://18.233.48.133.nip.io/dashboard β Glassmorphism UI with Deposit, Withdraw & Transfer
App features:
- π° Real-time account balance display
- β Deposit funds
- β Withdraw funds
- π Transfer to other users
- π€ AI chatbot powered by self-hosted TinyLlama (Ollama)
Full observability stack deployed inside the cluster β Prometheus scrapes metrics, Grafana visualizes them, and Node Exporter exposes host-level metrics.
Grafana β Kubernetes Compute Resources / Cluster: CPU utilisation 3.92%, Memory 46.6%, across argocd, bankapp, envoy-gateway namespaces
Grafana β Namespace (bankapp): Per-workload CPU/Memory quotas for bankapp, mysql, ollama, and bankapp-tls challenge pods
| Workload | Pods | CPU Usage | CPU Requests | Memory |
|---|---|---|---|---|
bankapp |
2 | 0.0138 | 0.500 | 506 MiB |
ollama |
1 | 0.00192 | 0.500 | β |
mysql |
1 | 0.00476 | 0.250 | β |
Node Exporter dashboard β CPU Usage near 0% idle, Memory at 52.4% used, Load Average stable across 1m/5m/15m
| Layer | Tools |
|---|---|
| βοΈ Cloud | AWS (EKS, VPC, EBS, ELB, KMS, IAM) |
| ποΈ Automation | Terraform, GitHub Actions, ArgoCD |
| π Networking | Gateway API, Envoy Proxy, Cert-Manager, Let's Encrypt |
| π¦ App Stack | Java 21, Spring Boot 3.4.1, MySQL 8 |
| π€ AI/LLM | Ollama, TinyLlama |
| π Monitoring | Prometheus, Grafana, Node Exporter, kube-state-metrics |
| π³ Container | Docker, Kubernetes 1.35 |
- AWS CLI configured with appropriate permissions
- Terraform β₯ 1.5
- kubectl
- ArgoCD CLI (optional)
git clone https://github.com/your-username/bankapp-eks-gitops
cd bankapp-eks-gitopscd terraform
terraform init
terraform plan # Review: 84 resources to add
terraform apply # ~20 minutesaws eks update-kubeconfig \
--region us-east-1 \
--name bankapp-ekskubectl apply -f argocd/application.yml
# ArgoCD will auto-sync and deploy all workloads# Check all resources
kubectl get gatewayclass,gateway,httproute -A
# Check pods
kubectl get pods -n bankapp
# Access Grafana
kubectl port-forward svc/grafana 3000:3000 -n monitoringbankapp-eks-gitops/
βββ terraform/ # AWS infrastructure (EKS, VPC, KMS, IAM)
βββ k8s/
β βββ bankapp/ # Spring Boot app manifests
β βββ mysql/ # StatefulSet + PVC
β βββ ollama/ # TinyLlama deployment
β βββ gateway/ # Gateway API, HTTPRoutes
β βββ cert-manager/ # ClusterIssuer, Certificates
β βββ monitoring/ # Prometheus, Grafana, Node Exporter
βββ argocd/
β βββ application.yml # ArgoCD Application manifest
βββ app/ # Spring Boot source code
Java 21 Β· Spring Boot Β· AWS EKS Β· Terraform Β· ArgoCD Β· Prometheus Β· Grafana