Infomaniak - Découvrez quelques scénarios pour utiliser le réseau Openstack

Infomaniak

Pour réagir au contenu de ce tutoriel, un espace de dialogue vous est proposé sur le forum. Commentez

- Titre : Infomaniak - Découvrez quelques scénarios pour utiliser le réseau Openstack

- Auteur : Infomaniak

- Parution : 22 mars 2024

- Licence : Le contenu de cet article est rédigé par Infomaniak et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com.

Sommaire

- I. Mise en route

- II. Réseaux publics préconfigurés

- III. Scénarios disponibles

- IV. Première vue d'ensemble

- V. Scénario 1 : connexion directe à une adresse IP publique sur un réseau partagé

- VI. Scénario 2 : réservez un sous-réseau public pour vos instances

- VI-A. Réserver et utiliser un sous-réseau IPv4

- VI-B. Réserver et utiliser un sous-réseau IPv6

- VI-C. Créer un réseau à double pile avec des pools de sous-réseaux

I - Mise en route

Lors de la création d'une machine virtuelle, une IP fixe est automatiquement attribuée dans le réseau sélectionné. Ce réseau peut être un réseau privé que vous avez créé ou un des réseaux publics préconfigurés décrits ci-dessous.

II - Réseaux publics préconfigurés

Ext-net1 : Les machines virtuelles créées à l'aide de ce réseau se verront automatiquement attribuer une adresse IPv4 publique (facturée) et une adresse IPv6 publique (gratuite).

Ext-v6only1 : Les machines virtuelles créées à l'aide de ce réseau se verront automatiquement attribuer une adresse IPv6 publique (gratuite).

Ext-floating1 : Vous pouvez réserver une IP flottante qui est une adresse IPv4 publique (facturée) et la mapper à l'IP privée d'une VM (NAT) pour l'exposer à l'internet.

Ext-provider1 : Sur demande, vous pouvez avoir accès à ce réseau pour réserver une plage d'adresses IPv4 publiques /28 ou /29. Chaque IP réservée est facturée.

III - Scénarios disponibles

Infomaniak vous propose de multiples façons de mettre en place votre stack réseau cloud. Vous trouverez ici quelques scénarios vous permettant d'utiliser le réseau Openstack. Gardez à l'esprit qu'il ne s'agit pas d'une liste exhaustive et que vous pouvez mélanger toutes les options en fonction de vos besoins spécifiques. Et bien qu'elle soit flexible, certains cas peuvent être limités, alors n'hésitez pas à nous contacter si vous vous sentez bloqué dans votre configuration !

Les scénarios suivants seront détaillés dans cette section :

1. Connexion directe à une IP publique sur un réseau partagé : si vous avez besoin rapidement d'une seule VM accessible de n'importe où, c'est pour vous.

2. Options : double pile d'adresses IPv4+IPv6 ou IPv6 uniquement.

3. Réserver un sous-réseau public pour vos instances : utilisez-le si vous avez besoin d'une plage d'adresses IP contiguës pour quelques (ou plusieurs) instances.

4. Options : pools de sous-réseaux IPv4 et IPv6 disponibles.

5. Créer des réseaux privés, et utiliser des FIP (floating IPs) selon vos besoins : option courante pour les configurations cloud, votre instance peut communiquer sur un réseau privé et vous pouvez atteindre celui dont vous avez besoin à travers le NAT public sur votre routeur privé.

6. Options : NAT public disponible sur les routeurs privés.

7. Utiliser LBaaS (Octavia) : nous proposons un service LB, pour bénéficier d'un équilibrage de charge public à haute disponibilité devant votre réseau (généralement) privé.

8. Options : healthchecks, scalabilité, …

9. BYOIP - bring your own IP range inside our cloud : il est possible d'utiliser vos propres adresses IP publiques dans notre infrastructure, veuillez nous contacter pour cette configuration !

IV - Première vue d'ensemble

Lorsque vous vous connectez pour la première fois à votre projet, vous verrez des réseaux "par défaut" déjà disponibles pour vous :

$ openstack network list --long -c Name -c Status -c State -c Shared -c Subnets -c 'Router Type' --sort-column Shared

