Documentation
¶
Overview ¶
Package network is the worker network-isolation substrate (ADR-0115, FEAT-0007/F80): the L3/L4 egress policy layer. When enabled on Linux it programs — over the existing funcd0 CNI bridge, never replacing it — a bridge-family lateral-deny plus an inet table that redirects remaining external worker TCP into the egress gateway (F81) and default-denies the rest. Disabled, or on a non-Linux host, every method is a no-op and worker egress stays open exactly as before. Behavioral egress *decisions* (allow/deny a destination) are F81's; this package only frames the isolation.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Manager ¶
type Manager interface {
Apply(ctx context.Context, p Policy) error
Remove(ctx context.Context) error
}
Manager programs the host-level worker-egress isolation substrate (F80). It is enabled opt-in; disabled or on a non-Linux host every method is a no-op. Apply is idempotent — it is called once at daemon start (before any worker serves) and reconciles the funcd tables to Policy; Remove tears them down at shutdown (safe if never applied).
type Policy ¶
type Policy struct {
// WorkerSubnet is the funcd0 host-local IPAM subnet (from containerd.Config.SubnetCIDR); rules match
// it as the source.
WorkerSubnet netip.Prefix
// GatewayPort is where remaining external TCP is REDIRECTed (F81's egress gateway). Zero is rejected
// when enabled — the redirect must have a target.
GatewayPort uint16
// InternalAllow are funcd node-private services a worker may reach directly (S3 frontend,
// ingress/catalog) — passed, never redirected. These are the WORKER-REACHABLE endpoint addresses
// (the funcd0-gateway-IP:port a service's injected Endpoint resolves to), NOT the service's 127.0.0.1
// listen address (which is the worker's own netns loopback and unreachable).
InternalAllow []netip.AddrPort
// DNSResolver is the single node resolver a worker may reach on :53 — the accept is scoped to this
// address (not any :53), so it is not an open exfil channel.
DNSResolver netip.AddrPort
// DNSForwarderPort, when non-zero, is the funcd DNS forwarder's host port (ADR-0117, F81): worker
// :53 (UDP+TCP) is REDIRECTed into it so the forwarder is the ONLY reachable resolver (the F80
// DNS-workaround exit — a worker cannot resolve out-of-band). Zero ⇒ legacy F80 behavior (worker DNS
// goes straight to DNSResolver, un-correlated).
DNSForwarderPort uint16
}
Policy is the static isolation frame F80 programs. Behavioral egress decisions are F81's — this only frames default-deny + the internal allowlist + the redirect hook. See ADR-0115 Contracts.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package egress is the transparent egress PEP (ADR-0117, FEAT-0007/F81): the enforcement point F80's nftables substrate REDIRECTs remaining external worker TCP into.
|
Package egress is the transparent egress PEP (ADR-0117, FEAT-0007/F81): the enforcement point F80's nftables substrate REDIRECTs remaining external worker TCP into. |