...
One of the requirements for VNF's is to support multiple virtual network interfaces and multiple IP addresses. Multus acts as a Multi plugin in Kubernetes and provides the multiple network interface support in a pod. https://github.com/intel/multus-cni. It'll be used in this project to provide a default management port based on Flannel to all VNF's. The other interfaces will all be based on ovn-kubernetes as discussed in the next section.
...
Create following network resource for OVN.
OVN network resources in Kubernetes:
apiVersion: "kubernetes.cni.cncf.io/v1"
kind: Network
metadata:
name: ovn-network
spec:
config: '{
"name": "ovn-kubernetes",
"type": "ovn-k8s-cni-overlay"
}'
...
apiVersion: v1
kind: Pod
metadata:
name: pod-ovn
annotations:
kubernetes.v1.cni.cncf.io/networks: '[
{ "name": "ovn-network", "interfaceRequest": "eth1"}
]'
spec: # specification of the pod's contents
containers:
- name: pod-ovn
image: "busybox"
command: ["top"]
stdin: true
tty: true
...
apiVersion: v1
kind: Pod
metadata:
name: pod-ovn
annotations:
kubernetes.v1.cni.cncf.io/networks: '[ { "name": "ovn-network"}]'
ovnNetwork: '[
{ "name": "ovn-ls-24", "interface": "net1", "ipAddress": "172.16.24.55", "macAddress": "0A:00:00:00:00:4E" },
{"name": "ovn-ls-24", "interface": "net2"}
]'
spec: # specification of the pod's contents
containers:
- name: pod-ovn
image: "busybox"
command: ["top"]
stdin: true
tty: true
Configuration details
Custom Resource Definition for ONAP Network(CRD) :
...
singular: onapnetwork
# kind is normally the CamelCased singular type. Your resource manifests use this.
kind: onapNetwork
# shortNames allow shorter string to match your resource on the CLI
shortNames:
- onapnetONAP Network Definition :
apiVersion: "kubernetes.onap.io/v1"
kind: onapNetwork
metadata:
name: ovn-ls-24
spec:
config: '{
"cnitype" : "ovn",
"name": " ovn-ls-24",
"subnet": " 172.16.24.0/24",
"gateway": " 172.16.24.1"
}'
If no cnitype defined default is ovn.
Pod/Service annotation:
apiVersion: v1
...
kubernetes.v1.cni.cncf.io/networks: '[{ "name": "ovn-network"}]'
kubernetes.v1.onap.io/onapnetworks:
{
"ovnNetwork":[
{
"name":"ovn-ls-26",
"interface":"net0",
"defaultGateway":"true"
},
{
"name":"ovn-ls-24",
"interface":"net1",
"defaultGateway":"false",
"ip_address":"172.16.24.2/24",
"mac_address":"0a:00:00:00:00:1e",
"gateway_ip":"172.16.24.1"
}
],
"ovnNetworkRoutes":[
{
"dst":"172.16.29.1/24",
"gw":"172.16.24.1"
}
]
}
Pod Annotation for CNI (Internal to the plugin)
...
ovnNetworkRoutes: [{ "dst": "172.16.29.1/24", "gw": “172.16.24.1” }]{
"ovnNetwork":[
{
"name":"ovn-ls-26",
"interface":"net0",
"defaultGateway":"true"
},
{
"name":"ovn-ls-24",
"interface":"net1",
"defaultGateway":"false",
"ip_address":"172.16.24.2/24",
"mac_address":"0a:00:00:00:00:1e",
"gateway_ip":"172.16.24.1"
}
],
"ovnNetworkRoutes":[
{
"dst":"172.16.29.1/24",
"gw":"172.16.24.1"
}
]
}