# kundhan-v6/gcp-gke-observability-assessment architecture

> Architecture diagram of the GitHub repository kundhan-v6/gcp-gke-observability-assessment, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kundhan-v6/gcp-gke-observability-assessment
- Repository: https://github.com/kundhan-v6/gcp-gke-observability-assessment

## Overview

This repository deploys two stateless Flask applications across regional GKE clusters, exposing them through global HTTPS and providing centralized observability and disaster recovery. The principal workflow is DNS resolution, protected global ingress, Kubernetes service routing, then application response; Application A also demonstrates a traced call to Application B. The graph combines sampled application code with README-documented infrastructure and analytics capabilities; unsampled Terraform and manifest details are represented at their documented scope.

Main entry points: [`kubernetes/apps.yaml`](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/kubernetes/apps.yaml) (Workload manifests), [`apps/app-a/app.py`](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-a/app.py) (Application A), [`apps/app-b/app.py`](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-b/app.py) (Application B), [`terraform/gke.tf`](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/gke.tf) (GKE clusters)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_edge["Traffic and applications"]
  node_dns["Cloud DNS<br/>[https-dns.tf]"]
  node_lb["Global HTTPS LB<br/>[global-lb.tf]"]
  node_ingress["MultiClusterIngress"]
  node_frontend["HTTPS redirect"]
  node_mcs["MultiClusterService<br/>[apps.yaml]"]
  node_appmanifests["Workload manifests<br/>[apps.yaml]"]
  node_app_a["Application A<br/>[app.py]"]
  node_app_b["Application B<br/>[app.py]"]
end

subgraph group_platform["Cloud platform"]
  node_clusters["GKE clusters<br/>[gke.tf]"]
  node_registry[("Artifact Registry")]
end

subgraph group_observe["Observability and analytics"]
  node_logging["Cloud Logging"]
  node_monitoring["Cloud Monitoring"]
  node_trace["Cloud Trace<br/>[app.py]"]
  node_profiler["Cloud Profiler<br/>[app.py]"]
  node_errors["Error Reporting<br/>[app.py]"]
  node_bq[("BigQuery analytics<br/>[sample_queries.sql]")]
  node_grafana["Grafana dashboard"]
end

subgraph group_resilience["Security and recovery"]
  node_armor["Cloud Armor<br/>[cloud-armor.tf]"]
  node_secrets[("Secret Manager<br/>[secret-manager.tf]")]
  node_backup["Backup and restore<br/>[gke-backup.tf]"]
  node_workloadid["Workload Identity"]
end

node_user(("User"))
node_cloud["Google Cloud"]

node_user -->|"resolves hostname"| node_dns
node_dns -->|"resolves to IP"| node_lb
node_lb -->|"redirects HTTP"| node_frontend
node_lb -->|"protects traffic"| node_armor
node_armor -->|"forwards traffic"| node_ingress
node_ingress -->|"routes traffic"| node_mcs
node_mcs -->|"selects workloads"| node_appmanifests
node_appmanifests -->|"deploys workloads"| node_clusters
node_appmanifests -->|"deploys service"| node_app_a
node_appmanifests -->|"deploys service"| node_app_b
node_app_a -->|"calls slow endpoint"| node_app_b
node_app_a -->|"exports traces"| node_trace
node_app_b -->|"exports traces"| node_trace
node_app_a -->|"profiles service"| node_profiler
node_app_b -->|"profiles service"| node_profiler
node_app_a -->|"reports exceptions"| node_errors
node_app_b -->|"reports exceptions"| node_errors
node_app_a -->|"emits structured logs"| node_logging
node_app_b -->|"emits structured logs"| node_logging
node_clusters -->|"exports workload logs"| node_logging
node_logging -->|"exports selected logs"| node_bq
node_monitoring -->|"visualizes metrics"| node_grafana
node_bq -->|"provides log analytics"| node_grafana
node_clusters -->|"backs up workloads"| node_backup
node_backup -->|"restores workloads"| node_clusters
node_appmanifests -->|"mounts runtime secrets"| node_secrets
node_appmanifests -->|"authenticates workloads"| node_workloadid
node_registry -.->|"supplies images"| node_clusters
node_cloud -->|"hosts infrastructure"| node_clusters

