Actualités

[08/09/2017] Breaking news ! Smile décroche le label Happy Trainees 2018

Après le label HappyAtWork, Smile s’offre celui décerné par ses stagiaires et alternants !

[21/07/2017] Smile lance les premiers vélos solaires connectés à l’occasion du Sun Trip Tour 2017

Smile, leader des solutions IoT et open source, confirme sa solide expertise sur le marché de l’embarqué en participant activement à la course de vélos solaires du Sun Trip Tour.

[03/07/2017] Smile remporte le Drupagora d'Or 2017 du meilleur site e-commerce

Le vendredi 30 juin, la 3ème édition des Drupagora d'Or s'est déroulée à Paris.

Toutes les actualités picto
       

Vous avez besoin de mettre à jour votre Lecteur Flash Flash 7

Guillemet ouvrant l'actualité des solutions
et des technologies open source Guillemet fermant
picto

Utiliser le mode Flat avec OpenStack

Dans ce tutoriel, nous allons voir comment fonctionne, puis activer et utiliser le mode flat d'OpenStack.

Dans ce tutoriel, nous allons voir comment fonctionne, puis activer et utiliser le mode flat d'OpenStack.

Introduction

Le flat est un mode de réseau utilisé par OpenStack pour fournir la connectivité réseau aux instances.

Pour rappel, ce mode, flat, s'utilise avec le composant nova-network. Ce composant cohabite à l'heure actuelle avec le nouveau composant Quantum. Ces deux composants ont pour but de fournir toutes les fonctionnalités réseaux attendues pour les instances. Nous ne nous pencherons pas plus en avant sur le nouveau composant Quantum dans cette article.

Avec nova-network, le composant historique, 3 modes sont disponibles:

  • Flat: celui que nous allons voir;
  • Flat DHCP: ajoute un serveur DHCP pour l'attribution automatique d'IP des instances;
  • VLAN Manager: ajoute une isolation de niveau 2 et permet d'avoir des adressages distincts pour chaque projet.

Vous pourrez obtenir plus d'informations ici: http://docs.openstack.org/trunk/openstack-compute/admin/content/networking-options.html

Le mode flat

Ce mode a pour but de déployer OpenStack sans se soucier de la configuration et la topologie réseau sous-jacente. Ce mode est très simple à utiliser. Grâce à sa simplicité, ce mode est facile à configurer, déployer et utiliser dans un environnement de production.

Le fonctionnement est basé sur les ponts réseaux linux. L'idée est de fournir un pont entre l'instance et le réseau souhaité. L'adressage réseau offert est manuel. C'est en lançant la création d'une instance qu'on attache le(s) réseau(x).

Voici un schéma explicitant ce mode (source: documentation OpenStack):

Les interfaces eth1 correspondent au réseau OpenStack proprement dit. C'est sur ce réseau que les compute et le controller node vont communiquer directement.

Lors du lancement d'une instance, on l'attache au bridge br100. Il est bien entendu possible d'avoir plusieurs réseaux déclarés, donc utilisés des ponts sur plusieurs VLAN.

Nous allons ici configurer OpenStack et une instance pour utiliser deux cartes réseaux comme ceci (source: documentation OpenStack):

Pré-requis réseau

Dans un premier temps, installer les paquets nécessaires au fonctionnement des bridges et des VLAN:

compute-node:~# apt-get install vlan ifenslave

Activer le module VLAN:

compute-node:~# modprobe 8021q

Par exemple, configuré les interfaces réseaux d'un compute node comme ceci:

compute-node:~# vi /etc/network/interfacesauto eth0iface eth0 inet static        address 10.0.0.1        netmask 255.255.255.0        gateway 10.0.0.254auto eth1iface eth1 inet manualauto br100iface br100 inet manual        bridge_stp off        bridge_fd 0        bridge_maxwait 0        bridge_ports eth1.100auto br101iface br101 inet manual        bridge_stp off        bridge_fd 0        bridge_maxwait 0        bridge_ports bond1.101

eth0 est l'interface relié au réseau OpenStack. eth1 est la deuxième interface nous servant à créer des bridges sur des réseaux VLAN. Il est bien entendu possible d'utiliser le bonding pour agréer plusieurs cartes réseaux.

Configuration d'OpenStack

Editer la configuration OpenStack:

compute-node:~# vi /etc/nova/nova.conf[...]# NETWORKnetwork_manager=nova.network.manager.FlatManager##For injected network informations in instanceflat_injected=truefirewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver# Have nova-network on each compute-nodemulti_host=true[...]

Sur cette configuration, nous ajouté deux options biens pratiques. On demande à OpenStack d'"injecter" la configuration réseau des instances lors de la création de celles-ci et on va utiliser le service nova-network sur chaque noeud de calcul.

Création des réseaux OpenStack

La prochaine étape est de créer les deux réseaux qu'on veut utiliser avec OpenStack:

compute-node:~# nova-manage network create --multi_host=T --fixed_range_v4=172.16.100.0/24 --bridge=br100 --bridge_interface=br100 --num_networks=1 --network_size=256 --label=network100 --gateway=172.16.100.254 --dns1=172.16.100.254compute-node:~# nova-manage network create --multi_host=T --fixed_range_v4=172.16.101.0/24 --bridge=br100 --bridge_interface=br101 --num_networks=1 --network_size=256 --label=network101 --gateway=172.16.101.254 --dns1=172.16.101.254

On vérifie que les réseaux sont bien créés:

compute-node:~# nova network-list+--------------------------------------+----------+--------------------+| ID                                   | Label    | Cidr               |+--------------------------------------+----------+--------------------+| 069dedb6-c97a-432c-bcf6-54b2b4311928 | network100    | 172.16.100.0/24    || 0c8bd87e-c824-439d-a567-5f37e724292c | network101   | 172.16.101.0/24    |+--------------------------------------+----------+--------------------+

Note: on peut aussi vérifier la création de ces deux réseaux directement sur la base de données du noeud contrôleur:

controller-node:~# mysql --defaults-extra-file=/etc/mysql/debian.cnf -e "select * from networks\G" nova*************************** 1. row ***************************         created_at: 2012-11-27 10:43:39         updated_at: 2012-11-27 15:34:26         deleted_at: NULL            deleted: 0                 id: 1           injected: 1               cidr: 172.16.100.0/24            netmask: 255.255.255.0             bridge: br100            gateway: 172.16.100.254          broadcast: 172.16.100.255               dns1: 172.16.100.254               vlan: NULL vpn_public_address: NULL    vpn_public_port: NULLvpn_private_address: NULL         dhcp_start: NULL         project_id: NULL               host: NULL            cidr_v6: NULL         gateway_v6: NULL              label: network100         netmask_v6: NULL   bridge_interface: br100         multi_host: 1*************************** 2. row ***************************         created_at: 2012-12-26 08:34:13         updated_at: 2012-12-26 08:42:18         deleted_at: NULL            deleted: 0                 id: 2           injected: 1               cidr: 172.16.101.0/24            netmask: 255.255.255.0             bridge: br101            gateway: 172.16.101.254          broadcast: 172.16.101.255               dns1: 172.16.101.254               vlan: NULL vpn_public_address: NULL    vpn_public_port: NULLvpn_private_address: NULL         dhcp_start: NULL         project_id: NULL               host: NULL            cidr_v6: NULL         gateway_v6: NULL              label: iliad3         netmask_v6: NULL   bridge_interface: br101         multi_host: 1

Création d'une instance avec ces deux réseaux

Maintenant, grâce à la configuration réseau, d'OpenStack et la création des réseaux, nous pouvons lancer une instance comme suit:

compute-node:~# nova boot --flavor 1 --image precise-cloud --nic net-id=069dedb6-c97a-432c-bcf6-54b2b4311928,v4-fixed-ip=172.16.100.2  --nic net-id=0c8bd87e-c824-439d-a567-5f37e724292c,v4-fixed-ip=172.16.101.2  --security_group default instance-nw100-101

Une fois l'instance créée, nous pouvons vérifier sa configuration réseau:

compute-node:~# nova show instance-nw100-101| grep network| network100 network                       | 172.16.100.2                                            || inetwork101 network                       | 172.16.101.2                                           |

Et enfin, vérification des bridges sur le compute node:

compute-node:~# brctl showbridge name bridge id  STP enabled interfacesbr100  8000.00137238fb51 no  eth1.100                                                        vnet0br101  8000.00137238fb51 no  bond1.101       vnet1

On se connecte à l'instance pour vérifier la connectivité réseau:

instance:~$ ping smile.fr -c 1PING smile.fr (195.154.89.84) 56(84) bytes of data.64 bytes from 195.154.89.84: icmp_req=1 ttl=46 time=7.24 msinstance:~$ netstat -rnKernel IP routing tableDestination     Gateway         Genmask         Flags   MSS Window  irtt Iface0.0.0.0         172.16.100.254      0.0.0.0         UG        0 0          0 eth0172.16.100.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0172.16.101.0      0.0.0.0         255.255.255.0   U         0 0          0 eth1

Tout est bon ! Par contre, une des deux passerelles a été enlever à la main.

Limitations

Pour que la fonctionnalité des metadatas fonctionnent, vous devez rediriger les requêtes sortant des bridges de type 169.254.169.254 sur le port 80 vers le serveur hébergeant le service nova-api. Ce routage de paquet s'effectue usuellement sur la passerelle du réseau sur lequel l'instance est attaché.

Le filtrage de niveau 3, opéré par iptables, ne fonctionnera pas avec ce mode. Le filtrage offert par l'API OpenStack ne fonctionnera donc pas.

Conclusion

Et voilà, vous savez maintenant comment fonctionne et comment déployer le mode flat network d'OpenStack. Il reste maintenant tous les autres composants OpenStack à voir.

Y. Delarbre
picto

Commentaires

Soyez la premiere personne à ajouter un commentaire sur cet article.
Ecrire un nouveau commentaire