OVN4NFV is the Network controller designed based on the K8s controller framework and provides Open flow control based on OVN. This address OVN based Multiple Network creation, support Multiple network interfaces and support Virtual networking and Provider networkings.
Application transformation is one of the major objectives in the edge computing in the cloud-native evolution. Taking a PNF(Physical Network Function) or a VNF(Virtual Network Functions) to be ready to deploy in the edge is as challenging because the NFs(Network Functions) are composited into smaller microservices and these microservers will be deployed in the multiple edge location. Controlling the network traffics such as both control plane and data plane traffics in the scenarios is required to achieve low latency and multiple clusters networking
Adding Multi cluster networking is a challenging requirement for Edge networking in the cloud-native world. As Kubernetes delegates all the networking features to CNI(Container Network Interfaces), and right now we have 16+ CNI types that offer various networking features starting from localhost to BGP networking. Having a single network controller for the Multiple Cluster within an edge and also across geo-distributed edge location is a requirement to create a virtual network, provider networks across the edges, and apply the same tuning parameter for the network resources in the edges.
As edge locations are as small as 16 GB RAM, we don't have the options to run multiple network controller in edge, we required to have single network controller that could handle all the network requirement of the edge.
OVN4NFV is designed to address all the challenges. We designed the very thin layer of CNI shim that development to maintain the CNI framework and all the networking complexity such as Multiple networking, handling the infinite network resouces and finite network resources are moved in a single network controller.
OVN4NFV uses the NFN operator to define the virtual network CRs that will create a OVN networking for virtual networking as defined in the CR.
apiVersion: k8splugin.opnfv.org/v1alpha1 kind: Network metadata: name: ovn-priv-net spec: cniType: ovn4nfv ipv4subnets: - subnet: 172.16.33.0/24 name: subnet1 gateway: 172.16.33.1/24 excludeIps: 172.16.33.2 172.16.33.5..172.16.33.10 |
This CR defines the OVN networking and provides the gateway and exclude IPs to be reserved for any internal static IP address assignment.
Provider network supports both VLAN and direct provider networking
apiVersion: k8s.plugin.opnfv.org/v1alpha1 kind: ProviderNetwork metadata: name: pnetwork spec: cniType: ovn4nfv ipv4Subnets: - subnet: 172.16.33.0/24 name: subnet1 gateway: 172.16.33.1/24 excludeIps: 172.16.33.2 172.16.33.5..172.16.33.10 providerNetType: VLAN vlan: vlanId: "100" providerInterfaceName: eth0 logicalInterfaceName: eth0.100 vlanNodeSelector: specific nodeLabelList: - kubernetes.io/hostname=ubuntu18 |
The major change between the VLAN provider network and direct provide networks is the VLAN information is provided in the VLAN CR and they are excluded in the direct provider
apiVersion: k8s.plugin.opnfv.org/v1alpha1 kind: ProviderNetwork metadata: name: directpnetwork spec: cniType: ovn4nfv ipv4Subnets: - subnet: 172.16.34.0/24 name: subnet2 gateway: 172.16.34.1/24 excludeIps: 172.16.34.2 172.16.34.5..172.16.34.10 providerNetType: DIRECT direct: providerInterfaceName: eth1. directNodeSelector: specific nodeLabelList: - kubernetes.io/hostname=ubuntu18 |
apiVersion: k8splugin.opnfv.org/v1alpha1 kind: NetworkChaining metadata: name: chain1 namespace: vFW spec: type: Routing routingSpec: leftNetwork: - networkName: ovn-provider1 gatewayIP: 10.1.5.1 subnet: 10.1.5.0/24 rightNetwork: - networkName: ovn-provider1 gatewayIP: 10.1.10.1 subnet: default networkChain: app=slb, ovn-net1, app=ngfw, ovn-net2, app=sdwancnf |
apiVersion: k8splugin.opnfv.org/v1alpha1 kind: Network metadata: name: ovn-priv-net spec: cniType: ovn4nfv interface: - Type:sriov deviceName: intel.com/intel_sriov_700 ipv4subnets: - subnet: 172.16.33.0/24 name: subnet1 gateway: 172.16.33.1/24 excludeIps: 172.16.33.2 172.16.33.5..172.16.33.10 NodeSelector: specific nodeLabelList: - feature.node.kubernetes.io/network-sriov.capable=true - feature.node.kubernetes.io/custom-xl710.present=true |
apiVersion: k8s.plugin.opnfv.org/v1alpha1 kind: ProviderNetwork metadata: name: pnetwork spec: cniType: ovn4nfv interface: - Type:sriov deviceName: intel.com/intel_sriov_700 ipv4Subnets: - subnet: 172.16.33.0/24 name: subnet1 gateway: 172.16.33.1/24 excludeIps: 172.16.33.2 172.16.33.5..172.16.33.10 providerNetType: VLAN vlan: vlanId: "100" providerInterfaceName: eth0 logicalInterfaceName: eth0.100 vlanNodeSelector: specific nodeLabelList: - feature.node.kubernetes.io/network-sriov.capable=true - feature.node.kubernetes.io/custom-xl710.present=true |
apiVersion: k8s.plugin.opnfv.org/v1alpha1 kind: ProviderNetwork metadata: name: directpnetwork spec: cniType: ovn4nfv interface: - Type:sriov deviceName: intel.com/intel_sriov_700 ipv4Subnets: - subnet: 172.16.34.0/24 name: subnet2 gateway: 172.16.34.1/24 excludeIps: 172.16.34.2 172.16.34.5..172.16.34.10 providerNetType: DIRECT direct: providerInterfaceName: eth1. directNodeSelector: specific nodeLabelList: - feature.node.kubernetes.io/network-sriov.capable=true - feature.node.kubernetes.io/custom-xl710.present=true |
Parameter definition:
interface - Define the type of sriov interface to be created.
deviceName - Define device plugin to be targeted to get the pod resource information from the kubelet api - For more information refer here -
https://github.com/kubernetes/kubernetes/blob/master/test/e2e_node/util.go