Carry a VPC pod to the edge only when served - #445
Conversation
Every VPC pod's EndpointSlice is federated to every edge cluster, so a cell publishes one tenant's pod addresses and SRv6 SIDs onto edges that serve other tenants and other locations. Nothing filters them, because the two facts that decide whether an edge needs a pod, the NetworkService selecting it and the HTTPProxy naming that service, live in a project control plane a cell cannot read. EdgeReachability records the answer where both planes meet. The control plane resolves, per project namespace, the workload addresses behind a proxy and writes them to the federation hub. The write-back reads the record from the hub it already publishes into and carries a slice only when the record names one of its addresses. Silence keeps a pod published, since a withdrawn route under a serving pod black-holes live traffic while a route left up costs a table entry. Key changes: - Add EdgeReachability, a hub-only record of a project's served addresses - Add a controller resolving proxies, services and the interfaces they select in each project control plane - Filter the VPC EndpointSlice write-back on the record and resync every minute, since nothing in a cell watches the hub - Add the end-to-end scenario proving a member serves through the edge
|
Read through the reachability record and the gating it drives. The withhold-but-never-black-hole default and the resync ticker on the write-back side both look right, and the envtest cases around them are convincing. One thing I want to ask before approving. Is the missing Smaller and not blocking: the record carries every family |
Every VPC pod's endpoint slice is federated to every edge cluster, so a cell publishes one tenant's pod addresses and segment identifiers onto edges that serve other tenants and other locations, and nothing filters them because the facts that decide whether an edge needs a pod live in a project control plane a cell cannot read. This adds a hub-only record, written per project namespace by the control plane, of the workload addresses behind a proxy, and the cell's write-back carries a slice only when that record names one of its addresses. Silence keeps a pod published on purpose, since a route withdrawn under a pod that is still serving black-holes live traffic while a route left up for an idle pod costs a table entry. This is the last of six stacked pull requests splitting the network services prototype, and it adds the end-to-end scenario that proves a member serves a real request through the edge on its allocated address.
Test plan