feat(gateway): Add config/gateway/ Kustomize manifests - #354
Conversation
76455c5 to
15a4155
Compare
a9b4c65 to
bb4683a
Compare
15a4155 to
6d85070
Compare
bb4683a to
3688b27
Compare
6d85070 to
4344c1a
Compare
3688b27 to
c07772d
Compare
4344c1a to
469c9d0
Compare
c07772d to
b1e1344
Compare
469c9d0 to
53414db
Compare
b1e1344 to
6797be1
Compare
ecv
left a comment
There was a problem hiding this comment.
Approving. Nothing found here, and I went looking specifically at the security surface since this is the manifest that grants a pod the right to attach an XDP program.
The capability set is scoped rather than blanket: NET_ADMIN, BPF and PERFMON on the gateway container, NET_ADMIN alone on the co-located router, allowPrivilegeEscalation: false on both, and no privileged: true anywhere. That is the right shape.
RBAC matches what the reconcilers actually do, including omitting create and delete on the resources the external operator owns. The bpf-fs volume being Directory rather than DirectoryOrCreate is the correct call for a host mount that must already exist.
Keeping this out of the root kustomization is right too, for the same reason config/fabric is: the DaemonSet needs a per-node overlay before it means anything, and a generic default would deploy something broken.
CI red here is inherited from #351's module replace, tracked in #358.
53414db to
a635a3a
Compare
- config/gateway/serviceaccount.yaml, rbac.yaml: the gateway control
plane's own ServiceAccount/ClusterRole, split out of
config/router/rbac.yaml's single ClusterRole (which used to grant
one galactic-router identity both the BGP-family CRD verbs and
networkgateways/networkrules verbs because both reconciler sets
lived in the same binary -- they no longer do).
- config/gateway/kustomization.yaml: applies serviceaccount+rbac only
(safe/idempotent cluster-wide); deliberately does not include base/,
same exemption as config/fabric/ -- GALACTIC_GATEWAY_SRV6_ADDRESS has
no generic default and must be pinned per gateway node by a further
overlay (see deploy/containerlab/resources/galactic-router-gateway/
for a worked example).
- config/gateway/base/{daemonset.yaml,kustomization.yaml}: the
two-container (galactic-router + galactic-gateway) DaemonSet spec,
gateway-role node affinity, not applied directly.
- config/router/rbac.yaml: trims create/update/patch on
bgpadvertisements/bgpvrfinstances -- those verbs were only ever
needed by NetworkGatewayReconciler/NetworkRuleReconciler, which no
longer live in this binary.
- config/fabric/daemonset.yaml: adds the gateway role's node-affinity
value and NoSchedule toleration, so fabric-router (and therefore the
underlay eBGP session the gateway's XDP datapath depends on) also
runs on gateway-labeled nodes.
- .github/workflows/publish.yaml: now that config/gateway/base exists,
stamp it with both galactic-router's and galactic-gateway's published
tags (that DaemonSet has two containers) -- the previous branch added
the publish-galactic-gateway-image job itself but couldn't reference
this path yet, since it didn't exist until this commit.
- AGENTS.md: describes config/gateway/ in place of the old
config/router/gateway/ design.
Sixth branch in the edge-gateway stack; builds on
feat/edge-gateway-05-images-ci.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6797be1 to
6f42dd0
Compare
Summary
The image published in the previous PR needs Kubernetes manifests to actually run it. This adds the gateway control plane's own ServiceAccount, ClusterRole, and two-container DaemonSet base, split out of galactic-router's manifests now that the reconcilers they cover no longer live in that binary. galactic-router's RBAC is trimmed to match, and the fabric underlay DaemonSet's affinity is extended to gateway-role nodes. Sixth branch in the edge-gateway stack; builds on the images and CI PR.
Test plan
kubectl kustomizebuilds cleanly for the new and changed manifeststask lintis cleanRelated to #17