Skip to content

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 le segmentation-type du réseau auquel le subport est connecté. L'utilisation du type inherit 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
Cette commande ne fournit pas de retour

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.