This project is the first version of SFC Orchestrator that provides SFC Control layer as stated in IETF SFC working group specs and the SFC Management Plane in ONF SFC specs. It manages the Network Service Requests occured by the NFV Orchestrator - Open Baton - and translates these requests which include VNF Forwarding Graphs into Service Function Chains and Paths using OpenDaylight SDN Control - SFC Project - that provides SFC Data plane functionality.
- Open Baton Zabbix plugin running (see the doc of Zabbix plugin)
- Open Baton NFVO 3.0.1 running
- Generic VNFM 3.0.0 running
- OPNFV Apex deployment with the SFC scenario Or any Openstack deployment has a running ODL SFC
- mysql server running
In Case you need Fault Management:
- Open Baton Fault Management running
In Case you need Auto Scaling:
- Open Baton AutoScaling Engine running
You need root access to mysql-server in order to create a new database called sfco. Once you access into mysql, execute the following operation:
create database sfco;
Once the database has been created, you can create a user which will be used by the SFC Orchestrator to access and store data on the database. If you decide to use the root user you can skip this step.
Grant the access to the database "sfco", to the user, running the following command:
GRANT ALL PRIVILEGES ON sfco.* TO sfcouser@'%' IDENTIFIED BY 'changeme';
Modify sfco.properties file in order to use different credentials for the database.
After installing the prerequests, you can clone the SFC Orchestrator Project from git and compile it:
git clone https://github.com/mah88/sfc-orchestrator.git
Now the Full System Architecture should look like the following figure:
Parameter | Description |
---|---|
SFCO.rabbitmq.management.port | Rabbit MQ management port |
server.port | Port of the SFC Orchestrator |
spring.http.converters.preferred-json-mapper | json converter. Default value: gson |
spring.rabbitmq.host | IP of the machine where RabbitMQ is running. |
spring.rabbitmq.port | Port of the machine where RabbitMQ is running. Default value: 5672 |
spring.rabbitmq.username | Username for authorization of RabbitMQ |
spring.rabbitmq.password | Password for authorization of RabbitMQ |
logging.level.* | Log level of the defined modules |
Parameter | Description |
---|---|
nfvo.baseURL | NFV Orchestrator IP |
nfvo.basePort | NFV Orchestrator Port. Default value: 8080 |
nfvo.username | NFVO Username. Default value: admin |
nfvo.password | NFVO Password. Default value: openbaton |
sfc.driver | SDN (SFC) Controller used for providing SFC |
sfc.ip | IP of the SFC Controller |
sfc.port | port of the SFC Controller |
sfc.username | Username for authorization of SDN Controller |
sfc.password | Password for authorization of SDN Controller |
sfc.sf.deployment.schedulingType | The Scheduler Algorithm at the Deployment Phase (supported types: random , Shortestpath, roundrobin, tradeoff) |
sfc.sf.runtime.schedulingType | The Scheduler Algorithm at the Runtime Phase (supported types: qos-aware-loadbalancer , Shortestpath, roundrobin, tradeoff) |
sf.monitoring.item | SF monitoring item from Zabbix (i.e. net.if.in[eth0],system.cpu.load[percpu,avg1]) |
sfc.sff.ip | The IP of one of the compute nodes which is a staring point for creating the chains |
openstack.ip | IP of the VIM (OpenStack) |
openstack.username | Username for authorization of OpenStack |
openstack.password | Password for authorization of OpenStack |
openstack.tenantname | Tenant name for OpenStack |
spring.datasource.username | Username of mysql (default: root) |
spring.datasource.password | Password of mysql |
spring.datasource.url | URL of mysql (default: jdbc:mysql://localhost:3306/sfco) |
spring.datasource.driver-class-name | Driver class name of mysql (default: com.mysql.jdbc.Driver) |
spring.jpa.database-platform | JPA Databse platform (default: org.hibernate.dialect.MySQLDialect) |
Starting the SFC Orchestrator using the provided script with the following command:
./sfc-orch.sh start
The SFC Orchestrator will register four events in the NFVO:
Event | Description |
---|---|
SFC-event-NSR-Created | When event INSTANTIATE_FINISH is triggered in the NFVO, it informs the SFC Orchestrator about it with the NSR details in order to create the required SFCs in this NS. |
SFC-event-NSR-Released | When event RELEASE_RESOURCES_FINISH is triggered in the NFVO, it informs the SFC Orchestrator about it with the NSR details in order to remove all SFCs created for this NS. |
SFC-event-VNF-Scaled | When event SCALED is triggered in the NFVO, it informs the SFC Orchestrator about it with the VNF Record details in order to update all SFCs involves that VNF. |
SFC-event-VNF-Healed | When event HEAL is triggered in the NFVO, it informs the SFC Orchestrator about it with the VNF Record details in order to update all SFCs involves that VNF. |
This guide shows you how to let SFC Orchestrator applying the VNFFG - NFV Orchestrator requests. In particular, it describes how to define the VNFFG inside the Network Service Descriptor.
Refering to Open Baton VNF Packages usage, you can use the following JSON File in your setup.
{
"vendor": "fokus",
"version": "0.2",
"name": "http-sf",
"type": "http",
"endpoint": "generic",
"vdu": [
{
"vm_image": [
"sf-image"
],
"vimInstanceName": [
"vim-instance-odl"
],
"scale_in_out": 2,
"vnfc": [
{
"connection_point": [
{
"floatingIp":"random",
"virtual_link_reference": "test-network"
}
]
}
],
"fault_management_policy":[
{
"name":"SERVICE FUNCTION is not reachable",
"isVNFAlarm": false,
"criteria":[
{
"parameter_ref":"agent.ping",
"function":"nodata(40)",
"vnfc_selector":"at_least_one",
"comparison_operator":"=",
"threshold":"1"
}
],
"period":20,
"severity":"CRITICAL"
}
],
"high_availability":{
"resiliencyLevel":"ACTIVE_STANDBY_STATELESS",
"redundancyScheme":"1:N"
},
"monitoring_parameter":[
"agent.ping"
]
}
],
"auto_scale_policy": [
{
"name": "scale-out",
"threshold": 100,
"period": 30,
"cooldown": 90,
"comparisonOperator": ">=",
"mode": "REACTIVE",
"type": "WEIGHTED",
"alarms": [
{
"metric": "net.if.in[eth0]",
"statistic": "max",
"comparisonOperator": ">",
"threshold": 10000000,
"weight": 1
}
],
"actions": [
{
"type": "SCALE_OUT",
"value": "1"
}
]
}
],
"virtual_link": [
{
"name": "test-network"
}
],
"lifecycle_event": [
{
"event": "INSTANTIATE",
"lifecycle_events": [
"configure.sh",
"start_vxlan.sh"
]
}
],
"deployment_flavour": [
{
"df_constraint": [
"constraint1",
"constraint2"
],
"costituent_vdu": [],
"flavour_key": "m1.custom"
}
],
"vnfPackageLocation": "https://github.com/mah88/SF_VNF_scripts.git"
}
and the following Metadata.yaml file as well:
name: http-sf
scripts-link: https://github.com/mah88/SF_VNF_scripts.git
vim_types:
- openstack
image:
upload: false
names:
- sf-image
Here is the NSD that you can use. It includes the VNF Forwarding Graph Descriptor which includes the Network Forwarding Path and the Policy dedicated to it. The VNFD part of the NSD includes the ids of the VNF Descriptors which are involved in this NSD. The VNFFGD the dependent virtual network links, the Network Forwarding Path and the Involved VNFDs in this VNFFGD. The Network Forwarding Path consists of connection and policy. The connection constructs the order of the Service Functions (VNFs) in the Service Function Chain. The policy consists of the ACL matching criteria that is used to classify the traffic and directs the matched ones to this chain. The policy is also contains qos_level which is used for identifing the QoS for each chain.
{
"name": "http-sfc",
"vendor": "fokus",
"version": "0.1-ALPHA",
"vnfd": [
{
"id": "aab08537-f8cf-4712-8805-ebd02f6069c9"
},
{
"id": "bf4b5891-b068-4242-ac14-6e0b62a6d952"
}
],
"vnffgd": [
{
"vendor": "fokus",
"version": "0.1-ALPHA",
"number_of_endpoints": 1,
"symmetrical":false,
"dependent_virtual_link": [
{
"name": "test-network"
}
],
"network_forwarding_path": [
{
"connection": {
"0": "http-sf",
"1": "fw-sf"
},
"policy": {
"acl_matching_criteria": {
"destination_port":80,
"source_port":0,
"protocol": 6,
"source_ip":"12.0.0.4/32"
},
"qos_level":"bronze"
}
}
]
}
],
"vld": [
{
"name": "test-network"
}
],
"vnf_dependency": []
}
Now all is ready and when you launch the NSD, the VNFs will be deployed in the cloud network and an Event of Instantiate Finish will appears at the NFV Orchestrator which means that the SFC Orchestrator will start deploying the chain in the network.
During the Runtime Phase, Scaling-out may occurs or a healing for failed VNF instance is executed. Then the SFC Orchestrator will know about these changes in the network topology and start updating the Chain Paths (SFPs) using one of the SF scheduling algorithm (which is already configured in the properties file as discussed before).
SFC Orchestrator uses an abstracted model for SFC, which provides the opportunity for extending the code with different SFC drivers that make use of the APIs provided by ONOS SFC or Openstack networking-sfc-api or any other SFC Implementations.