+---------------+--------+-------+--------+----------------------------------------------------------------------------+-------------+
| Name          | Status | State | Shared | Subnets                                                                    | Router Type |
+---------------+--------+-------+--------+----------------------------------------------------------------------------+-------------+
| ext-floating1 | ACTIVE | UP    | False  | b724c3e2-3f08-4d09-ba65-7c41bf0f7872                                       | External    |
| ext-v6only1   | ACTIVE | UP    | True   | 7b73fba4-bf83-4fcf-90ef-26343c7c0195                                       | Internal    |
| ext-net1      | ACTIVE | UP    | True   | 386b1011-ad05-47d1-9a4c-4f11a954015d, c8df3b20-91f9-4745-91bc-851030aca420 | Internal    |
+---------------+--------+-------+--------+----------------------------------------------------------------------------+-------------+

Comme vous pouvez le voir, certains réseaux sont déjà peuplés lorsque vous vous connectez à votre projet. Ces réseaux sont destinés à être utilisés dans les différents scénarios que nous proposons. Vous pouvez également remarquer les adresses existantes, les pools de sous-réseaux et les sous-réseaux associés à ces réseaux. Vous ne pouvez pas casser cette configuration par défaut, c'est pourquoi nous n'expliquerons pas comment elle a été créée, mais seulement comment l'utiliser pour vos différents projets.

V - Scénario 1 : connexion directe à une adresse IP publique sur un réseau partagé

Ce scénario est la façon la plus simple de commencer votre projet de cloud computing. Si vous avez suivi le « Guide rapide », vous l'avez déjà utilisé.

Nous avons créé sur notre Cloud public 2 réseaux spécifiques que vous pouvez utiliser en toute sécurité sans aucune connaissance ou configuration. Ces réseaux sont affichés dans tous les projets, en tant que ext-net1 et ext-v6only1.

Pour les utiliser, il suffit de créer une VM qui les utilise, comme par exemple :

$ openstack server create --image debian-10.8-openstack-amd64.raw --flavor cpu2-ram6-disk20 --key-name mykeypair --network ext-net1 --use-config-drive infomaniak-vm-1

ou pour l'IPv6 uniquement :

$ openstack server create --image debian-10.8-openstack-amd64.raw --flavor cpu2-ram6-disk20 --key-name mykeypair --network ext-v6only1 --use-config-drive infomaniak-vm-1

Le réseau ext-net1 est dual-stack, ce qui signifie que votre VM recevra une adresse IPv4 et une adresse IPv6. Ces adresses sont fournies à la VM par le protocole DHCP, assurez-vous donc que l'image de votre système d'exploitation le supporte. Si ce n'est pas le cas, vous pouvez utiliser l'option config drive ou ajouter des données utilisateur spécifiques pour cloud-init.

Le réseau ext-v6only1 ne fournit qu'un seul IPv6 à votre VM, toujours par DHCP. Ce réseau a l'avantage d'être gratuit. Comme le protocole IPv4 est vieux, limité, et aujourd'hui cher, nous devons vous le facturer. Mais pas l'IPv6 qui est le remplaçant de l'IPv4.

Avertissement

Lors du démarrage d'une image sur un réseau IPv6 uniquement, l'outil cloud-init échouera en essayant d'atteindre le service de métadonnées IPv4. Le service de métadonnées n'est pas disponible sur les réseaux IPv6, mais la plupart des images supportent plutôt l'option Config Drive afin que vous puissiez l'activer lors du démarrage de votre instance (--use-config-drive).

VI - Scénario 2 : réservez un sous-réseau public pour vos instances

La fonction de pool de sous-réseaux est disponible sur demande. Il suffit de contacter notre support pour obtenir l'accès aux pools de sous-réseaux.

Dans ce scénario, vous allez réserver un sous-réseau public fourni par Infomaniak. L'avantage de réserver un sous-réseau est la possibilité d'obtenir une plage d'IP contiguë pour vos instances, afin de faciliter la configuration de votre firewall par exemple et des règles à distance.

Pour voir les sous-réseaux disponibles, il suffit de regarder les pools de sous-réseaux :

$ openstack subnet pool list

