Session 1 · 1 slot · 90 minutes

Five primitives everything else stands on

This session is a gate, not a lecture. Every later session — networking, edge, clusters, pipelines — silently assumes these five. A gap here does not announce itself; it shows up four sessions later as a mystery you cannot debug. Drag the stack to orbit it. Click a layer.

How this session runs

Same seven-block shape as every session in this program:

  • Pain first — the world without the thing.
  • What it is, and where it sits on the architecture map.
  • Why this choice, and which alternatives were rejected, with reasons.
  • Six-pillar scorecard — operations, security, reliability, performance, cost, sustainability.
  • Code walk — the real declaration, not a screenshot of one.
  • Lab — you run it, in your own sandbox account.
  • Break it — the instructor breaks it, the room debugs it.

Session 1 has no cloud lab. It has calculators and steppers, and a self-check gate at the bottom you must clear before session 4.

Set up a sandbox account before session 4. A separate account, a hard budget alarm, one scoped role per person, and a nightly cleanup of anything tagged ephemeral. Without it every later session collapses back into a lecture.
Layer 2 · naming

DNS — Domain Name System: a distributed cache with no invalidation

Eight steps from “I typed a name” to “I have an address”. Step through it, or let it play. Watch which hops cache the answer — that is the part that pages you later.

What breaks in production
  • TTL set too high before a cutover. You cannot revoke a cached answer. Drop the TTL to 60 seconds at least one full old-TTL period before the change window, then raise it after.
  • Negative caching. A failed lookup during a brief outage is cached as “does not exist”. The fix lands and the name stays broken for the negative TTL.
  • Split-horizon surprises. A private zone answers differently inside the network than outside it. “It resolves from my laptop” proves nothing about the cluster.
  • Apex records. The root of a domain cannot hold a CNAME. Providers work around this with a proprietary alias record — which is why apex behaviour differs per provider.
  • Registrar and zone disagree. The zone can be flawless and still invisible if the registrar points at different nameservers.

Inside a cluster, service discovery is this same protocol with a very short TTL — which is why a resolver problem there looks like every service failing at once.

Layer 1 · trust

TLS — Transport Layer Security: identity first, encryption second

A TLS 1.3 handshake, message by message. Note where the encrypted region starts — and that the certificate arrives inside it.

The chain of trust

Three certificates, three different jobs. Drag to orbit, click each one.

Rules worth memorising
  • The server sends leaf and intermediates. It never sends the root.
  • Hostname matching uses the SAN list. The legacy common name is ignored by modern clients.
  • Validity is checked against the client's clock. A drifted clock is a TLS outage.
  • Renewal must be automated. Short validity windows make manual renewal a scheduled outage.
  • Never disable verification to clear an error. It converts “encrypted and authenticated” into “encrypted to someone unknown”, and the flag always outlives the debugging session that introduced it.
  • Validate the served chain from outside your network. A machine that already trusts your internal certificate authority cannot detect a missing intermediate.
Layer 3 · addressing

CIDR — Classless Inter-Domain Routing: the arithmetic you cannot undo later

Move the sliders. Each square is one /24 of the address space; colour is the subnet it falls into. The range you choose on day one is close to permanent — overlapping ranges can never be peered, and renumbering a live network is a rebuild.

How to size a network you won't regret
  • Pick non-overlapping ranges across every environment and region — and write them down somewhere authoritative before anyone provisions. Two networks that must one day talk cannot share a single address.
  • Leave room. A /16 per network costs nothing and removes the worst class of migration. Being thrifty with private address space buys you nothing.
  • Three tiers, one per availability zone — internet-facing, private application, data. Nine subnets is the usual baseline.
  • Container networking is hungry. Some cluster networking modes give every pod a real address from the subnet. A /24 that looks generous holds far fewer pods than you expect.
  • Five addresses per subnet are reserved by the platform. A /28 yields 11 usable addresses, not 16.
Layer 4 · where code runs

Linux: a container is just a process

Toggle the bits. Permissions are the most common reason a perfectly good deployment refuses to start — and the reason many tools reject a credential file outright.

The rest of the Linux surface you need
  • Processes and signals. A graceful shutdown is a termination signal the process chose to handle. Ignore it and the platform escalates to a kill that cannot be caught — which is how in-flight requests get dropped during every deploy.
  • Exit codes. 0 is success. 137 means killed — usually the out-of-memory killer. 143 means it was asked to stop and complied. These three explain most restart loops.
  • File descriptors. Sockets and files share one per-process limit. A leak surfaces as “too many open files” under load, never in testing.
  • Namespaces and control groups. Namespaces limit what a process can see; control groups limit what it can consume. That is the whole of containerisation — session 10 only adds packaging on top.
  • Standard output is the log. Anything a container writes elsewhere is invisible to the platform's log pipeline.
  • Users. Running as the root user inside a container is a real privilege in most configurations, not a cosmetic one.
Layer 5 · source of truth

Git: merge and rebase, and why the difference matters

Build a history, then merge or rebase it. Watch the commit hashes when you rebase — they change, and that single fact is the whole argument about when rebasing is safe.

Why this matters for infrastructure, not just code
  • A commit is the deployable unit. From session 9 onward the repository is the only write interface to infrastructure. “What is running in production” must be answerable as a commit identifier.
  • A branch is a movable pointer, not a copy. That is why creating one is free and why deleting one destroys nothing that was merged.
  • Rebase produces new commits. Same changes, different identity. Rebase your own unpublished work; merge anything others have already pulled.
  • Merge keeps an honest record that two lines of work existed separately. Rebase keeps a linear story that is easier to read and easier to bisect.
  • Tags mark releases and must be immutable. Moving a tag breaks every deployment record that referenced it.
The gate

Ten statements. Tick only the true ones.

Answer honestly — nobody sees this, it is stored in your browser only. Every later session assumes all ten. Anything unticked is homework before session 4.