Manual IP Provisioning Operator
The manual-ip-provisioning-operator handles network provisioning for NetworkNamespace resources configured with networkProvisioning.provider: manual.
Purpose
In environments where network segments (IP prefixes, VLANs) are managed externally — for example by a network team, an enterprise IPAM system, or pre-existing infrastructure — the manual provisioning operator allows users to supply this information directly in the NetworkNamespace spec rather than relying on an automated provisioning backend.
How It Works
sequenceDiagram
participant User
participant K8s as Kubernetes API
participant Op as manual-ip-provisioning-operator
participant Downstream as kea-operator / static-ip-operator
User->>K8s: Create NetworkNamespace (provider: manual)
K8s->>Op: Watch event
Op->>K8s: Set provisioningPhase: Ready<br/>Populate status fields from spec.manual
K8s->>Downstream: NetworkNamespace.status.provisioningPhase = Ready
Downstream->>K8s: Begin IP allocation
- User creates a
NetworkNamespacewithspec.networkProvisioning.provider: manual - The operator reads the manual configuration (
ipv4CIDR,ipv4Gateway,vlanId) - Populates
statusfields (ipv4Prefix,vlanId, etc.) from the manual config - Sets
status.provisioningPhase: Ready - Downstream operators (kea-operator, static-ip-operator) detect
Readyand begin
Configuration
The operator requires no special configuration. It watches all NetworkNamespace resources and only acts on those with spec.networkProvisioning.provider: manual.
Installation
helm install manual-ip-provisioning-operator \
oci://ghcr.io/vitistack/helm/manual-ip-provisioning-operator \
--namespace vitistack-system
Example
apiVersion: vitistack.io/v1alpha2
kind: NetworkNamespace
metadata:
name: lab-network
namespace: datacenter-01
spec:
datacenterIdentifier: no-west-az1
supervisorIdentifier: lab-01
networkProvisioning:
provider: manual
manual:
ipv4CIDR: "192.168.10.0/24"
ipv4Gateway: "192.168.10.1"
vlanId: 200
ipAllocation:
type: static
provider: static-ip-operator
static:
ipv4CIDR: "192.168.10.0/24"
ipv4Gateway: "192.168.10.1"
ipv4RangeStart: "192.168.10.10"
ipv4RangeEnd: "192.168.10.200"
vlanId: 200
dns:
- "192.168.10.1"
After the operator reconciles:
status:
provisioningPhase: Ready
ipv4Prefix: "192.168.10.0/24"
vlanId: 200
datacenterIdentifier: no-west-az1
supervisorIdentifier: lab-01
phase: Active
status: OK