Skip to content

Networking

IMP manages VM networking through ImpNetwork objects. The data plane runs on each node via the agent.

Sections

Default Behavior

Without explicit IPAM configuration, IMP allocates VM IPs from ImpNetwork.spec.subnet using its internal allocator.

CNI Integration

Cilium is the first-class CNI path. IMP detects Cilium presence at agent startup and enables Cilium-native IPAM when configured.

Non-Cilium environments use the internal IPAM provider — set spec.ipam.provider: internal or omit the ipam block.

Network Groups

VMs in the same ImpNetwork can be placed into named groups via spec.networkGroup. The controller automatically carves a dedicated subnet for each group from spec.subnet.

yaml
apiVersion: imp.dev/v1alpha1
kind: ImpNetwork
metadata:
  name: vm-net-a
  namespace: default
spec:
  subnet: 10.44.0.0/24
  groups:
    - name: workers
      expectedSize: 14   # → /28 (14 usable IPs)
    - name: controllers
      expectedSize: 4    # → /29 (6 usable IPs)

Groups are sorted alphabetically and subnets are carved consecutively:

GroupCIDR
controllers10.44.0.0/29
workers10.44.0.16/28

Subnet assignment is stored in status.groupCIDRs and is stable (same group always gets the same CIDR as long as spec.groups is unchanged). VMs not in any group receive IPs from the full spec.subnet.

To place a VM in a group:

yaml
apiVersion: imp.dev/v1alpha1
kind: ImpVM
metadata:
  name: worker-1
spec:
  networkRef:
    name: vm-net-a
  networkGroup: workers