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.
Opsani uses this application to demonstrate a real polyglot application under optimization in a Kubernetes enviornment.
See opsani-README for details on launching the Bank-of-Anthos app for use with the Opsani Dev-Trial environment.
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.
NOTE: This application utilizes log4j, and all relevant container images have been patched to address the major security vulnerability identified in December, 2021.
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.
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 \
--enable-stackdriver-kubernetes --subnetwork=default \
--tags=bank-of-anthos --labels csm=
- 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.
- Multicluster 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.
- Google Cloud Next '20 - Hands-on Keynote (Anthos, Cloud Operations, Spring Cloud GCP, BigQuery, AutoML)