{
  "docVersion": 1,
  "id": "template-kubernetes-microservices-reference",
  "name": "Kubernetes microservices reference",
  "purpose": "Reference Kubernetes topology: gateway/BFF edge, mesh-injected services with discovery and outlier ejection, HPA scaling, GitOps-only deployments.",
  "nodes": {
    "client": {
      "type": "browser",
      "label": "Clients",
      "x": 20,
      "y": 300,
      "runtime": "web + mobile"
    },
    "ingress": {
      "type": "gateway",
      "label": "Ingress Gateway",
      "x": 280,
      "y": 300,
      "runtime": "TLS · auth · routing",
      "patterns": [
        "stateless"
      ]
    },
    "bff": {
      "type": "bff",
      "label": "BFF / Aggregator",
      "x": 540,
      "y": 300,
      "runtime": "client-shaped API",
      "color": "blue",
      "notes": "Composes one response from many services so mobile clients make one call, not five."
    },
    "registry": {
      "type": "servicediscovery",
      "label": "Service Discovery",
      "x": 540,
      "y": 80,
      "runtime": "registry + health"
    },
    "svcA": {
      "type": "k8s",
      "label": "Orders Service",
      "x": 800,
      "y": 140,
      "runtime": "mesh sidecar injected",
      "patterns": [
        "stateless",
        "autoscale"
      ]
    },
    "svcB": {
      "type": "k8s",
      "label": "Catalog Service",
      "x": 800,
      "y": 300,
      "runtime": "mesh sidecar injected",
      "patterns": [
        "stateless",
        "autoscale"
      ]
    },
    "svcC": {
      "type": "k8s",
      "label": "Users Service",
      "x": 800,
      "y": 460,
      "runtime": "mesh sidecar injected",
      "patterns": [
        "stateless"
      ]
    },
    "db": {
      "type": "database",
      "label": "Orders DB",
      "x": 1060,
      "y": 140,
      "runtime": "stateful set + PVC",
      "patterns": [
        "backup"
      ]
    },
    "cache": {
      "type": "cache",
      "label": "Catalog Cache",
      "x": 1060,
      "y": 300,
      "runtime": "read-heavy relief"
    },
    "hpa": {
      "type": "metrics",
      "label": "HPA / Metrics",
      "x": 800,
      "y": 640,
      "runtime": "scale on RED signals"
    },
    "git": {
      "type": "git",
      "label": "Git Repo",
      "x": 280,
      "y": 640,
      "runtime": "the desired state"
    },
    "gitops": {
      "type": "iac",
      "label": "GitOps Controller",
      "x": 540,
      "y": 640,
      "runtime": "reconciles cluster ← repo",
      "color": "green",
      "notes": "The only writer to the cluster. Humans merge PRs; the controller applies them. Rollback = git revert."
    }
  },
  "edges": {
    "e1": {
      "from": "client",
      "to": "ingress",
      "fromSide": "right",
      "toSide": "left",
      "label": "HTTPS",
      "animated": true,
      "patterns": [
        "encrypted",
        "rate-limit"
      ]
    },
    "e2": {
      "from": "ingress",
      "to": "bff",
      "fromSide": "right",
      "toSide": "left",
      "label": "route",
      "animated": true
    },
    "e3": {
      "from": "bff",
      "to": "svcA",
      "fromSide": "right",
      "toSide": "left",
      "label": "gRPC via sidecar",
      "animated": true,
      "patterns": [
        "timeout",
        "retry",
        "circuit-breaker"
      ]
    },
    "e4": {
      "from": "bff",
      "to": "svcB",
      "fromSide": "right",
      "toSide": "left"
    },
    "e5": {
      "from": "bff",
      "to": "svcC",
      "fromSide": "right",
      "toSide": "left"
    },
    "e6": {
      "from": "svcA",
      "to": "db",
      "fromSide": "right",
      "toSide": "left"
    },
    "e7": {
      "from": "svcB",
      "to": "cache",
      "fromSide": "right",
      "toSide": "left",
      "label": "cache-aside",
      "patterns": [
        "cache-aside"
      ]
    },
    "e8": {
      "from": "svcB",
      "to": "registry",
      "fromSide": "top",
      "toSide": "bottom",
      "label": "register + health",
      "style": "dashed"
    },
    "e9": {
      "from": "hpa",
      "to": "svcC",
      "fromSide": "top",
      "toSide": "bottom",
      "label": "scale replicas",
      "style": "dashed"
    },
    "e10": {
      "from": "git",
      "to": "gitops",
      "fromSide": "right",
      "toSide": "left",
      "label": "merged manifests"
    },
    "e11": {
      "from": "gitops",
      "to": "svcC",
      "fromSide": "right",
      "toSide": "left",
      "label": "apply — reconcile loop",
      "style": "dashed"
    }
  },
  "boxes": {
    "b1": {
      "x": 500,
      "y": 20,
      "w": 820,
      "h": 760,
      "label": "kubernetes cluster — mesh-injected, GitOps-managed",
      "color": "blue",
      "opacity": 0.04
    }
  },
  "texts": {
    "t1": {
      "x": 20,
      "y": 480,
      "text": "the sidecar does the boring hard parts:\nmTLS, retries, outlier ejection — a pod\nthat fails health checks silently leaves\nthe load-balancing pool",
      "color": "blue",
      "size": 12
    },
    "t2": {
      "x": 20,
      "y": 720,
      "text": "GitOps rule: kubectl is read-only for\nhumans — every change is a commit,\nevery rollback is a revert",
      "color": "green",
      "size": 12
    }
  },
  "meta": {
    "createdAt": "2026-07-13T09:00:00.000Z",
    "modifiedAt": "2026-07-13T09:00:00.000Z"
  }
}