Bank of Anthos is a sample HTTP-based web app that simulates a bank's payment processing network, allowing users to create artificial bank accounts and complete transactions.
Google uses this application to demonstrate how developers can modernize enterprise applications using GCP products, including: GKE, Anthos Service Mesh, Anthos Config Management, Migrate for Anthos, Spring Cloud GCP, and Cloud Operations. This application works on any Kubernetes cluster.
If you’re using this app, please ★Star the repository to show your interest!
👓 Note to Googlers: Please fill out the form at go/bank-of-anthos-form if you are using this application.
Sign in | Home |
---|---|
Service | Language | Description |
---|---|---|
frontend | Python | Exposes an HTTP server to serve the website. Contains login page, signup page, and home page. |
ledger-writer | Java | Accepts and validates incoming transactions before writing them to the ledger. |
balance-reader | Java | Provides efficient readable cache of user balances, as read from ledger-db . |
transaction-history | Java | Provides efficient readable cache of past transactions, as read from ledger-db . |
ledger-db | PostgreSQL | Ledger of all transactions. Option to pre-populate with transactions for demo users. |
user-service | Python | Manages user accounts and authentication. Signs JWTs used for authentication by other services. |
contacts | Python | Stores list of other accounts associated with a user. Used for drop down in "Send Payment" and "Deposit" forms. |
accounts-db | PostgreSQL | Database for user accounts and associated data. Option to pre-populate with demo users. |
loadgenerator | Python/Locust | Continuously sends requests imitating users to the frontend. Periodically creates new accounts and simulates transactions between them. |
- Create a Google Cloud Platform project or use an existing project. Set the
PROJECT_ID
environment variable and ensure the Google Kubernetes Engine API is enabled.
PROJECT_ID=""
gcloud services enable container --project ${PROJECT_ID}
- Clone this repository.
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
cd bank-of-anthos
- Create a GKE cluster.
- GKE Autopilot mode (see GKE Autopilot overview to learn more):
gcloud services enable container.googleapis.com monitoring.googleapis.com \
--project ${PROJECT_ID}
REGION=us-central1
gcloud container clusters create-auto bank-of-anthos \
--project=${PROJECT_ID} --region=${REGION}
- GKE Standard mode:
ZONE=us-central1-b
gcloud beta container clusters create bank-of-anthos \
--project=${PROJECT_ID} --zone=${ZONE} \
--machine-type=e2-standard-2 --num-nodes=4 \
--monitoring=SYSTEM --logging=SYSTEM,WORKLOAD --subnetwork=default \
--tags=bank-of-anthos --labels csm=
- Get credentials for the created cluster
- GKE Autopilot mode:
gcloud container clusters get-credentials bank-of-anthos \
--project=${PROJECT_ID} --region=${REGION}
- GKE Standard mode:
gcloud container clusters get-credentials bank-of-anthos \
--project=${PROJECT_ID} --zone=${ZONE}
- Deploy the demo JWT public key to the cluster as a Secret. This key is used for user account creation and authentication.
kubectl apply -f ./extras/jwt/jwt-secret.yaml
- Deploy the sample app to the cluster.
kubectl apply -f ./kubernetes-manifests
- Wait for the Pods to be ready.
kubectl get pods
After a few minutes, you should see:
NAME READY STATUS RESTARTS AGE
accounts-db-6f589464bc-6r7b7 1/1 Running 0 99s
balancereader-797bf6d7c5-8xvp6 1/1 Running 0 99s
contacts-769c4fb556-25pg2 1/1 Running 0 98s
frontend-7c96b54f6b-zkdbz 1/1 Running 0 98s
ledger-db-5b78474d4f-p6xcb 1/1 Running 0 98s
ledgerwriter-84bf44b95d-65mqf 1/1 Running 0 97s
loadgenerator-559667b6ff-4zsvb 1/1 Running 0 97s
transactionhistory-5569754896-z94cn 1/1 Running 0 97s
userservice-78dc876bff-pdhtl 1/1 Running 0 96s
- Access the web frontend in a browser using the frontend's
EXTERNAL_IP
.
kubectl get service frontend | awk '{print $4}'
Example output - do not copy
EXTERNAL-IP
35.223.69.29
- Workload Identity: See these instructions.
- Cloud SQL: See these instructions to replace the in-cluster databases with hosted Google Cloud SQL.
- Multi Cluster with Cloud SQL: See these instructions to replicate the app across two regions using GKE, Multi Cluster Ingress, and Google Cloud SQL.
- Istio: Apply
istio-manifests/
to your cluster to access the frontend through the IngressGateway. - Anthos Service Mesh: ASM requires Workload Identity to be enabled in your GKE cluster. See the workload identity instructions to configure and deploy the app. Then, apply
istio-manifests/
to your cluster to configure frontend ingress. - Java Monolith (VM): We provide a version of this app where the three Java microservices are coupled together into one monolithic service, which you can deploy inside a VM (eg. Google Compute Engine). See the ledgermonolith directory.
See the Troubleshooting guide for resolving common problems.
See the Development guide to learn how to run and develop this app locally.
- Explore Anthos (Google Cloud docs)
- Tutorial - Migrate for Anthos - Migrating a monolith VM to GKE
- Google Cloud Architecture Center - Running distributed services on GKE private clusters using Anthos Service Mesh
- Google Cloud Next '20 - Hands-on Keynote (Anthos, Cloud Operations, Spring Cloud GCP, BigQuery, AutoML)