+--------------------------------------+---------------------+-------------------+
| ID                                   | Name                | Prefixes          |
+--------------------------------------+---------------------+-------------------+
| a7c19bf9-37a9-4355-b47d-e5d9f24c3d1b | poolv6-selfservice1 | 2001:1600:11::/48 |
| ef6303c9-8614-4f3e-9c8a-346900b6c85b | poolv4-selfservice1 | 195.15.248.0/22   |
+--------------------------------------+---------------------+-------------------+

Vous pouvez réserver des sous-réseaux IPv4 et IPv6.

VI-A - Réserver et utiliser un sous-réseau IPv4

Pour les sous-réseaux IPv4, vous pourrez réserver une plage d'IP, avec un masque de sous-réseau entre /28 (14 IP) et /29 (6 IP). Veuillez noter que vous devrez associer une IP à votre routeur virtuel (gateway) et une autre pour DHCP (recommandé), ce qui vous permettra d'avoir 12 ou 4 IP assignables pour vos instances. Si vous avez besoin de plus grandes plages d'IP, veuillez contacter notre support.

Pour réserver un sous-réseau, vous devez créer un sous-réseau avec l'option spéciale --subnet-pool. Cela signifie que vous devez également créer un réseau. Faisons-le ensemble :

# Create network "mynetwork"
$ openstack network create mynetwork

# Create subnet "mysubnet" inside network "mynetwork"
$ openstack subnet create mysubnet --network mynetwork --subnet-pool poolv4-selfservice1 --prefix-length 28 --dns-nameserver 83.166.143.51 --dns-nameserver 83.166.143.52 --dhcp

Vous pouvez maintenant voir votre réseau et votre sous-réseau réservé :

$ openstack subnet show mysubnet -c Name -c cidr -c allocation_pools -c gateway_ip -c enable_dhcp -c dns_nameservers

+------------------+----------------------------+
| Field            | Value                      |
+------------------+----------------------------+
| allocation_pools | 195.15.248.2-195.15.248.14 |
| cidr             | 195.15.248.0/28            |
| dns_nameservers  | 83.166.143.51 83.166.143.52|
| enable_dhcp      | True                       |
| gateway_ip       | 195.15.248.1               |
+------------------+----------------------------+

Avertissement

Votre nouveau réseau n'est pas routé par Openstack tant que vous ne configurez pas de routeur virtuel. Si vous créez une VM avec votre sous-réseau public, vous ne pourrez pas l'atteindre de l'extérieur. Vous devez d'abord créer un routeur virtuel dans Openstack, comme ceci :

# Create a router "myrouter"
$ openstack router create myrouter

# Link your router to you subnet
$ openstack router add subnet myrouter mysubnet

# Add the external gateway
$ openstack router set --external-gateway ext-provider1 myrouter

L'option --external-gateway correspond à un réseau spécifique étiqueté comme "external". Ces réseaux sont définis par Infomaniak et utilisés pour le routage externe. Ils sont aussi appelés dans Openstack "provider" networks. Pour voir ces réseaux externes, vous pouvez faire :

taylor@laptop (pub1|taylor):~$  openstack network list --external
+--------------------------------------+---------------+----------------------------------------------------------------------------+
| ID                                   | Name          | Subnets                                                                    |
+--------------------------------------+---------------+----------------------------------------------------------------------------+
| 0f9c3806-bd21-490f-918d-4a6d1c648489 | ext-floating1 | 209ce11b-68c0-465a-9938-1aba36b785fc, b724c3e2-3f08-4d09-ba65-7c41bf0f7872 |
| d4c06bf9-7cad-4a64-9a57-7882a3a3843d | ext-provider1 | 1ea84a3a-2989-4413-9517-b30570e657da, a9a293dc-95f2-4d48-b2e0-b2d298f86bdf |
+--------------------------------------+---------------+----------------------------------------------------------------------------+

Vous pouvez maintenant créer une VM avec votre nouveau sous-réseau public, comme ceci :

$ openstack server create --key-name mykeypair --flavor a1-ram2-disk20-perf1 --image "Debian 11 bullseye" --network mynetwork myinstance-1

Et votre VM sera accessible via une IP publique dans votre propre plage d'IP :

