← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 2058433] Re: a public network with multi subnets , but based on ovn, They can't communicate with each other

 

[Expired for neutron because there has been no activity for 60 days.]

** Changed in: neutron
       Status: Incomplete => Expired

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/2058433

Title:
  a public network with multi subnets , but based on ovn, They can't
  communicate with each other

Status in neutron:
  Expired

Bug description:
  a public network with multi subnets , but based on ovn, They can't
  communicate with each other

  Hi, I think it's not a bug, or it's a logical bug, when I change my
  mechanism_driver from openvswitch to ovn, I've been troubled by this
  matter for a long time.

  ok, my scenario: I applied a subnets from ISP provider, let's call it
  subnet1 of public_network , After a period of time, the subnet IP is
  not enough, So I applied for another subnets, let's call it subnet2 of
  public_network. until now, the public_network will have two subnet.

  But FIPs based on two subnets cannot communicate with each other, The
  FIP of the subnet2 cannot communicate with itself either.

  I found some bug reports :
  <https://bugzilla.redhat.com/show_bug.cgi?id=1920025><https://access.redhat.com/errata/RHBA-2022:9044>
  <https://bugzilla.redhat.com/show_bug.cgi?id=1929901> , but those
  think it's a ovn bug.

  And in my test, I' found it's a neutron logical bug, yes or no, it's a
  bug, ha

  
  In neutron ovn_client.py, the function _update_lrouter_port , it's will be called by create or update or delete. sub function get_nets_and_ipv6_ra_confs_for_router_port will get all subnet of network. but but, if a subnet not a fixed ip in the router, it's can't be get.

  ```
      def _update_lrouter_port(self, context, port, if_exists=False, txn=None):
          """Update a logical router port."""
          networks, ipv6_ra_configs = (
              self._get_nets_and_ipv6_ra_confs_for_router_port(context, port))

          lsp_address = ovn_const.DEFAULT_ADDR_FOR_LSP_WITH_PEER
          lrp_name = utils.ovn_lrouter_port_name(port['id'])
          update = {'networks': networks, 'ipv6_ra_configs': ipv6_ra_configs}
          is_gw_port = const.DEVICE_OWNER_ROUTER_GW == port.get(
              'device_owner')
          commands = [
              self._nb_idl.update_lrouter_port(
                  name=lrp_name,
                  external_ids=self._gen_router_port_ext_ids(port),
                  options=self._gen_router_port_options(port),
                  if_exists=if_exists,
                  **update),
              self._nb_idl.set_lrouter_port_in_lswitch_port(
                  port['id'], lrp_name, is_gw_port=is_gw_port,
                  lsp_address=lsp_address)]

          self._transaction(commands, txn=txn)
    
      def _get_nets_and_ipv6_ra_confs_for_router_port(self, context, port):
          port_fixed_ips = port['fixed_ips']
          networks = set()
          ipv6_ra_configs = {}
          ipv6_ra_configs_supported = self._nb_idl.is_col_present(
              'Logical_Router_Port', 'ipv6_ra_configs')
          is_gw_port = const.DEVICE_OWNER_ROUTER_GW == port.get(
              'device_owner')
          
          # here, it's port_fixed_ips, so subnets2 no fixed ip belong to router external_port 
          for fixed_ip in port_fixed_ips:
              subnet_id = fixed_ip['subnet_id']
              subnet = self._plugin.get_subnet(context, subnet_id)
              cidr = netaddr.IPNetwork(subnet['cidr'])
              networks.add("%s/%s" % (fixed_ip['ip_address'],
                                      str(cidr.prefixlen)))

  ```

  ok, fine, that's ok, it can be resolved, set router port multiple
  fixed ip. But there is no documentation or tutorial telling openstack
  administrators to do this. no one.

  ```
  # openstack port show b64eb3b2-d60b-4054-a4ea-adf926efe824 -f json 
  {
    ...
    "fixed_ips": [
      {
        "subnet_id": "d7241630-a850-45c8-9b72-7ff20d3a00e3",
        "ip_address": "192.168.0.100"
      },
      {
        "subnet_id": "e8cd9b0b-6d66-462a-aaaa-dd5867368f85",
        "ip_address": "192.168.1.100"
      }
    ],
    ...
  }

  ```

  
  When mechanism_driver is openvswitch, Routing is implemented by iptables, which does not require multiple fixed IPs to be set on the routing port. but ovn not, it need.

  So my opinion is
  plan1: traverse all subnet in _get_nets_and_ipv6_ra_confs_for_router_port

  or plan2: tell us need add multiple fixed ip to router external_port
  when have multiple subnets

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/2058433/+subscriptions



References