Talmazapublicv2
Talmaza (talmaza.com, api.talmaza.com) runs behind Cloudflare: TLS, CDN, WAF, DDoS, bots, rate limits, Access. Traffic enters by a Cloudflare Tunnel dialled from a private AKS cluster (Azure VNet, no public IP) with Azure SQL, Redis, Cosmos DB, storage, AI, Key Vault, Entra ID.
41 components19 edges16 groups9 views0 clones0 exports
YAML 106 lines
# yaml-language-server: $schema=../../../schema/design.schema.json # Imported 2026-09-24 from source/Talmaza - 02.drawio.html, the user's own draw.io diagram # (HTML export; source/Talmaza - 02.drawio is the XML decoded from its data-mxgraph attribute). # Decisions, all recorded in mapping.yaml and notes.md: # - Labels are the drawn text with line breaks joined by one space and runs of spaces collapsed. # - Six dashed sub-frames (Secretless Layer, Monitoring & Alerts Tools, Storage, DB & Cache, # AI, Secret Store) are visual clusters with no topology meaning; they are not groups. Their # members are nodes in the VNet they are drawn in. # - All sixteen drawn arrows end on a frame, not a box, at one end or both. Each such end is # attached to the box nearest the point where the arrow meets the frame, except where the # diagram's own text names the end ("dialed OUTBOUND by cloudflared"). Every choice is in # mapping.yaml. # - The Cloudflare Tunnel is a double-headed arrow, so two edges; protocol quic from its caption. # - The cloudflared -> web pod / api pod arrows carry hostnames, not a protocol; http is assumed # for the in-cluster hop. # - Duplicate boxes (two cloudflared pods, two web pods, two api pods, two Service ClusterIP) # are separate nodes, as drawn. # - "Azure Alerts" maps to azure-monitor: the inventory lists Alerts as a feature of Azure # Monitor, not a resource. # - "External Systems" is an empty frame in the source; kept as an empty trust-zone group. schemaVersion: "1" type: "design" id: "talmaza" groups: - { id: "cloudflare-edge", kind: "point-of-presence", label: "Cloudflare Edge" } - { id: "microsoft-azure", kind: "region", label: "Microsoft Azure" } - { id: "vnet", kind: "vpc", label: "VNet", parent: "microsoft-azure" } - { id: "aks-cluster", kind: "system", label: "AKS cluster (private API server)", parent: "vnet" } - { id: "ns-cloudflared", kind: "namespace", label: "ns: cloudflared — Deployment, 2+ replicas", parent: "aks-cluster" } - { id: "ns-frontend", kind: "namespace", label: "ns: frontend", parent: "aks-cluster" } - { id: "ns-api", kind: "namespace", label: "ns: api", parent: "aks-cluster" } - { id: "external-systems", kind: "trust-zone", label: "External Systems" } - { id: "system", kind: "system", parent: "vnet", label: "Secretless Layer" } - { id: "system-2", kind: "system", parent: "vnet", label: "Egress" } - { id: "system-3", kind: "system", parent: "vnet", label: "Storage" } - { id: "system-6", kind: "system", parent: "vnet", label: "Monitoring & Alerts Tools" } - { id: "system-4", kind: "system", parent: "vnet", label: "DB & Cache" } - { id: "system-7", kind: "system", parent: "vnet", label: "Secret Store" } - { id: "system-8", kind: "system", parent: "vnet", label: "Background Jobs & Triggers" } - { id: "system-5", kind: "system", parent: "vnet", label: "AI" } nodes: - { id: "applicant", component: "user-device", label: "Applicant" } - { id: "visitor", component: "user-device", label: "Visitor" } - { id: "ssl-tls-termination", component: "cloudflare-ssl-tls", label: "SSL / TLS termination (Full strict)", group: "cloudflare-edge", props: { encryptionMode: "full-strict" } } - { id: "cdn", component: "cloudflare-cdn", label: "CDN", group: "cloudflare-edge" } - { id: "waf", component: "cloudflare-waf", label: "WAF", group: "cloudflare-edge" } - { id: "ddos-protection", component: "cloudflare-ddos-protection", label: "DDoS", group: "cloudflare-edge" } - { id: "bot-detection", component: "cloudflare-bot-management", label: "Bot Detection", group: "cloudflare-edge" } - { id: "rate-limiting", component: "cloudflare-rate-limiting", label: "Rate Limiting", group: "cloudflare-edge" } - { id: "access", component: "cloudflare-access", label: "SSO - Admin Apps", group: "cloudflare-edge" } - { id: "nsg", component: "azure-network-security-group", label: "NSG", group: "vnet", props: { defaultAction: "deny" } } - { id: "key-vault-tunnel-token", component: "azure-key-vault", group: "vnet" } - { id: "deployment", component: "k8s-deployment", group: "ns-cloudflared", props: { instances: 2 } } - { id: "cloudflared", component: "cloudflare-tunnel", group: "ns-cloudflared", label: "cloudflared" } - { id: "cloudflared-2", component: "cloudflare-tunnel", label: "cloudflared", group: "ns-cloudflared" } - { id: "service-clusterip", component: "k8s-service", label: "Service ClusterIP", group: "ns-frontend", props: { serviceType: "cluster-ip" } } - { id: "web-pod", component: "k8s-pod", label: "web pod", group: "ns-frontend" } - { id: "web-pod-2", component: "k8s-pod", label: "web pod", group: "ns-frontend" } - { id: "service-clusterip-2", component: "k8s-service", label: "Service ClusterIP", group: "ns-api", props: { serviceType: "cluster-ip" } } - { id: "api-pod", component: "k8s-pod", label: "api pod", group: "ns-api" } - { id: "api-pod-2", component: "k8s-pod", label: "api pod", group: "ns-api" } - { id: "entra-id", component: "azure-entra-id", label: "Entra ID", group: "system" } - { id: "managed-identity", component: "azure-managed-identity", label: "Managed Identity", group: "system" } - { id: "azure-monitor", component: "azure-monitor", label: "Azure Monitor", group: "system-6" } - { id: "log-analytics", component: "azure-log-analytics", label: "Log Analytics", group: "system-6" } - { id: "azure-alerts", component: "azure-monitor", label: "Azure Alerts", group: "system-6" } - { id: "communication-service", component: "azure-communication-services", label: "Communication Service", group: "system-6" } - { id: "blob-storage", component: "azure-blob-storage", label: "Blob Storage", group: "system-3" } - { id: "file-storage", component: "azure-files", label: "File Storage", group: "system-3" } - { id: "table-storage", component: "azure-table-storage", label: "Table Storage", group: "system-3" } - { id: "queue-storage", component: "azure-queue-storage", label: "Queue Storage", group: "system-3" } - { id: "azure-sql", component: "azure-sql", label: "Azure SQL", group: "system-4" } - { id: "redis", component: "azure-cache-for-redis", label: "Redis", group: "system-4" } - { id: "cosmosdb", component: "azure-cosmos-db", label: "CosmosDB", group: "system-4" } - { id: "key-vault-app-secrets", component: "azure-key-vault", label: "Key Vault App Secrets", group: "system-7" } - { id: "azure-ai-foundary", component: "azure-ai-foundry", label: "Azure AI Foundary", group: "system-5" } - { id: "ai-search", component: "azure-ai-search", label: "AI Search", group: "system-5" } - { id: "azure-openai", component: "azure-openai", label: "Azure OpenAI", group: "system-5" } - { id: "azure-container-registry", component: "azure-container-registry", group: "vnet" } - { id: "azure-nat-gateway", component: "azure-nat-gateway", group: "system-2" } - { id: "azure-public-ip", component: "azure-public-ip", group: "system-2" } - { id: "azure-functions", component: "azure-functions", group: "system-8" } edges: - { from: "applicant", to: "cloudflare-edge", protocol: "https", mode: "sync" } - { from: "visitor", to: "cloudflare-edge", protocol: "https", mode: "sync" } - { from: "cloudflare-edge", to: "aks-cluster", protocol: "quic", mode: "sync", label: "Cloudflare Tunnel" } - { from: "ns-cloudflared", to: "ns-frontend", protocol: "http", mode: "sync", label: "talmaza.com" } - { from: "ns-cloudflared", to: "ns-api", protocol: "http", mode: "sync", label: "api.talmaza.com" } - { from: "ns-cloudflared", to: "key-vault-tunnel-token", protocol: "https", mode: "sync", label: "Secret Store" } - { from: "aks-cluster", to: "system", protocol: "https", mode: "sync" } - { from: "azure-container-registry", to: "aks-cluster", protocol: "http", mode: "sync" } - { from: "system", to: "system-3", protocol: "http", mode: "sync" } - { from: "system", to: "system-7", protocol: "http", mode: "sync" } - { from: "system", to: "system-8", protocol: "http", mode: "sync" } - { from: "system-5", to: "system-6", protocol: "http", mode: "sync" } - { from: "system-5", to: "system-4", protocol: "http", mode: "sync" } - { from: "system-5", to: "system-7", protocol: "http", mode: "sync" } - { from: "system-5", to: "system-8", protocol: "http", mode: "sync" } - { from: "aks-cluster", to: "system-2", protocol: "http", mode: "sync" } - { from: "system", to: "system-4", protocol: "http", mode: "sync" } - { from: "system", to: "system-6", protocol: "http", mode: "sync" } - { from: "system-5", to: "system-3", protocol: "http", mode: "sync" }