>It work only when whole switch is aimed by single customer, it will not work when several customers sharing the same switch.
Do you know what vendors have this limitation? I know the broadcom chipsets didn't prevent this (we allowed VLAN rewrites scoped to ports at Big Switch). If it's common to Cisco/Juniper then I guess we are stuck reflecting bad hardware in the API. :( On Wed, Dec 7, 2016 at 9:22 AM, Vasyl Saienko <vsaie...@mirantis.com> wrote: > > > On Wed, Dec 7, 2016 at 7:12 PM, Kevin Benton <ke...@benton.pub> wrote: > >> >> >> On Wed, Dec 7, 2016 at 8:47 AM, Vasyl Saienko <vsaie...@mirantis.com> >> wrote: >> >>> @Armando: IMO the spec [0] is not about enablement of Trunks and >>> baremetal. This spec is rather about trying to make user request with any >>> network configuration (number of requested NICs) to be able successfully >>> deployed on ANY ironic node (even when number of hardware interfaces is >>> less than number of requested attached networks to instance) by implicitly >>> creating neutron trunks on the fly. >>> >>> I have a concerns about it and left a comment [1]. The guaranteed >>> number of NICs on hardware server should be available to user via nova >>> flavor information. User should decide if he needs a trunk or not only by >>> his own, as his image may even not support trunking. I suggest that >>> creating trunks implicitly (w/o user knowledge) shouldn't happen. >>> >>> Current trunks implementation in Neutron will work just fine with >>> baremetal case with one small addition: >>> >>> 1. segmentation_type and segmentation_id should not be API mandatory >>> fields at least for the case when provider segmentation is VLAN. >>> >>> 2. User still should know what segmentation_id was picked to configure >>> it on Instance side. (Not sure if it is done automatically via network >>> metadata at the moment.). So it should be inherited from network >>> provider:segmentation_id and visible to the user. >>> >>> >>> @Kevin: Having VLAN mapping support on the switch will not solve problem >>> described in scenario 3 when multiple users pick the same segmentation_id >>> for different networks and their instances were spawned to baremetal nodes >>> on the same switch. >>> >>> I don’t see other option than to control uniqueness of segmentation_id >>> on Neutron side for baremetal case. >>> >> >> Well unless there is a limitation in the switch hardware, VLAN mapping is >> scoped to each individual port so users can pick the same local >> segmentation_id. The point of the feature on switches is for when you have >> customers that specify their own VLANs and you need to map them to service >> provider VLANs (i.e. what is happening here). >> > > It work only when whole switch is aimed by single customer, it will not > work when several customers sharing the same switch. > > >> >> >>> >>> Reference: >>> >>> [0] https://review.openstack.org/#/c/277853/ >>> [1] https://review.openstack.org/#/c/277853/10/specs/approved/VL >>> AN-aware-baremetal-instances.rst@35 >>> >>> On Wed, Dec 7, 2016 at 6:14 PM, Kevin Benton <ke...@benton.pub> wrote: >>> >>>> Just to be clear, in this case the switches don't support VLAN >>>> translation (e.g. [1])? Because that also solves the problem you are >>>> running into. This is the preferable path for bare metal because it avoids >>>> exposing provider details to users and doesn't tie you to VLANs on the >>>> backend. >>>> >>>> 1. http://ipcisco.com/vlan-mapping-vlan-translation-%E2%80%93-part-2/ >>>> >>>> On Wed, Dec 7, 2016 at 7:49 AM, Armando M. <arma...@gmail.com> wrote: >>>> >>>>> >>>>> >>>>> On 7 December 2016 at 04:02, Vasyl Saienko <vsaie...@mirantis.com> >>>>> wrote: >>>>> >>>>>> Armando, Kevin, >>>>>> >>>>>> Thanks for your comments. >>>>>> >>>>>> To be more clear we are trying to use neutron trunks implementation >>>>>> with baremetal servers (Ironic). Baremetal servers are plugged to Tor >>>>>> (Top >>>>>> of the Rack) switch. User images are spawned directly onto hardware. >>>>>> >>>>> Ironic uses Neutron ML2 drivers to plug baremetal servers to Neutron >>>>>> networks (it looks like changing vlan on the port to segmentation_id from >>>>>> Neutron network, scenario 1 in the attachment). Ironic works with VLAN >>>>>> segmentation only for now, but some vendors ML2 like arista allows to use >>>>>> VXLAN (in this case VXLAN to VLAN mapping is created on the switch.). >>>>>> Different users may have baremetal servers connected to the same ToR >>>>>> switch. >>>>>> >>>>>> By trying to apply current neutron trunking model leads to the >>>>>> following errors: >>>>>> >>>>>> *Scenario 2: single user scenario, create VMs with trunk and >>>>>> non-trunk ports.* >>>>>> >>>>>> - User create two networks: >>>>>> net-1: (provider:segmentation_id: 100) >>>>>> net-2: (provider:segmentation_id: 101) >>>>>> >>>>>> - User create 1 trunk port >>>>>> port0 - parent port in net-1 >>>>>> port1 - subport in net-2 and define user segmentation_id: 300 >>>>>> >>>>>> - User boot VMs: >>>>>> BM1: with trunk (connected to ToR Fa0/1) >>>>>> BM4: in net-2 (connected to ToR Fa0/4) >>>>>> >>>>>> - VLAN on the switch are configured as follow: >>>>>> Fa0/1 - trunk, native 100, allowed vlan 300 >>>>>> Fa0/4 - access vlan 101 >>>>>> >>>>>> *Problem:* BM1 has no access BM4 on net-2 >>>>>> >>>>>> >>>>>> *Scenario 3: multiple user scenario, create VMs with trunk.* >>>>>> >>>>>> - User1 create two networks: >>>>>> net-1: (provider:segmentation_id: 100) >>>>>> net-2: (provider:segmentation_id: 101) >>>>>> >>>>>> - User2 create two networks: >>>>>> net-3: (provider:segmentation_id: 200) >>>>>> net-4: (provider:segmentation_id: 201) >>>>>> >>>>>> - User1 create 1 trunk port >>>>>> port0 - parent port in net-1 >>>>>> port1 - subport in net-2 and define user segmentation_id: 300 >>>>>> >>>>>> - User2 create 1 trunk port >>>>>> port0 - parent port in net-3 >>>>>> port1 - subport in net-4 and define user segmentation_id: 300 >>>>>> >>>>>> - User1 boot VM: >>>>>> BM1: with trunk (connected to ToR Fa0/1) >>>>>> >>>>>> - User2 boot VM: >>>>>> BM4: with trunk (connected to ToR Fa0/4) >>>>>> >>>>>> - VLAN on the switch are configured as follow: >>>>>> Fa0/1 - trunk, native 100, allowed vlan 300 >>>>>> Fa0/4 - trunk, native 200, allowed vlan 300 >>>>>> >>>>>> *Problem:* User1 BM1 has access to User2 BM4 on net-2, Conflict in >>>>>> VLAN mapping provider vlan 101 should be mapped to user vlan 300, and >>>>>> provider vlan 201 should be also mapped to vlan 300 >>>>>> >>>>>> >>>>>> Making segmentation_id on trunk subport optional and inheriting it >>>>>> from port network segmentation_id solves such problems. >>>>>> According to original spec both segmentation_type and segmentation_id >>>>>> are optional [0]. >>>>>> >>>>>> Does Neutron/Nova place information about user's VLAN onto instance >>>>>> via network metadata? >>>>>> >>>>>> Reference: >>>>>> [0] https://review.openstack.org/#/c/308521/1/specs/newton/v >>>>>> lan-aware-vms.rst@118 >>>>>> >>>>> >>>>> Ah, I was actually going to add the following: >>>>> >>>>> Whether segmentation type and segmentation ID are mandatory or not >>>>> depends on the driver in charge of the trunk. This is because for use >>>>> cases >>>>> like Ironic, as you wonder, these details may be inferred by the >>>>> underlying >>>>> network, as you point out. >>>>> >>>>> However, we have not tackled the Ironic use case just yet, for the >>>>> main reason that ironic spec [1] is still WIP. So as far as newton is >>>>> concerned, Ironic is not on the list of supported use cases for >>>>> vlan-aware-vms, yet [2]. The reason why we have not tackled it yet is that >>>>> there's the 'nuisance' in that a specific driver is known to the trunk >>>>> plugin only at the time a parent port is bound and we hadn't come up with >>>>> a >>>>> clean and elegant way to developer a validator that took into account of >>>>> it. I'll file a bug report to make sure this won't fall through the >>>>> cracks. >>>>> It'll be tagged with 'trunk'. >>>>> >>>>> [1] https://review.openstack.org/#/c/277853/ >>>>> [2] https://github.com/openstack/neutron/blob/master/neutron >>>>> /services/trunk/rules.py#L215 >>>>> >>>>> Cheers, >>>>> Armando >>>>> >>>>> >>>>>> >>>>>> Thanks in advance, >>>>>> Vasyl Saienko >>>>>> >>>>>> On Tue, Dec 6, 2016 at 7:08 PM, Armando M. <arma...@gmail.com> wrote: >>>>>> >>>>>>> >>>>>>> >>>>>>> On 6 December 2016 at 08:49, Vasyl Saienko <vsaie...@mirantis.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Hello Neutron Community, >>>>>>>> >>>>>>>> >>>>>>>> I've found that nice feature vlan-aware-vms was implemented in >>>>>>>> Newton [0]. >>>>>>>> However the usage of this feature for regular users is impossible, >>>>>>>> unless I'm missing something. >>>>>>>> >>>>>>>> As I understood correctly it should work in the following way: >>>>>>>> >>>>>>>> 1. It is possible to group neutron ports to trunks. >>>>>>>> 2. When trunk is created parent port should be defined: >>>>>>>> Only one port can be parent. >>>>>>>> segmentation of parent port is set as native or untagged vlan >>>>>>>> on the trunk. >>>>>>>> 3. Other ports may be added as subports to existing trunk. >>>>>>>> When subport is added to trunk *segmentation_type* and >>>>>>>> *segmentation_id >>>>>>>> *should be specified. >>>>>>>> segmentation_id of subport is set as allowed vlan on the trunk >>>>>>>> >>>>>>>> Non-admin user do not know anything about *segmentation_type* and >>>>>>>> *segmentation_id.* >>>>>>>> >>>>>>> >>>>>>> Segmentation type and ID are used to multiplex/demultiplex traffic >>>>>>> in/out of the guest associated to a particular trunk. Aside the fact >>>>>>> that >>>>>>> the only supported type is VLAN at the moment (if ever), the IDs are >>>>>>> user >>>>>>> provided to uniquely identify the traffic coming in/out of the trunked >>>>>>> networks so that it can reach the appropriate vlan interface within the >>>>>>> guest. The documentation [1] is still in flight, but it clarifies this >>>>>>> point. >>>>>>> >>>>>>> HTH >>>>>>> Armando >>>>>>> >>>>>>> [1] https://review.openstack.org/#/c/361776 >>>>>>> >>>>>>> >>>>>>>> So it is strange that those fields are mandatory when subport is >>>>>>>> added to trunk. Furthermore they may conflict with port's network >>>>>>>> segmentation_id and type. Why we can't inherit segmentation_type and >>>>>>>> segmentation_id from network settings of subport? >>>>>>>> >>>>>>>> References: >>>>>>>> [0] https://blueprints.launchpad.net/neutron/+spec/vlan-aware-vms >>>>>>>> [1] https://review.openstack.org/#/c/361776/15/doc/networking-gu >>>>>>>> ide/source/config-trunking.rst >>>>>>>> [2] https://etherpad.openstack.org/p/trunk-api-dump-newton >>>>>>>> >>>>>>>> Thanks in advance, >>>>>>>> Vasyl Saienko >>>>>>>> >>>>>>>> ____________________________________________________________ >>>>>>>> ______________ >>>>>>>> OpenStack Development Mailing List (not for usage questions) >>>>>>>> Unsubscribe: openstack-dev-requ...@lists.op >>>>>>>> enstack.org?subject:unsubscribe >>>>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> ____________________________________________________________ >>>>>>> ______________ >>>>>>> OpenStack Development Mailing List (not for usage questions) >>>>>>> Unsubscribe: openstack-dev-requ...@lists.op >>>>>>> enstack.org?subject:unsubscribe >>>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>>>>>> >>>>>>> >>>>>> >>>>>> ____________________________________________________________ >>>>>> ______________ >>>>>> OpenStack Development Mailing List (not for usage questions) >>>>>> Unsubscribe: openstack-dev-requ...@lists.op >>>>>> enstack.org?subject:unsubscribe >>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>>>>> >>>>>> >>>>> >>>>> ____________________________________________________________ >>>>> ______________ >>>>> OpenStack Development Mailing List (not for usage questions) >>>>> Unsubscribe: openstack-dev-requ...@lists.op >>>>> enstack.org?subject:unsubscribe >>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>>>> >>>>> >>>> >>>> ____________________________________________________________ >>>> ______________ >>>> OpenStack Development Mailing List (not for usage questions) >>>> Unsubscribe: openstack-dev-requ...@lists.op >>>> enstack.org?subject:unsubscribe >>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>>> >>>> >>> >>> ____________________________________________________________ >>> ______________ >>> OpenStack Development Mailing List (not for usage questions) >>> Unsubscribe: openstack-dev-requ...@lists.op >>> enstack.org?subject:unsubscribe >>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>> >>> >> >> ____________________________________________________________ >> ______________ >> OpenStack Development Mailing List (not for usage questions) >> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscrib >> e >> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >> >> > > __________________________________________________________________________ > OpenStack Development Mailing List (not for usage questions) > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > >
__________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev