Train teams on multi region, high throughput, chaos tested GitOps without burning money.

Assumptions/Constraints

  • Money note: We mock “multi region” with two Kubernetes clusters, not two AWS regions.
  • You have two kube contexts reachable from your workstation.
  • You control a container registry and a GitHub repo.
  • Optional AWS: use IRSA or EKS Pod Identity in Lab 4.

Labs

How to Use

  1. Set two contexts. Example: prod-us-east-1 and prod-eu-west-1.
  2. Work through Part 1 then follow in order. Each lab is self contained and runnable.
  3. Swap in kind or k3d for local clusters to keep spend near zero.
  4. In Part 4 choose one identity path. IRSA covers EKS, Fargate, and other clusters with an OIDC provider. Pod Identity is EKS only and requires Linux EC2 nodes.

ASCII Diagram (full architecture)

 [Dev Laptop]
     |  task, kubectl, helm
     v
 [GitHub Repo] -----> [GitHub Actions CI] ---> [Registry (GHCR/ECR)]
        |                    |                        |
        | manifests          | pushes image           |
        v                    v                        v
                   [GitOps Manifests (deploy/*)]
                            |
                            v
                     [Argo CD (control)]
                         /         \
                        v           v
                 +-----------------------+      +-----------------------+
                 |  Cluster: US         |      |  Cluster: EU         |
                 |  ns echo             |      |  ns echo             |
                 |  istiod              |      |  istiod              |
                 |  east-west gateway   |<====>|  east-west gateway   |
                 |  echo v1/v2 (sidecar)|      |  echo v1/v2 (sidecar)|
                 |  VS/DR (LB, retries) |      |  VS/DR (LB, retries) |
                 |  Chaos Mesh + k6     |      |  Chaos Mesh + k6     |
                 +-----------------------+      +-----------------------+

 Identity per pod (optional):
   [Pod + SA aws-sa]
      |  IRSA: OIDC token -> STS AssumeRoleWithWebIdentity -> creds
      |  Pod Identity: EKS agent -> STS AssumeRole -> creds
      v
   [AWS APIs]

 Notes: multi network meshID=training-mesh, trustDomain=corp.local; cross cluster via gateway + ServiceEntry.

Verification/DoD

  • By the end of Lab 9, you can shift traffic, inject failure, and measure latency across two clusters.

Taskfile targets in this repo

  • task k:ver prints cluster versions for both contexts.
  • task istio:install:all installs Istio control plane in both clusters.
  • task istio:gw:all installs an east west gateway in both clusters.
  • task argocd:install:all installs Argo CD in both clusters.
  • task chaos:install:all installs Chaos Mesh in both clusters.
  • task obs:install:all installs Prometheus, Grafana, and Kiali in both clusters.

Source files