Skip to content

Multi-VRFs documentation#2665

Open
matthewdupre wants to merge 4 commits into
tigera:mainfrom
matthewdupre:multi-vrfs
Open

Multi-VRFs documentation#2665
matthewdupre wants to merge 4 commits into
tigera:mainfrom
matthewdupre:multi-vrfs

Conversation

@matthewdupre
Copy link
Copy Markdown
Member

<!--- PR title format: [GH#][DOCS#]: --->

Product Version(s):

Issue:

Link to docs preview:

SME review:

  • An SME has approved this change.

DOCS review:

  • A member of the docs team has approved this change.

Additional information:

Merge checklist:

  • Deploy preview inspected wherever changes were made
  • Build completed successfully
  • Test have passed

Copilot AI review requested due to automatic review settings April 27, 2026 17:53
@matthewdupre matthewdupre added the [DON'T MERGE] Author wants to postpone the merge label Apr 27, 2026
@netlify
Copy link
Copy Markdown

netlify Bot commented Apr 27, 2026

Deploy Preview for calico-docs-preview-next failed. Why did it fail? →

Name Link
🔨 Latest commit b975dd7
🔍 Latest deploy log https://app.netlify.com/projects/calico-docs-preview-next/deploys/6a0dad0edfdcd2000810bae5

@netlify
Copy link
Copy Markdown

netlify Bot commented Apr 27, 2026

Deploy Preview for tigera failed. Why did it fail? →

Built without sensitive environment variables

Name Link
🔨 Latest commit b975dd7
🔍 Latest deploy log https://app.netlify.com/projects/tigera/deploys/6a0dad0e72a4d600083ea162

@matthewdupre matthewdupre changed the title [Do not merge] Multi-VRFs documentation [Not ready for review] Multi-VRFs documentation Apr 27, 2026
@matthewdupre matthewdupre removed the [DON'T MERGE] Author wants to postpone the merge label May 20, 2026
@matthewdupre matthewdupre marked this pull request as ready for review May 20, 2026 12:46
@matthewdupre matthewdupre requested a review from a team as a code owner May 20, 2026 12:46
@matthewdupre matthewdupre changed the title [Not ready for review] Multi-VRFs documentation Multi-VRFs documentation May 20, 2026
Copy link
Copy Markdown
Collaborator

@ctauchen ctauchen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@matthewdupre Thanks for this! A few comments, mostly small suggestions.

One general thing we could improve (perhaps before GA), would be to make the full procedure more specific. Much of the procedural content is pretty high-level, leaving users to fill in the details themselves.

I'm happy enough to get this in now for testing and the release. Might be worth chatting about it and revising before GA.

LGTM, with suggestions.

```

:::tip
On Ubuntu <= 25.04, `apt install linux-generic`.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This < character is killing the build. Suggest you rewrite as follows:

On Ubuntu 25.04 or earlier,

On Ubuntu 25.10 or later,

This does leave me wondering about the .05-.09 releases, for what it's worth.


## Big picture

Attach pods to one or more Virtual Routing and Forwarding (VRF) domains
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Attach pods to one or more Virtual Routing and Forwarding (VRF) domains
Attach pods to one or more virtual routing and forwarding (VRF) domains

- **Reach and be reached from overlapping external IPs.** The same external IP address can be reused
in multiple tenant networks outside the cluster. Pods on a VRF can reach the
copy of that IP in their own tenant network, and responses come back in the
correct VRF. Services backed by VRF attached pods can also be exported to
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
correct VRF. Services backed by VRF attached pods can also be exported to
correct VRF. Services backed by VRF attached pods can also be exported to

worth removing all double spaces


Typically the easiest way to use VRFs will be to attach pods to the flat network
(with the primary interface), and then whichever VRF networks are required using
Multus `NetworkAttachmentDefinition`s. `multus-service` can then be used to
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Best to describe generically or use the code as a modifier. Helpful for people not already familiar with what you're referring to.

using Multus network attachment definitions.
using Multus NetworkAttachmentDefinition resources.

Same goes for multus-service and similar cases elsewhere.

**Required**

- $[prodname] installed with the **nftables dataplane** (`linuxDataplane: Nftables` in the [Installation](../../reference/installation/api.mdx) resource).
The iptables and eBPF dataplanes are not supported in the tech preview, eBPF will be added before GA but iptables support is not planned.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove. The first bit is covered in your previous line, and we don't want to be announcing future work. We'll add that when it happens.

Comment on lines +120 to +128
```bash
sudo modprobe vrf && lsmod | grep '^vrf '
```

:::tip
On Ubuntu <= 25.04, `apt install linux-generic`.
On Ubuntu >= 25.10, the module is built in.
On RHEL, the module is built in.
:::
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm inclined to say we can expect people to figure out whether they have this module and to install if necessary. For economy's sake, I'd scrap these lines.

:::

- BGP peering configured between each node and the upstream router on each VRF (see [Create BGPPeers and BGPFilters](#create-bgppeers-and-bgpfilters)).
- [Multus](./multiple-networks.mdx) installed if you want to attach pods to a VRF using a secondary interface (the most common topology).
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- [Multus](./multiple-networks.mdx) installed if you want to attach pods to a VRF using a secondary interface (the most common topology).
- If you want to attach pods to a VRF using a secondary interface (the most common topology), you need to have [Multus](./multiple-networks.mdx) installed on your cluster.

Always best to lead with conditionals.

Comment on lines +133 to +135
**Recommended**

- Pin `nodeAddressAutodetection` in the [Installation](../../reference/installation/api.mdx) to a specific interface (for example `eth0`) or to `kubernetes: NodeInternalIP`. The default "first found" autodetection can chase a VRF-attached interface when additional interfaces are brought up, breaking the cluster.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This sounds important. Can we just make it a requirement?

Comment on lines +153 to +154
- **Dataplane**: only the [nftables dataplane](../../operations/nftables.mdx) is supported. iptables and eBPF are not supported.
- **kube-proxy**: must be in `nftables` mode. `ipvs` mode is **never** supported (this is a permanent restriction, not a tech-preview limitation).
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

covered already in the requirements section

Comment on lines +166 to +171
## Requirements

- Linux kernel **5.6 or later** (for the `meta sdifname` nftables match used by VRF policy dispatch).
- The `vrf` kernel module must be loaded on every node. On Ubuntu this is part of `linux-modules-extra-$(uname -r)`. Confirm with `sudo modprobe vrf && lsmod | grep '^vrf '`.
- $[prodname] must be installed with `linuxDataplane: Nftables` and kube-proxy must also be in nftables mode.
- The cluster's [Installation](../installation/api.mdx) should pin `nodeAddressAutodetection` to a specific interface or to `kubernetes: NodeInternalIP`. The default "first found" autodetection can chase a VRF-attached interface and break the cluster when extra interfaces are added.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is already covered above

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants