Skip to content

A network should follow a workload to every location it runs in #369

Description

@scotwells

A workload asks for an address on a network. Wherever that workload runs, the network has to be there to give it one — with the same rules about which address families it carries and how large its packets can be.

Today that only works where the network was defined. This tracks making a network present in every location a workload actually lands in.

What a consumer sees

Nothing new to write. They declare a network on their workload, as they do now, and pick the locations they want to run in. Instances come up with addresses in all of them.

What they get is consistency: a network means the same thing in every location it reaches. If it carries IPv6 only, that is true everywhere. If its MTU changes, every location learns.

What is missing today

A network is defined in a consumer's project. Instances run in edge locations. Nothing carries the network's rules from one to the other, so the layer that hands out addresses at the edge cannot answer two questions it must answer before an instance can start: which address families does this network carry, and what MTU should the interface use.

Without those answers an instance stalls waiting for an address it will never get, and the failure is hard to read — it looks like a scheduling problem rather than a missing network.

What changes

A network's presence in a location becomes a real thing. Something declares "this network is needed here," and the platform makes it so. When the last workload leaves, it goes away again.

That declaration is made by whoever needs it. A consumer of the network — a workload deployment today, a load balancer or gateway later — says it needs the network in a location. Several consumers wanting the same network in the same place share one presence, and it lasts as long as any of them do. Nothing has to count by hand.

Locations become visible where the work happens. The platform already knows which locations exist and which have compute enabled. That has to reach the systems placing and running workloads.

Why this is worth doing as a piece

An address a consumer can ask for is already designed (#360). It cannot be delivered until the network is present where the instance runs. This is the gap between that design and a workload that actually starts.

Scope

  • Make a location visible to the systems that place and run workloads
  • Define how a consumer declares that it needs a network in a location, and how that declaration is cleaned up when the consumer goes away
  • Carry a network's address families and MTU to the location, and keep them current when they change
  • Decide what happens to a network's presence in a location when a workload leaves but is still holding a retained address
  • Report a network that is not available in a location as that, rather than as an instance that never starts

Out of scope

Handing out the addresses themselves, which is #360. The data plane that carries the traffic, which #360 also defers.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions