Présentation🔗
L'option réseaux Trunk permet de connecter plusieurs réseaux à une instance à l'aide d'une seule NIC virtuel (vNIC).
Cette fonctionnalité se rapproche de la méthode utilisée pour présenter les réseaux sur les VM Cloud-Control ou les serveurs physiques.
Warning
Le port parent du Trunk ne doit être connecté à aucune ressource au moment de la création du Trunk
TL;DR
- Créer les réseaux et le subnets pour le trunk et les subports
- Créer le trunk avec comme port parent le port attaché au réseau à remonter en access/untag à l'instance.
- Attacher les subports au trunk.
- Rattacher le trunk à une instance en utilisant le port parent.
Différence entre une instance sans/avec le mode Trunk🔗
flowchart TD
subgraph id2 ["Avec le mode Trunk"]
direction TB
subgraph hv1 [Hypervisor]
subgraph Openstack Instance
eth0-->vNIC
eth0.10-->vNIC
eth2.15-->vNIC
end
subgraph trunk ["Trunk"]
vNIC-->p(parent port)
vNIC-->p(parent port)
vNIC-->p(parent port)
p(parent port)-->s0(vlan 10 subport)
p(parent port)-->s1(vlan 15 subport)
end
end
subgraph net1 [Network]
p(parent port)-->a0("net0\n(Provider/Self-Service)")
s0(vlan 10 subport)-->b0("net1\n(Provider/Self-Service)")
s1(vlan 15 subport)-->c0("net2\n(Provider/Self-Service)")
end
end
subgraph id0 ["Sans le mode Trunk"]
direction TB
subgraph Hypervisor
subgraph Openstack Instance
e0(eth0)-->n0(vNIC0)
e1(eth1)-->n1(vNIC1)
e2(eth2)-->n2(vNIC2)
end
n0(vNIC0)-->p0(port0)
n1(vNIC1)-->p1(port1)
n2(vNIC2)-->p2(port2)
end
subgraph Network
p0(port0)-->a("net0\n(Provider/Self-Service)")
p1(port1)-->b("net1\n(Provider/Self-Service)")
p2(port2)-->c("net2\n(Provider/Self-Service)")
end
end
linkStyle 0,3,8,11,14,17 stroke-width:2px,stroke:red;
linkStyle 1,4,6,9,12,15,18 stroke-width:2px,stroke:green;
linkStyle 2,5,7,10,13,16,19 stroke-width:2px,stroke:blue;
Opération🔗
L'utilisateur peut céer un port, l'associer à un Trunk et l'attacher à une instance sur ce port. Une fois le port attaché, il est possible d'attacher et de détacher dynamiquement des réseaux supplémentaires sans pérturber le fonctionnement de l'instance.
Chaque Trunk a un port parent et peut avoir un nombre quelconque de subport. Le port parent est le port auquel le Trunk est associé. Pour utiliser le Trunk, il faut spécifier le port parent du Trunk, soit au moment de la création de l'instance, ou sur une instance déjà créé en le rattachant.
Le réseau présenté par le subport est le réseau du port associé. Lors de la création d'un subport, un segmentation-id
peut être requis. Le segmentation-id
définit l'ID de segmentation sur lequel le réseau du subport est présenté à l'instance. Un segmentation-type
peut être requis. Les valeurs de segmentation-type
pris en charge:
vlan
utilise un VLAN pour la segmentation.inherit
utilise lesegmentation-type
du réseau auquel le subport est connecté. L'utilisation du typeinherit
requière que le subport soit connecté à un réseau provider.
Info
Même si les paramètres segmentation-id
et segmentation-type
apparaissent facultatifs sur l'API, ils sont obligatoires pour la configuration d'un subport
Info
Le segmentation-id
et segmentation-type
spécifiés par l'utilisateur sur les subport sont volontairement découplés du segmentation-id
et segmentation-type
des réseaux. Par exemple, il est possible de configurer des réseaux avec tenant_network_types = vxlan
et avec des subport en segmentation_type = vlan
. Le remappage sera fait par le service réseau de l'hyperviseur si nécessaire.
Créer le trunk🔗
-
Créer le port parent du trunk
$ openstack port create --network NET_A port_0 +-------------------+-------------------------------------------------------------------------+ | Field | Value | +-------------------+-------------------------------------------------------------------------+ | admin_state_up | UP | | binding_vif_type | unbound | | binding_vnic_type | normal | | fixed_ips | ip_address='10.10.0.7',subnet_id='8b957198-d3cf-4953-8449-ad4e4dd712cc' | | id | 73fb9d54-43a7-4bb1-a8dc-569e0e0a0a38 | | mac_address | fa:16:3e:dd:c4:d1 | | name | port_0 | | network_id | 1b47d3e7-cda5-48e4-b0c8-d20bd7e35f55 | | revision_number | 1 | | tags | [] | +-------------------+-------------------------------------------------------------------------+
-
Créer le trunk en utilisant
--parent-port
pour spécifier le port de l'étape du dessus.$ openstack network trunk create --parent-port port_0 trunk_test +-----------------+--------------------------------------+ | Field | Value | +-----------------+--------------------------------------+ | admin_state_up | UP | | id | fdf02fcb-1844-45f1-9d9b-e4c2f522c164 | | name | trunk_test | | port_id | 73fb9d54-43a7-4bb1-a8dc-569e0e0a0a38 | | revision_number | 1 | | sub_ports | | +-----------------+--------------------------------------+
Ajouter des subports au trunk🔗
Les subports peuvent être ajouté à un trunk de deux manières: en créant le trunk directement avec des subports, ou en ajoutant les subports à un trunk existant.
Créer le trunk avec les subports🔗
Cette méthode consiste à créer le trunk avec les subports spécifiés lors de la création du trunk.
$ openstack port create --network NET_A port_0
+-------------------+-------------------------------------------------------------------------+
| Field | Value |
+-------------------+-------------------------------------------------------------------------+
| admin_state_up | UP |
| binding_vif_type | unbound |
| binding_vnic_type | normal |
| fixed_ips | ip_address='10.10.0.7',subnet_id='8b957198-d3cf-4953-8449-ad4e4dd712cc' |
| id | 73fb9d54-43a7-4bb1-a8dc-569e0e0a0a38 |
| mac_address | fa:16:3e:dd:c4:d1 |
| name | port_0 |
| network_id | 1b47d3e7-cda5-48e4-b0c8-d20bd7e35f55 |
| revision_number | 1 |
| tags | [] |
+-------------------+-------------------------------------------------------------------------+
$ openstack port create --network NET_B sub_port_1
+-------------------+----------------------------------------------------------------------------+
| Field | Value |
+-------------------+----------------------------------------------------------------------------+
| admin_state_up | UP |
| binding_vif_type | unbound |
| binding_vnic_type | normal |
| fixed_ips | ip_address='10.10.1.8',subnet_id='2a860e2c-922b-437b-a149-b269a8c9b120' |
| id | 91f9dde8-80a4-4506-b5da-c287feb8f5d8 |
| mac_address | fa:16:3e:ba:f0:4d |
| name | sub_port_1 |
| network_id | aef78ec5-16e3-4445-b82d-b2b98c6a86d9 |
| revision_number | 1 |
| tags | [] |
+-------------------+----------------------------------------------------------------------------+
$ openstack network trunk create --parent-port port_0 --subport port=sub_port_1,segmentation-type=vlan,segmentation-id=100 trunk_test
+----------------+-------------------------------------------------------------------------------------------------+
| Field | Value |
+----------------+-------------------------------------------------------------------------------------------------+
| admin_state_up | UP |
| id | 61d8e620-fe3a-4d8f-b9e6-e1b0dea6d9e3 |
| name | trunk_test |
| port_id | 73fb9d54-43a7-4bb1-a8dc-569e0e0a0a38 |
| revision_number| 1 |
| sub_ports | port_id='73fb9d54-43a7-4bb1-a8dc-569e0e0a0a38', segmentation_id='100', segmentation_type='vlan' |
| tags | [] |
+----------------+-------------------------------------------------------------------------------------------------+
Ajouter les subports à un trunk existant🔗
$ openstack network trunk set --subport port=sub_port_1,segmentation-type=vlan,segmentation-id=100 trunk_test
Voir les détails d'un trunk🔗
$ openstack network trunk show trunk_test
+----------------+-------------------------------------------------------------------------------------------------+
| Field | Value |
+----------------+-------------------------------------------------------------------------------------------------+
| admin_state_up | UP |
| id | 61d8e620-fe3a-4d8f-b9e6-e1b0dea6d9e3 |
| name | trunk_test |
| port_id | 73fb9d54-43a7-4bb1-a8dc-569e0e0a0a38 |
| revision_number| 1 |
| sub_ports | port_id='73fb9d54-43a7-4bb1-a8dc-569e0e0a0a38', segmentation_id='100', segmentation_type='vlan' |
| tags | [] |
+----------------+-------------------------------------------------------------------------------------------------+
Créer une instance en utilisant le trunk🔗
Lancez l'instance en spécifiant port-id
avec la valeur port_id
du détails du trunk.