This page describes POD configuration settings / processes to use when attempting to tunnel the fabric uplink connection over the management network using the head node to NAT that uplink traffic.
Currently, CORD only works with a single leaf configuration. This is because the fabric requires a subnet per leaf, but the NFV orchestration has not yet been updated to support multiple subnets when deploying NFVs.
Overview
- Break the fabric bond interface on the head node, so that the head node will have two fabric interfaces
- Configure vRouter to route to the secondary fabric interface on the head node
- Update fabric configuration to support secondary fabric interface on head node
Pre-Configuration
Before you invoke the ./gradlew -PdeployConfig=podX.yml fetch buildImages publish deploy
command, there are a few changes that should be made to the existing source code.
It is unclear that these changes should be checked into the source code tree, which is why they remain here as manual edits
- XOS address pool ranges set in
$CORD_ROOT/build/platform-install/roles/xos-install/templates/cord-services.yaml.j2, should be changes from a subnet of the default fabric network
10.6.1.0/24
to each having its own/24
subnet.
addresses_vsg: addresses_vsg: type: tosca.nodes.AddressPool type: tosca.nodes.AddressPool properties: properties: addresses: 10.6.1.128/26 | addresses: 10.7.1.0/24 gateway_ip: 10.6.1.129 | gateway_ip: 10.7.1.1 gateway_mac: 02:42:0a:06:01:01 gateway_mac: 02:42:0a:06:01:01 addresses_public: addresses_public: type: tosca.nodes.AddressPool type: tosca.nodes.AddressPool properties: properties: addresses: 10.6.1.192/26 | addresses: 10.8.1.0/26 gateway_ip: 10.6.1.193 | gateway_ip: 10.8.1.1 gateway_mac: 02:42:0a:06:01:01 gateway_mac: 02:42:0a:06:01:01
Head Node - Post Deployment
After the head node is deployed, but before any compute nodes have been booted, the networking on the head node needs to be updated. Specifically the following changes should be made in /etc/network/interfaces
files:
- Remove the second NIC from the
fabric
interface bond. This means deleting the the lines in the file under the interface definition that pertain to bonding Set this interface with no IP address and to manual configuration. It should look something like:
Secondary Fabric Interfaceauto p1p2 iface p1p2 inet manual
Create a new bridge interface and assign the secondary fabric interface into that bridge as a port
Secondary Fabric Bridgeauto br-wan iface br-wan inet static address 10.5.1.1 network 10.5.1.0 netmask 255.255.255.0 broadcast 10.5.1.255 bridge_ports p1p2
The subnet
10.5.1.0/24
can be any subnet, but must be different than the primary subnet for the fabric.After updating the
/etc/network/interfaces
file, you should convince the head node to accept these network changes. This can be accomplished in various ways, including rebooting the head node, or issuing the appropriateip
/ifconfig
commands. If you reboot the head node you will likely have to re-deployXOS
.If you end up deploying
XOS
, you want to be sure to disable network configuration in the deployment configuration file so that the changes made to the head node configuration are not overwritten. This is done by enabling theskipTags
in the deployment configuration file for theinterface_config
optionskipTags:
- 'interface_config'
Configure static
arp
rule on head node to to the switch IP for the secondary fabric interface, i.e. thex.x.x.254
address on the subnet. The MAC address used for thearp
should be that of the leaf switch to which the head node is connected.arp -s 10.5.1.254 cc:37:ab:7c:b9:d6
Boot Compute Nodes and Switches
As CORD only works with a single leaf, be sure that all compute nodes are attached to a single leaf when they bo
Fabric Configuration - Post Compute Node Boot
Once the head node is deployed, but before booting any compute nodes, the leaf spine fabric should be configures. Below is a sample of the fabric configuration utilized on the example POD. Important highlights of this configuration are:
- lines 49 - 50: Add the IPs that will be used for the created vSGs and vCPEs. This really should be all IPs in the range
10.7.1.2
to10.7.1.253
inclusive, but need only be the IPs actually used as you demonstrate CORD - lines 63 - 70: A host block for the secondary fabric interface on the head node
- lines 91 - 101: Define the secondary interface on the head node as the upstream router
This sample POD was using the subnet 10.2.1.0/24
for the fabric subnet, not 10.6.1.0/24
which is often used as the default.
Restart ONOS Fabric Applications
ssh -p 8101 karaf@localhost (password: karaf) onos> app deactivate org.onosproject.segmentrouting onos> app deactivate org.onosproject.vrouter onos> app activate org.onosproject.segmentrouting onos> app activate org.onosproject.vrouter
Add Router to VRouter
onos> route-add 0.0.0.0/0 10.5.1.1
Add Default Route on Compute Nodes
On each compute node, remove any default route and add the leaf IP as the default route
ssh <compute-node> sudo ip route del default sudo ip route add default via 10.2.1.254