$ openstack server show myinstance-1 -c name -c addresses -c image -c id -c status
+-----------+---------------------------------------+
| Field     | Value                                 |
+-----------+---------------------------------------+
| addresses | mynetwork=195.15.248.6                |
| id        | 8038dce0-bb19-4e03-9fe1-ad20c260c4aa  |
| image     | Debian 11 bullseye               |
| name      | myinstance-1                          |
| status    | ACTIVE                                |
+-----------+---------------------------------------+

$ ping 195.15.248.6

PING 195.15.248.6 (195.15.248.6) 56(84) bytes of data.

64 bytes from 195.15.248.6: icmp_seq=1 ttl=58 time=37.2 ms

64 bytes from 195.15.248.6: icmp_seq=2 ttl=58 time=31.9 ms

64 bytes from 195.15.248.6: icmp_seq=3 ttl=58 time=32.3 ms

Comme indiqué au début, une IP de votre plage sera utilisée comme passerelle, et une autre pour l'agent DHCP. Vous pouvez voir l'utilisation de votre plage d'IP comme suit :

$ openstack port list --network mynetwork --long -c ID -c 'Fixed IP Addresses' -c Status -c 'Device Owner'
+--------------------------------------+-----------------------------------------------------------------------------+--------+--------------------------+
| ID                                   | Fixed IP Addresses                                                          | Status | Device Owner             |
+--------------------------------------+-----------------------------------------------------------------------------+--------+--------------------------+
| 2044bdd8-60f2-4338-bb9f-af9de4d57421 | ip_address='195.15.248.1', subnet_id='8ad80ee2-5e7e-4b97-a8ff-db11ffd4c4fe' | ACTIVE | network:router_interface |
| 42a10611-e668-44c6-a8a2-af06a6a87e60 | ip_address='195.15.248.2', subnet_id='8ad80ee2-5e7e-4b97-a8ff-db11ffd4c4fe' | ACTIVE | network:dhcp             |
| 564b3ac0-fea2-457b-964c-db815274f4dc | ip_address='195.15.248.6', subnet_id='8ad80ee2-5e7e-4b97-a8ff-db11ffd4c4fe' | ACTIVE | compute:nova             |
+--------------------------------------+-----------------------------------------------------------------------------+--------+--------------------------+

Le sous-réseau IPv4 sera facturé sur la base d'une réservation. Cela signifie que même si vous n'utilisez pas vos IP, elles sont réservées pour vous et vous seront facturées. Les IP des routeurs et des DHCP sont également prises en compte. Si vous réservez par exemple une plage d'IP /28, nous vous facturerons 14 IP tant que la plage d'IP est assignée à votre projet. Vous pouvez libérer à tout moment un pool de sous-réseaux en supprimant simplement le sous-réseau associé :

$ openstack subnet delete mysubnet

Le sous-réseau "mysubnet" doit être libéré, vous devrez supprimer tous les ports, VM et routeurs associés avant de supprimer le sous-réseau.

VI-B - Réserver et utiliser un sous-réseau IPv6

La réservation d'un sous-réseau IPv6 est assez similaire à celle d'un réseau IPv4. Les principales différences sont les suivantes :

- les pools de sous-réseaux IPv6 sont gratuits

- La taille des pools de sous-réseaux IPv6 est beaucoup plus élevée que celle des pools de sous-réseaux IPv4. Nous autorisons (uniquement) les sous-réseaux IPv6 /64, ce qui vous permet d'obtenir un nombre d'adresses presque illimité (18 446 744 073 709 551 616).

Avertissement

Comme pour les pools de sous-réseaux IPv4, vous devrez créer un routeur virtuel, sinon votre sous-réseau IPv6 ne sera pas routé sur le backbone Openstack.

# Create a network "mynetwork-6"
$ openstack network create mynetwork-6

# Create a subnet "mysubnet-6" inside network "mynetwork-6"
$ openstack subnet create mysubnet-6 --ip-version 6 --network mynetwork-6 --use-default-subnet-pool --dns-nameserver 2001:1600:0:aaaa::53:5 --dns-nameserver 2001:1600:0:aaaa::53:6 --ipv6-ra-mode dhcpv6-stateful --ipv6-address-mode dhcpv6-stateful

