From: Hannes Laimer <h.laimer@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH pve-docs v2 26/27] sdn: add microsegmentation section
Date: Thu, 9 Jul 2026 11:18:51 +0200 [thread overview]
Message-ID: <20260709091852.538885-27-h.laimer@proxmox.com> (raw)
In-Reply-To: <20260709091852.538885-1-h.laimer@proxmox.com>
Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
pvesdn.adoc | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 118 insertions(+)
diff --git a/pvesdn.adoc b/pvesdn.adoc
index 3fd3533..bb8a36e 100644
--- a/pvesdn.adoc
+++ b/pvesdn.adoc
@@ -443,6 +443,124 @@ DNS Zone Prefix:: Add a prefix to the domain registration, like
<hostname>.prefix.<domain> Optional.
+[[pvesdn_config_microseg]]
+Microsegmentation
+-----------------
+
+Microsegmentation enforces an allow/deny policy between groups of guests at the
+guest network interface, independent of IP addressing. Each interface can be
+assigned a set of *groups*, and *rules* between groups decide which traffic is
+allowed. Enforcement happens in the kernel via eBPF programs attached to the
+guest interfaces, on the receiving side.
+
+The default is deny. Without a matching rule, traffic between groups is
+dropped, so every allowed flow needs an explicit rule.
+
+To carry the group identity between nodes on a VXLAN-based zone, the underlying
+VXLAN must have Group Based Policy enabled via the `VXLAN-GBP` option on the
+zone (see xref:pvesdn_zone_plugin_vxlan[VXLAN Zones] and
+xref:pvesdn_zone_plugin_evpn[EVPN Zones]). An SRv6-based carrier for routed
+setups exists at the API level, without UI support yet. Traffic that stays on a
+single node needs no extra configuration. A guest cannot forge its own group, as the
+host stamps it at the interface. The underlay is trusted, much like a VLAN tag.
+
+[[pvesdn_microseg_group]]
+Groups
+~~~~~~
+
+A group is a label applied to one or more guest interfaces. An interface can
+carry several groups at once. Its memberships form a set, the union of every
+assignment that covers it. Rules do not target interfaces directly but match
+this set through their predicates, so combinations of groups (a guest that is
+both `prod` and `web`) can be addressed without defining a group for every
+combination.
+
+Group configuration options:
+
+Name:: An identifier for the group.
+
+Mark:: A unique number from 1 to 65535 identifying the group, auto-assigned if
+ omitted. What is carried on the wire is a compact identity derived from an
+ interface's whole group set, not the individual marks.
+
+Comment:: Optional descriptive comment.
+
+[[pvesdn_microseg_rule]]
+Rules
+~~~~~
+
+A rule permits or denies traffic between a *source* and a *destination*
+predicate, each evaluated against an interface's group set by a match kind. As
+the default is deny, rules are only needed to permit traffic (or to deny a flow
+within a broader allow). Traffic within a single group is not permitted
+implicitly, so add an explicit rule for it.
+
+Rules are stateless and directional. Each packet is checked on its own, the
+source predicate against the sender's groups and the destination predicate
+against the receiver's, with no connection tracking. Return traffic needs its
+own rule. For a TCP connection from `web` to `app`, both a `web` to `app` and
+an `app` to `web` allow are required.
+
+Rule configuration options:
+
+Source / Destination:: The groups each predicate is evaluated against.
+
+Source match / Destination match:: How the predicate matches an interface's
+ groups. *any* fires when the set shares at least one listed group, *all* when
+ it has all of them, and *exact* when the groups equal the listed set.
+
+Priority:: On a conflict the highest-priority matching rule wins. Conflicting
+ verdicts tied at the top priority deny.
+
+Action:: Allow or deny.
+
+A built-in *untagged* group represents the no-group identity, an interface in no
+group, an external host, or a cross-node frame that arrives without a GBP tag.
+List it in a predicate like any other group, on its own (`exact` over
+`untagged`) or combined with real groups (`any` over `untagged, web`), to admit
+such traffic. This is what lets a managed guest exchange ARP / DHCP and reach its
+gateway, which are themselves untagged and would otherwise be dropped. It is
+meaningful as a rule *source*. As a destination it has no effect, since an
+untagged interface has no program to enforce on. The `untagged` group cannot be
+used in an assignment.
+
+[[pvesdn_microseg_assignment]]
+Assignments
+~~~~~~~~~~~
+
+An assignment binds guest network interfaces to a set of groups. It matches a
+specific guest, guests by their tags, or guests whose name matches a regular
+expression. An interface may be placed in several groups (by one assignment
+listing multiple groups, or by several assignments).
+
+The *tag* and *name regex* matchers are dynamic. They are re-evaluated against
+the current guests whenever the SDN configuration is applied, so tagging or
+renaming a guest shows up as a pending SDN change and takes effect on the next
+apply (until then a newly matched guest is treated as it was at the last apply,
+i.e. fail-closed). Both match at the guest level, so unless a specific interface
+is named the assignment covers all of a matching guest's interfaces.
+
+Assignment configuration options:
+
+Match by:: Whether to match a specific *guest*, guests by *tags*, or guests by
+ a *name regex*.
+
+Guest:: (guest matcher) The VM or container.
+
+Tags:: (tag matcher) The guest tags to match.
+
+Tag match:: (tag matcher) Whether a guest must carry *any* of the listed tags
+ (the default), *all* of them, or have *exact*ly the listed set.
+
+Name regex:: (regex matcher) A regular expression matched against each guest's
+ name (VM name or container hostname). It matches anywhere in the name, so anchor
+ it with `^` and `$` to match the whole name.
+
+Network interface:: Optional. The guest's netN interface. If left empty, all of
+ the guest's interfaces are covered.
+
+Groups:: The groups the matching interfaces are placed into.
+
[[pvesdn_config_controllers]]
Controllers
-----------
--
2.47.3
next prev parent reply other threads:[~2026-07-09 9:23 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-09 9:18 SPAM: [RFC cluster/docs/ifupdown2/manager/network/proxmox{-ve-rs,-ebpf,-perl-rs} v2 00/27] sdn: add microsegmentation support Hannes Laimer
2026-07-09 9:18 ` [PATCH proxmox-ve-rs v2 01/27] ve-config: sdn: add microseg signature-identity engine Hannes Laimer
2026-07-09 9:18 ` [PATCH proxmox-ve-rs v2 02/27] ve-config: sdn: add microseg config types Hannes Laimer
2026-07-09 9:18 ` [PATCH proxmox-ve-rs v2 03/27] ve-config: sdn: microseg: add tag matcher Hannes Laimer
2026-07-09 9:18 ` [PATCH proxmox-ve-rs v2 04/27] ve-config: sdn: microseg: add name regex matcher Hannes Laimer
2026-07-09 9:18 ` [PATCH proxmox-ve-rs v2 05/27] ve-config: sdn: microseg: add carrier bridge section Hannes Laimer
2026-07-09 9:18 ` [PATCH proxmox-ebpf v2 06/27] agent: add userspace coordinator and stateless policy subsystem Hannes Laimer
2026-07-09 9:18 ` [PATCH proxmox-ebpf v2 07/27] bpf: add bridge subsystem Hannes Laimer
2026-07-09 9:18 ` [PATCH proxmox-ebpf v2 08/27] debian: add packaging and boot-time oneshot unit Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-cluster v2 09/27] cfs: add 'sdn/microseg.cfg' to observed files Hannes Laimer
2026-07-09 9:18 ` [PATCH proxmox-perl-rs v2 10/27] pve-rs: sdn: add microseg config binding Hannes Laimer
2026-07-09 9:18 ` [PATCH ifupdown2 v2 11/27] d/patches: add support for VXLAN-GBP flag Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-network v2 12/27] sdn: microseg: add config, API and guest inventory Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-network v2 13/27] sdn: dry-run: surface pending microseg changes Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-network v2 14/27] sdn: zones: trigger microseg apply on tap_plug Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-network v2 15/27] sdn: zones: add vxlan-gbp option to vxlan and evpn zones Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-network v2 16/27] evpn: disable vxlan-learning on create if GBP is enabled Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-network v2 17/27] sdn: microseg: add tag matcher Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-network v2 18/27] sdn: microseg: add name regex matcher Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-network v2 19/27] sdn: microseg: add carrier bridge API Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-manager v2 20/27] ui: sdn: add microsegmentation panel Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-manager v2 21/27] ui: sdn: dry-run: show pending microseg diff Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-manager v2 22/27] network: apply microseg state on reload Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-manager v2 23/27] ui: sdn: zones: add vxlan-gbp checkbox to vxlan and evpn Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-manager v2 24/27] ui: sdn: microseg: add tag matcher Hannes Laimer
2026-07-09 9:18 ` [PATCH pve-manager v2 25/27] ui: sdn: microseg: add name regex matcher Hannes Laimer
2026-07-09 9:18 ` Hannes Laimer [this message]
2026-07-09 9:18 ` [PATCH pve-docs v2 27/27] sdn: add VXLAN-GBP flag to evpn/vxlan zone sections Hannes Laimer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260709091852.538885-27-h.laimer@proxmox.com \
--to=h.laimer@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.