Loading
Add support for nftables Multinetwork Policy (part of k8s Network Plumbing Work Group) for Multus net-attach-def
Closes #2234 (closed)
Summary:
Kubernetes NetworkPolicy only covers the primary pod interface. Traffic on Multus secondary interfaces (macvlan, ipvlan, bridge, sriov, bond) is unpoliced. This MR adds MultiNetworkPolicy enforcement to cover that gap.
Upstream: https://github.com/k8snetworkplumbingwg/multi-networkpolicy-nftables
Changes:
- Sylva Units:
- multi-networkpolicy-crd: installs the CRD
- multi-networkpolicy-nftables: runs the enforcement DaemonSet. depends_on multus.
Upstream is k8snetworkplumbingwg/multi-networkpolicy-nftables but it has no release tagsBuilt the image - hosted it in the Sylva ecosystem at.../sandbox-registry/multi-networkpolicy-nftables:0.0.20260511-e141ac5Injected viapostBuild.substitute
- Hardened for Sylva, not in upstream** (
kustomize-units/multi-networkpolicy-nftables/kustomization.yaml).privileged: false, dropped to minimal caps (SYS_ADMIN,NET_ADMIN,SYS_PTRACE),- AppArmor
Unconfined+SYS_PTRACEso cross-namespace/proc/<pid>/ns/networks on RKE2, /hostmount made read-only,- ClusterRole wildcards replaced with explicit resources/verbs,
- supported plugins (
macvlan,ipvlan,bridge,sriov,bond) parameterised.
- Disabled by default (
workload-cluster.values.yaml): both unitsenabled: false - Tests: implemented via the new test framework
- test_multi_networkpolicy_crd_exists — To verify mnp crd creation
- test_nftables_daemonset_running — To verify Daemonset
- test_baseline_connectivity — To verify can pods talk over the macvlan secondary interface
- test_policy_enforcement — To verify
deny-all-egressblocks iperf traffic
Testing:
- CI: all 4 cases pass on capo/rke2/suse, including verified policy enforcement.
- Manual: capo + capm3 with the SR-IOV plugin — details in #2234 (closed) comments.
Pre-requisite:
- Nodes must have Multus secondary interface.
Co-Author: AI/Claude
CI configuration
Below you can choose test deployment variants to run in this MR's CI.
Click to open to CI configuration
Legend:
| Icon | Meaning | Available values |
|---|---|---|
| Infra Provider | capd, capo, capm3 |
|
| Bootstrap Provider | kubeadm (alias kadm), rke2, okd, ck8s |
|
| Node OS | ubuntu, suse, na, leapmicro |
|
| Deployment Options | Deployment option list and description | |
| Pipeline Scenarios | Available scenario list and description | |
| Enabled units | Any available units name, by default apply to management and workload cluster. Can be prefixed by mgmt: or wkld: to be applied only to a specific cluster type |
|
| Disabled units | Any available units name, by default apply to management and workload cluster. Can be prefixed by mgmt: or wkld: to be applied only to a specific cluster type |
|
| Target platform | Can be used to select specific deployment environment Available platform list and description | |
| Pipeline control | autorun, manual or blocking. Can be used to override global config and start a deployment pipeline the required way |
-
🎬 preview☁️ capd🚀 kadm🐧 ubuntu -
🎬 preview☁️ capo🚀 rke2🐧 suse -
🎬 preview☁️ capm3🚀 rke2🐧 ubuntu -
☁️ capd🚀 kadm🛠️ light-deploy🐧 ubuntu -
☁️ capd🚀 rke2🛠️ light-deploy🐧 suse -
☁️ capo🚀 rke2🛠️ misc🐧 suse🟢 wkld:multus,wkld:multi-networkpolicy-nftables -
☁️ capm3🚀 rke2🛠️ misc🐧 suse🟢 wkld:multus,wkld:multi-networkpolicy-nftables -
☁️ capo🚀 rke2🐧 leapmicro -
☁️ capo🚀 kadm🐧 ubuntu -
☁️ capo🚀 kadm🐧 ubuntu🟢 neuvector,mgmt:harbor -
☁️ capo🚀 rke2🎬 rolling-update🛠️ ha🐧 ubuntu -
☁️ capo🚀 kadm🎬 wkld-k8s-upgrade🐧 ubuntu -
☁️ capo🚀 rke2🎬 rolling-update-no-wkld🛠️ ha🐧 suse -
☁️ capo🚀 rke2🎬 sylva-upgrade🛠️ ha🐧 ubuntu -
☁️ capo🚀 rke2🎬 sylva-upgrade-from-1.6.x🛠️ ha,misc🐧 ubuntu -
☁️ capo🚀 rke2🛠️ ha,misc🐧 ubuntu -
☁️ capo🚀 rke2🛠️ misc🐧 ubuntu🟢 mgmt:harbor🔴 neuvector -
☁️ capo🚀 rke2🛠️ ha,misc,openbao:penguin: suse -
☁️ capo🚀 rke2🐧 suse🎬 upgrade-from-prev-tag -
☁️ capm3🚀 rke2🐧 suse🟢 multi-networkpolicy-nftables -
☁️ capm3🚀 kadm🐧 ubuntu -
☁️ capm3🚀 ck8s🐧 ubuntu -
☁️ capm3🚀 kadm🎬 rolling-update-no-wkld🛠️ ha,misc🐧 ubuntu -
☁️ capm3🚀 rke2🎬 wkld-k8s-upgrade🛠️ ha🐧 suse -
☁️ capm3🚀 kadm🎬 rolling-update🛠️ ha🐧 ubuntu -
☁️ capm3🚀 rke2🎬 upgrade-from-prev-release-branch🛠️ ha🐧 suse -
☁️ capm3🚀 rke2🛠️ misc,ha🐧 suse -
☁️ capm3🚀 rke2🎬 sylva-upgrade🛠️ ha,misc🐧 suse -
☁️ capm3🚀 kadm🎬 rolling-update🛠️ ha🐧 suse -
☁️ capm3🚀 ck8s🎬 rolling-update🛠️ ha🐧 ubuntu -
☁️ capm3🚀 rke2|okd🎬 no-update🐧 ubuntu|na -
☁️ capm3🚀 rke2🐧 suse🎬 upgrade-from-release-1.5 -
☁️ capm3🚀 rke2🐧 suse🎬 upgrade-to-main
Global config for deployment pipelines
-
autorun pipelines
-
allow failure on pipelines
-
record sylvactl events
Notes:
- Enabling
autorunwill make deployment pipelines to be run automatically without human interaction - Disabling
allow failurewill make deployment pipelines mandatory for pipeline success. - if both
autorunandallow failureare disabled, deployment pipelines will need manual triggering but will be blocking the pipeline
Be aware: after configuration change, pipeline is not triggered automatically. Please run it manually (by clicking the run pipeline button in Pipelines tab) or push new code.
Edited by Thomas Morin