Conversation
A node holds one list of egress shards and routes every network on it toward the first reachable entry, so a network that declared no egress gets a default route out anyway. The attachment's own stanza now carries the declaration, and the node acts on it. The declaration names no shard. The node routes toward the shard its own configuration names, so the list decides where and each attachment decides whether. A network that declares egress on a node naming no shard fails its attach, so a node an operator forgot surfaces at the first instance rather than behind an attach that succeeded without egress. Key changes: - Add the egress declaration to the galactic-bgp stanza - Install the VRF's egress routes only for a declaration of Enabled, and withdraw them otherwise, touching no bpffs on a node whose datapath has not loaded - Fail the attach when egress is declared and the node names no shard - Declare egress on every lab tenant so the lab keeps what it has - Document the declaration beside the node-wide list it gates Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
scotwells
force-pushed
the
feat/per-network-egress-route
branch
from
September 24, 2026 23:43
aa405ed to
5472d11
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Whether a tenant network reaches the internet is decided per node today. One list of translating shards is set at install time, so every network on that node routes toward it and a network that should have no outbound path gets one anyway.
This makes the decision per network: a network reaches the internet when its attachment declares it, reaches nothing when it does not, and loses an already installed route when the declaration goes away.
The declaration names no shard, so the list a node already holds decides where its networks leave, and each attachment decides whether.
API
Important
An attachment whose stanza carries no declaration gets no egress route, and one that declares egress on a node naming no shard fails its attach. Every conflist the lab renders now carries the declaration, and a deployment rolling this out has to render it before nodes can rely on the node-wide list alone.
Test plan
Related to datum-cloud/network-services-operator#475