+----------------------+------------------------------------------------------+
| allocation_pools     | 2001:1600:11:7::2-2001:1600:11:7:ffff:ffff:ffff:ffff |
| cidr                 | 2001:1600:11:7::/64                                  |
| created_at           | 2023-05-01T14:25:41Z                                 |
| description          |                                                      |
| dns_nameservers      | 2001:1600:0:aaaa::53:5, 2001:1600:0:aaaa::53:6       |
| dns_publish_fixed_ip | None                                                 |
| enable_dhcp          | True                                                 |
| gateway_ip           | 2001:1600:11:7::1                                    |
| host_routes          |                                                      |
| id                   | 5e9c7130-750d-4efb-b6c7-827dcaa1904b                 |
| ip_version           | 6                                                    |
| ipv6_address_mode    | dhcpv6-stateful                                      |
| ipv6_ra_mode         | dhcpv6-stateful                                      |
| name                 | mysubnet-6                                           |
| network_id           | d04327b2-ee06-4db1-acaf-1b1f1db4fb14                 |
| project_id           | d1440aa24a65411fb9bac2b842c8defa                     |
| revision_number      | 0                                                    |
| segment_id           | None                                                 |
| service_types        |                                                      |
| subnetpool_id        | a7c19bf9-37a9-4355-b47d-e5d9f24c3d1b                 |
| tags                 |                                                      |
| updated_at           | 2023-05-01T14:25:41Z                                 |
+----------------------+------------------------------------------------------+

# Create a virtual router
$ openstack router create myrouter-6

# Add your subnet to your router
$ openstack router add subnet myrouter-6 mysubnet-6

Il est maintenant prêt pour la configuration du sous-réseau. Vous pouvez alors démarrer une VM sur ce réseau IPv6 uniquement :

# Create a VM with IPv6-only
$ openstack server create --key-name mykeypair --flavor a1-ram2-disk20-perf1 --image "Debian 11 bullseye" --network mynetwork-6 myinstance-2

$ openstack server show myinstance-2 -c name -c addresses -c image -c id -c status
+-----------+---------------------------------------+
| Field     | Value                                 |
+-----------+---------------------------------------+
| addresses | mynetwork-v6=2001:abc:abcd:cafe::1ed  |
| id        | 503737e8-cea4-4dbd-ace7-a080e57d825f  |
| image     | Debian 11 bullseye               |
| name      | myinstance-2                          |
| status    | ACTIVE                                |
+-----------+---------------------------------------+

Il se peut que l'image de votre système d'exploitation ne prenne pas en charge IPv6 ou DHCPv6. Vous pouvez alors essayer d'utiliser un config-drive, ou un script de données utilisateur ou le mode IPv6 SLAAC pour ajouter une adresse IPv6 à votre instance au démarrage.

Par exemple, l'image du système d'exploitation CirrOS utilisée ici ne supporte pas IPv6.

VI-C - Créer un réseau à double pile avec des pools de sous-réseaux

Vous pouvez bien sûr combiner des pools de sous-réseaux IPv4 et IPv6 pour créer un réseau à double pile, avec des plages IP réservées. Notez que dans ce mode, IPv4 est toujours payant (et IPv6 gratuit).

Pour ce faire, vous devrez créer un réseau comme précédemment, mais en lui attribuant 2 sous-réseaux.

# Create a network "mynetwork-2"
$ openstack network create mynetwork-2

# Create a "mysubnet-4" IPv4 subnet inside network "mynetwork-2"
$ openstack subnet create mysubnet-4 --ip-version 4 --network mynetwork-2 --use-default-subnet-pool --prefix-length 28 --dns-nameserver 83.166.143.51 --dns-nameserver 83.166.143.52 --dhcp

# Create a "mysubnet-6" IPv6 subnet inside network "mynetwork-2"
$ openstack subnet create mysubnet-6 --ip-version 6 --network mynetwork-2 --use-default-subnet-pool --dns-nameserver 2001:1600:0:aaaa::53:5 --dns-nameserver 2001:1600:0:aaaa::53:6 --ipv6-ra-mode dhcpv6-stateful --ipv6-address-mode dhcpv6-stateful