click node_dns "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/https-dns.tf"
click node_lb "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/global-lb.tf"
click node_armor "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/cloud-armor.tf"
click node_ingress "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/kubernetes/multicluster-ingress.yaml"
click node_frontend "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/kubernetes/frontend-config.yaml"
click node_clusters "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/gke.tf"
click node_mcs "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/kubernetes/apps.yaml"
click node_appmanifests "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/kubernetes/apps.yaml"
click node_app_a "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-a/app.py"
click node_app_b "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-b/app.py"
click node_registry "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/artifact-registry.tf"
click node_secrets "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/secret-manager.tf"
click node_logging "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/observability-bigquery.tf"
click node_monitoring "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/grafana/gke-multicluster-observability.json"
click node_trace "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-a/app.py"
click node_profiler "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-a/app.py"
click node_errors "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-a/app.py"
click node_bq "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/bigquery/sample_queries.sql"
click node_grafana "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/grafana/gke-multicluster-observability.json"
click node_backup "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/gke-backup.tf"
click node_workloadid "https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/app-runtime-identity.tf"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dns,node_lb,node_ingress,node_frontend,node_mcs,node_appmanifests,node_app_a,node_app_b,node_user toneBlue
class node_clusters,node_registry toneAmber
class node_logging,node_monitoring,node_trace,node_profiler,node_errors,node_bq,node_grafana toneMint
class node_armor,node_secrets,node_backup,node_workloadid toneRose
class node_cloud toneIndigo
```

## Components

### Traffic and applications

- [Cloud DNS](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/https-dns.tf): `terraform/https-dns.tf`
- [Global HTTPS LB](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/global-lb.tf): `terraform/global-lb.tf`
- [MultiClusterIngress](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/kubernetes/multicluster-ingress.yaml): `kubernetes/multicluster-ingress.yaml`
- [HTTPS redirect](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/kubernetes/frontend-config.yaml): `kubernetes/frontend-config.yaml`
- [MultiClusterService](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/kubernetes/apps.yaml): `kubernetes/apps.yaml`
- [Workload manifests](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/kubernetes/apps.yaml): `kubernetes/apps.yaml`
- [Application A](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-a/app.py): `apps/app-a/app.py`
- [Application B](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-b/app.py): `apps/app-b/app.py`

### Cloud platform

- [GKE clusters](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/gke.tf): `terraform/gke.tf`
- [Artifact Registry](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/artifact-registry.tf): `terraform/artifact-registry.tf`

### Observability and analytics

- [Cloud Logging](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/observability-bigquery.tf): `terraform/observability-bigquery.tf`
- [Cloud Monitoring](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/grafana/gke-multicluster-observability.json): `grafana/gke-multicluster-observability.json`
- [Cloud Trace](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-a/app.py): `apps/app-a/app.py`
- [Cloud Profiler](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-a/app.py): `apps/app-a/app.py`
- [Error Reporting](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/apps/app-a/app.py): `apps/app-a/app.py`
- [BigQuery analytics](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/bigquery/sample_queries.sql): `bigquery/sample_queries.sql`
- [Grafana dashboard](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/grafana/gke-multicluster-observability.json): `grafana/gke-multicluster-observability.json`

### Security and recovery

- [Cloud Armor](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/cloud-armor.tf): `terraform/cloud-armor.tf`
- [Secret Manager](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/secret-manager.tf): `terraform/secret-manager.tf`
- [Backup and restore](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/gke-backup.tf): `terraform/gke-backup.tf`
- [Workload Identity](https://github.com/kundhan-v6/gcp-gke-observability-assessment/blob/main/terraform/app-runtime-identity.tf): `terraform/app-runtime-identity.tf`

### Other components

- **User**
- **Google Cloud**

## Connections

- User → Cloud DNS: resolves hostname (evidence: `README.md`)
- Cloud DNS → Global HTTPS LB: resolves to IP (evidence: `README.md`)
- Global HTTPS LB → HTTPS redirect: redirects HTTP (evidence: `README.md`)
- Global HTTPS LB → Cloud Armor: protects traffic (evidence: `README.md`)
- Cloud Armor → MultiClusterIngress: forwards traffic (evidence: `README.md`)
- MultiClusterIngress → MultiClusterService: routes traffic (evidence: `README.md`)
- MultiClusterService → Workload manifests: selects workloads (evidence: `README.md`)
- Workload manifests → GKE clusters: deploys workloads (evidence: `README.md`)
- Workload manifests → Application A: deploys service (evidence: `README.md`)
- Workload manifests → Application B: deploys service (evidence: `README.md`)
- Application A → Application B: calls slow endpoint (evidence: `apps/app-a/app.py`)
- Application A → Cloud Trace: exports traces (evidence: `apps/app-a/app.py`)
- Application B → Cloud Trace: exports traces (evidence: `apps/app-b/app.py`)
- Application A → Cloud Profiler: profiles service (evidence: `apps/app-a/app.py`)
- Application B → Cloud Profiler: profiles service (evidence: `apps/app-b/app.py`)
- Application A → Error Reporting: reports exceptions (evidence: `apps/app-a/app.py`)
- Application B → Error Reporting: reports exceptions (evidence: `apps/app-b/app.py`)
- Application A → Cloud Logging: emits structured logs (evidence: `README.md`)
- Application B → Cloud Logging: emits structured logs (evidence: `README.md`)
- GKE clusters → Cloud Logging: exports workload logs (evidence: `README.md`)
- Cloud Logging → BigQuery analytics: exports selected logs (evidence: `README.md`)
- Cloud Monitoring → Grafana dashboard: visualizes metrics (evidence: `README.md`)
- BigQuery analytics → Grafana dashboard: provides log analytics (evidence: `README.md`)
- GKE clusters → Backup and restore: backs up workloads (evidence: `README.md`)
- Backup and restore → GKE clusters: restores workloads (evidence: `README.md`)
- Workload manifests → Secret Manager: mounts runtime secrets (evidence: `README.md`)
- Workload manifests → Workload Identity: authenticates workloads (evidence: `README.md`)
- Artifact Registry → GKE clusters: supplies images
- Google Cloud → GKE clusters: hosts infrastructure (evidence: `README.md`)
