Virtual Network (VNET)#
The Virtual Network (VNET
) application is a resource designed to group and manage network services together, typically deployed as overlay services. The VNET simplifies management by serving as a single input for a set of resources that support a common set of applications.
Core Components of VNET#
The primary components that make up the VNET include:
-
BridgeDomain: Represents a Layer 2 broadcast domain. It is used in conjunction with VLAN and BridgeInterface resources, which attach sub-interfaces to this L2 broadcast domain.
-
VLAN: Groups sub-interfaces together under a common VLAN ID. VLAN IDs can be automatically assigned from a pool or manually set by the user. The VLAN uses a label selector to select the interfaces on which to provisioning the sub-interfaces.
-
BridgeInterface: Allows operators to manually attach a sub-interface to a specific BridgeDomain.
-
Router: Acts as a Layer 3 domain manager. It can connect multiple BridgeDomains through an
IRBInterface
or link directly toRoutedInterfaces
. -
IRBInterface (Integrated Routing and Bridging Interface): Connects a BridgeDomain to a Router, facilitating communication between Layer 2 and Layer 3 networks.
-
RoutedInterface: Represents a directly connected Layer 3 interface on a device that is attached to a Router.
-
DHCPRelay: Enables DHCP relay functionality on sub-interfaces within the VNET, facilitating dynamic IP address allocation.
Additional Capabilities#
- PE-CE BGP: The VNET also supports Provider Edge to Customer Edge (PE-CE) BGP.
- IP Filters: IPv4, IPv6 and MAC filters can also be used within the
VirtualNetwork
. - DSCP and Dot1p classifiers: Attachment of DSCP and Dot1p classifiers are also supported.
Example VNETs#
Layer 2 VNET#
cat << 'EOF' | tee l2-vnet.yaml | kubectl apply -f -
---
apiVersion: services.eda.nokia.com/v1alpha1
kind: VirtualNetwork
metadata:
name: vnet1
spec:
bridgeDomains:
- name: bd1
spec:
vniPool: vni-pool
eviPool: evi-pool
tunnelIndexPool: tunnel-index-pool
l2proxyARPND:
dynamicLearning:
ageTime: 2000
enabled: true
sendRefresh: 2000
ipDuplication:
enabled: true
holdDownTime: 10
monitoringWindow: 10
numMoves: 4
proxyARP: true
vlans:
- name: storage
spec:
bridgeDomain: bd1
interfaceSelector: ["eda.nokia.com/edgeLinkType=storage"]
vlanPool: vlan-pool
- name: compute
spec:
bridgeDomain: bd1
interfaceSelector: ["eda.nokia.com/edgeLinkType=compute"]
vlanPool: vlan-pool
---
EOF
---
apiVersion: services.eda.nokia.com/v1alpha1
kind: VirtualNetwork
metadata:
name: vnet1
spec:
bridgeDomains:
- name: bd1
spec:
vniPool: vni-pool
eviPool: evi-pool
tunnelIndexPool: tunnel-index-pool
l2proxyARPND:
dynamicLearning:
ageTime: 2000
enabled: true
sendRefresh: 2000
ipDuplication:
enabled: true
holdDownTime: 10
monitoringWindow: 10
numMoves: 4
proxyARP: true
vlans:
- name: storage
spec:
bridgeDomain: bd1
interfaceSelector: ["eda.nokia.com/edgeLinkType=storage"]
vlanPool: vlan-pool
- name: compute
spec:
bridgeDomain: bd1
interfaceSelector: ["eda.nokia.com/edgeLinkType=compute"]
vlanPool: vlan-pool
---
Layer 3 VNET#
cat << 'EOF' | tee l3-vnet.yaml | kubectl apply -f -
---
apiVersion: services.eda.nokia.com/v1alpha1
kind: VirtualNetwork
metadata:
name: vnet2
spec:
routers:
- name: routetable1
spec:
routerID: 5.4.3.2
vniPool: vni-pool
eviPool: evi-pool
tunnelIndexPool: tunnel-index-pool
bridgeDomains:
- name: app1
spec:
vniPool: vni-pool
eviPool: evi-pool
tunnelIndexPool: tunnel-index-pool
- name: app2
spec:
vniPool: vni-pool
eviPool: evi-pool
tunnelIndexPool: tunnel-index-pool
irbInterfaces:
- name: irb1
spec:
bridgeDomain: app1
router: routetable1
bfd:
desiredMinTransmitInt: 150002
detectionMultiplier: 4
enabled: true
requiredMinReceive: 150000
evpnRouteAdvertisementType:
arpStatic: true
arpDynamic: true
hostRoutePopulate:
dynamic: true
evpn: true
ipv4Addresses:
- ipPrefix: 13.3.3.1/24
primary: true
- ipPrefix: 14.4.4.1/24
ipv6Addresses:
- ipPrefix: fc00:31::1/120
primary: true
- ipPrefix: fc00:41::1/120
- name: irb2
spec:
bridgeDomain: app2
router: routetable1
bfd:
desiredMinTransmitInt: 150002
detectionMultiplier: 4
enabled: true
requiredMinReceive: 150000
evpnRouteAdvertisementType:
arpStatic: true
arpDynamic: true
hostRoutePopulate:
dynamic: true
static: false
evpn: true
ipv4Addresses:
- ipPrefix: 15.3.3.1/24
primary: true
- ipPrefix: 16.4.4.1/24
ipv6Addresses:
- ipPrefix: fc00:51::1/120
primary: true
- ipPrefix: fc00:61::1/120
vlans:
- name: vlan1
spec:
bridgeDomain: app1
interfaceSelector: ["eda.nokia.com/edgeLinkType=storage"]
vlanPool: vlan-pool
- name: vlan2
spec:
bridgeDomain: app2
interfaceSelector: ["eda.nokia.com/edgeLinkType=compute"]
vlanPool: vlan-pool
EOF
---
apiVersion: services.eda.nokia.com/v1alpha1
kind: VirtualNetwork
metadata:
name: vnet2
spec:
routers:
- name: routetable1
spec:
routerID: 5.4.3.2
vniPool: vni-pool
eviPool: evi-pool
tunnelIndexPool: tunnel-index-pool
bridgeDomains:
- name: app1
spec:
vniPool: vni-pool
eviPool: evi-pool
tunnelIndexPool: tunnel-index-pool
- name: app2
spec:
vniPool: vni-pool
eviPool: evi-pool
tunnelIndexPool: tunnel-index-pool
irbInterfaces:
- name: irb1
spec:
bridgeDomain: app1
router: routetable1
bfd:
desiredMinTransmitInt: 150002
detectionMultiplier: 4
enabled: true
requiredMinReceive: 150000
evpnRouteAdvertisementType:
arpStatic: true
arpDynamic: true
hostRoutePopulate:
dynamic: true
evpn: true
ipv4Addresses:
- ipPrefix: 13.3.3.1/24
primary: true
- ipPrefix: 14.4.4.1/24
ipv6Addresses:
- ipPrefix: fc00:31::1/120
primary: true
- ipPrefix: fc00:41::1/120
- name: irb2
spec:
bridgeDomain: app2
router: routetable1
bfd:
desiredMinTransmitInt: 150002
detectionMultiplier: 4
enabled: true
requiredMinReceive: 150000
evpnRouteAdvertisementType:
arpStatic: true
arpDynamic: true
hostRoutePopulate:
dynamic: true
static: false
evpn: true
ipv4Addresses:
- ipPrefix: 15.3.3.1/24
primary: true
- ipPrefix: 16.4.4.1/24
ipv6Addresses:
- ipPrefix: fc00:51::1/120
primary: true
- ipPrefix: fc00:61::1/120
vlans:
- name: vlan1
spec:
bridgeDomain: app1
interfaceSelector: ["eda.nokia.com/edgeLinkType=storage"]
vlanPool: vlan-pool
- name: vlan2
spec:
bridgeDomain: app2
interfaceSelector: ["eda.nokia.com/edgeLinkType=compute"]
vlanPool: vlan-pool
Verify the status of the VirtualNetwork
#
Verify the fabric operational state: