OpenDaylight

Présentation

  • Apache Karaf permet d’installer les features d’OpenDaylight
  • Modèle “micro-service” : support de différents protocoles réseaux
  • Développer une API REST pour gérer le réseau
  • Network embedded Experience (NeXt) : ensemble d’outils qui permet aux développeurs de représenter le réseau sous forme d’image
  • Model-Driven Service Abstraction Layer (MD-SAL) : framework qui permet aux développeurs de développeur de nouvelles fonctionnalités
  • Avantages d’utiliser OpenDaylight avec OpenStack :
    • Permet d’avoir un L2 distribué et un routage IPv4 distribué
    • Les virtual routers sont complétement distribués
    • Support du clustering et de la HA dans OpenDaylight en particulier avec OpenStack. Un total de 3 noeuds est conseillé pour le cluster car c’est le mode le plus testé
    • Les Security Groups sont implémentées grâce à des règles OpenFlow. Les performances sont améliorées par rapport aux Security Groups implémentées dans OpenStack
    • Service Function Chaining
    • Network Virtualization User interface for DLUX
  • Service Function Chaining (SFC) : permet de définir une liste ordonnée de services réseaux.
    • YANG models permet d’exprimer une chaîne de fonctionnalité
    • Interface utilisateur disponible pour créer des chaînes
    • Fonctions : firewall, NAT, DPI
  • Permet de chiffrer des flux entre deux endpoints avec Unified Secure Channel (USC)
  • Permet de créer des tenants avec la fonction Virtual Tenant Network (VTN)
  • Script permettant d’afficher la base de données Mdsal (utile pour débugguer les règles de flux) : showOvsdbMdsal.py
  • Quelques éléments pour sécuriser OpenDaylight :
    • Séparer le control plane du data plane

Installation sous Ubuntu 16.04

# apt install openjdk-8-jre

Ajouter cette ligne dans le .bashrc :

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
# source ~/.bashrc

Télécharger OpenDaylight (Boron-SR2) pre built tar

Lancer OpenDaylight :

# cd ./distribution-karaf-0.5.2-Boron-SR2
# ./bin/start

Nettoyer Open vSwitch :

service openvswitch-switch stop
rm -rf /var/log/openvswitch/*
rm -rf /etc/openvswitch/conf.db
service openvswitch-switch start

Configuration pour Neutron

Connexion à OpenDaylight :

# ./bin/client -u karaf

Installation des fonctionnalités :

> feature:install odl-neutron-service,odl-restconf-all,odl-aaa-authn,odl-dlux-core,odl-mdsal-apidocs,odl-netvirt-openstack,odl-neutron-logger

Note : les features se trouvent dans le fichier de configuration etc/org.apache.karaf.features.cfg à la ligne featuresBoot.

Pour activer le logging (dans karaf) :

> log:set error org.opendaylight.ovsdb
> log:set error org.opendaylight.openflowjava
> log:set error org.opendaylight.opendaylightplugin

Connexion d’Open vSwitch à OpenDaylight :

# ovs-vsctl set-manager tcp:<OPENDAYLIGHT MANAGEMENT IP>:6640
# neutron-odl-ovs-hostconfig --noovs_dpdk
# neutron-odl-ovs-hostconfig --noovs_dpdk --local_ip 10.42.42.22

Pour se connecter à l’interface web (DLUX) : http://OPENDAYLIGHT_ADDR:8181/index.html (Identifiants : admin/admin)

Pour vérifier que l’API d’OpenDaylight fonctionne :

curl -u admin:admin http://localhost.localdomain:8087/controller/nb/v2/neutron/networks

Configuration de Neutron :

[DEFAULT]
service_plugins = odl-router,neutron.services.metering.metering_plugin.MeteringPlugin
core_plugin = ml2

[OVS]
ovsdb_connection = tcp:127.0.0.1:6641

Configuration de ML2 :

[ml2]
tenant_network_types = vxlan
extension_drivers = port_security
mechanism_drivers = logger,opendaylight

[ml2_type_vxlan]
vni_ranges = 1:1000

[securitygroup]
firewall_driver = neutron.agent.not.a.real.FirewallDriver

[ml2_odl]
port_binding_controller = pseudo-agentdb-binding
password = admin
username = admin
url = http://localhost:8087/controller/nb/v2/neutron

Configuration du DHCP agent :

[DEFAULT]
force_metadata = True
interface_driver = openvswitch
ovs_use_veth = False
dnsmasq_local_resolv = True

[OVS]
ovsdb_connection = tcp:127.0.0.1:6641

Commandes Open vSwitch

Description Commande
Affichage des règles d’Open vSwitch ovs-ofctl -O OpenFlow13 dump-flows br-int

Sources