Comme vous pouvez le voir, votre réseau a maintenant 2 sous-réseaux :

$ openstack network show mynetwork-2 -c name -c subnets -c status
+---------+----------------------------------------------------------------------------+
| Field   | Value                                                                      |
+---------+----------------------------------------------------------------------------+
| name    | mynetwork-2                                                                |
| status  | ACTIVE                                                                     |
| subnets | 7018547e-9ab5-406f-8309-d123df768e0a, 7ddb5e56-5ce2-4bf3-bfaa-fc07bc11f529 |
+---------+----------------------------------------------------------------------------+

$ openstack subnet list --network mynetwork-2
+--------------------------------------+------------+--------------------------------------+---------------------+
| ID                                   | Name       | Network                              | Subnet              |
+--------------------------------------+------------+--------------------------------------+---------------------+
| 7018547e-9ab5-406f-8309-d123df768e0a | mysubnet-4 | 13c895bd-fdd3-4cd1-836c-9ff2c2b71bde | 195.15.248.16/28    |
| 7ddb5e56-5ce2-4bf3-bfaa-fc07bc11f529 | mysubnet-6 | 13c895bd-fdd3-4cd1-836c-9ff2c2b71bde | 2001:1600:11:2::/64 |
+--------------------------------------+------------+--------------------------------------+---------------------+

Comme précédemment, nous devons créer un routeur virtuel pour exposer vos sous-réseaux. Le réseau externe (fournisseur) ext-provider1 est dual-stack, pour gérer la configuration des réseaux dual-stack.

# Create a virtual route
$ openstack router create myrouter-2

# Add both subnets to your router
$ openstack router add subnet myrouter-2 mysubnet-4
$ openstack router add subnet myrouter-2 mysubnet-6

# Add the external network (provider network)
$ openstack router set --external-gateway ext-provider1 myrouter-2

Nous allons maintenant créer une VM pour vérifier notre configuration :

# Create a VM with dual-stack network (IPv4 + IPv6)
$ openstack server create --key-name mykeypair --flavor a1-ram2-disk20-perf1 --image "CirrOS 5.2" --network mynetwork-2 myinstance-3

$ openstack server show myinstance-3 -c name -c addresses -c image -c id -c status
+-----------+---------------------------------------------------+
| Field     | Value                                             |
+-----------+---------------------------------------------------+
| addresses | mynetwork-2=195.15.248.25, 2001:1600:11:2::134    |
| id        | a23a9aca-b6bf-40d4-984d-600b85b6cab0              |
| image     | CirrOS 5.2 (541b79f2-20da-4ed0-a0c3-5cdace31cf29) |
| name      | myinstance-3                                      |
| status    | ACTIVE                                            |
+-----------+---------------------------------------------------+

Notez que vous pouvez également réserver dans votre réseau à double pile une seule IPv4 ou IPv6 et l'attribuer à une VM. Il n'est pas obligatoire d'avoir des IP à double pile. Un exemple rapide pour le faire :

# Create a single network port inside "mynetwork-2" network
# You can specify only --fixed-ip subnet=mysubnet-6 here if you don't want to choose an IP
$ openstack port create --network mynetwork-2 --fixed-ip subnet=mysubnet-6,ip-address=2001:1600:11:2::beef v6-port1

# Create a VM using that network port
$ openstack server create --key-name mykeypair --flavor a1-ram2-disk20-perf1 --image "CirrOS 5.2" --port v6-port1 myinstance-4

Cette instance aura une seule adresse IP :

$ openstack server show myinstance-4 -c name -c addresses -c image -c id -c status
+-----------+---------------------------------------------------+
| Field     | Value                                             |
+-----------+---------------------------------------------------+
| addresses | mynetwork-2=2001:1600:11:2::beef                  |
| id        | 1f8f5022-e47d-4f53-8673-7ef6af0aad84              |
| image     | CirrOS 5.2 (541b79f2-20da-4ed0-a0c3-5cdace31cf29) |
| name      | myinstance-4                                      |
| status    | ACTIVE                                            |
+-----------+---------------------------------------------------+