adding multus-daemonset json fixes
[ovn4nfv-k8s-plugin.git] / README.md
1 # OVN4NFV K8s Plugin - Network controller
2 This plugin addresses the below requirements, for networking
3 workloads as well typical application workloads
4 - Multi ovn network support
5 - Multi-interface ovn support
6 - Multi-IP address support
7 - Dynamic creation of virtual networks
8 - Route management across virtual networks and external networks
9 - Service Function chaining(SFC) support in Kubernetes
10 - SRIOV Overlay networking (WIP)
11 - OVN load balancer (WIP)
12
13 ## How it works
14
15 OVN4NFV consist of 4 major components
16 - OVN control plane
17 - OVN controller
18 - Network Function Network(NFN) k8s operator/controller
19 - Network Function Network(NFN) agent
20
21 OVN control plane and OVN controller take care of OVN configuration and installation in each node in Kubernetes. NFN operator runs in the Kubernetes master and NFN agent run as a daemonset in each node.
22
23 ### OVN4NFV architecture blocks
24 ![ovn4nfv k8s arc block](./images/ovn4nfv-k8s-arch-block.png)
25
26 #### NFN Operator
27 * Exposes virtual, provider, chaining CRDs to external world
28 * Programs OVN to create L2 switches
29 * Watches for PODs being coming up
30  * Assigns IP addresses for every network of the deployment
31  * Looks for replicas and auto create routes for chaining to work
32  * Create LBs for distributing the load across CNF replicas
33 #### NFN Agent
34 * Performs CNI operations.
35 * Configures VLAN and Routes in Linux kernel (in case of routes, it could do it in both root and network namespaces)
36 * Communicates with OVSDB to inform of provider interfaces. (creates ovs bridge and creates external-ids:ovn-bridge-mappings)
37
38 ### Networks traffice between pods
39 ![ovn4nfv network traffic](./images/ovn4nfv-network-traffic.png)
40
41 ovn4nfv-default-nw is the default logic switch create for the default networking in kubernetes pod network for cidr 10.233.64.0/18. Both node and pod in the kubernetes cluster share the same ipam information.
42
43 ### Service Function Chaining Demo
44 ![sfc-with-sdewan](./images/sfc-with-sdewan.png)
45
46 In general production env, we have multiple Network function such as SLB, NGFW and SDWAN CNFs.
47
48 There are general 3 sfc flows are there:
49 * Packets from the pod to reach internet: Ingress (L7 LB) -> SLB -> NGFW -> SDWAN CNF -> External router -> Internet
50 * Packets from the pod to internal server in the corp network: Ingress (L7 LB) -> SLB -> M3 server
51 * Packets from the internal server M3 to reach internet: M3 -> SLB -> NGFW -> SDWAN CNF -> External router -> Internet
52
53 OVN4NFV SFC currently support all 3 follows. The detailed demo is include [demo/sfc-setup/README.md](./demo/sfc-setup/README.md)
54
55 # Quickstart Installation Guide
56 ### kubeadm
57
58 Install the [docker](https://docs.docker.com/engine/install/ubuntu/) in the Kubernetes cluster node.
59 Follow the steps in [create cluster kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/) to create kubernetes cluster in master
60 In the master node run the `kubeadm init` as below. The ovn4nfv uses pod network cidr `10.233.64.0/18`
61 ```
62     $ kubeadm init --kubernetes-version=1.19.0 --pod-network-cidr=10.233.64.0/18 --apiserver-advertise-address=<master_eth0_ip_address>
63 ```
64 Ensure the master node taint for no schedule is removed and labelled with `ovn4nfv-k8s-plugin=ovn-control-plane`
65 ```
66 nodename=$(kubectl get node -o jsonpath='{.items[0].metadata.name}')
67 kubectl taint node $nodename node-role.kubernetes.io/master:NoSchedule-
68 kubectl label --overwrite node $nodename ovn4nfv-k8s-plugin=ovn-control-plane
69 ```
70 Deploy the ovn4nfv Pod network to the cluster.
71 ```
72     $ kubectl apply -f deploy/ovn-daemonset.yaml
73     $ kubectl apply -f deploy/ovn4nfv-k8s-plugin.yaml
74 ```
75 Join worker node by running the `kubeadm join` on each node as root as mentioned in [create cluster kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)
76
77 ### kubespray
78
79 Kubespray support the ovn4nfv as the network plugin- please follow the steps in [kubernetes-sigs/kubespray//docs/ovn4nfv.md](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/ovn4nfv.md)
80
81 ## Comprehensive Documentation
82
83 - [How to use](doc/how-to-use.md)
84 - [Configuration](doc/configuration.md)
85 - [Development](doc/development.md)
86
87 ## Contact Us
88
89 For any questions about ovn4nfv k8s , feel free to ask a question in #general in the [ICN slack](https://akraino-icn-admin.herokuapp.com/), or open up a https://jira.opnfv.org/issues/.
90
91 * Srinivasa Addepalli <srinivasa.r.addepalli@intel.com>
92 * Ritu Sood <ritu.sood@intel.com>
93 * Kuralamudhan Ramakrishnan <kuralamudhan.ramakrishnan@intel.com>
94