【nova】【nova-network】nova-network在FlatDHCP模型下给VM分配多网卡

     在配置多网卡过程中,发现将多个网络配置在一个网桥上会出现网络不可用的现象, 例如在创建好以下两个网络之后:
nova network-create demo-net-1 --bridge br100  --multi-host T --fixed-range-v4 10.0.0.1/24
nova network-create demo-net-2  --bridge br100  --multi-host T --fixed-range-v4 10.1.0.1/24
     在这种情况下创建好网络之后启动VM,VM会获得网络,但是对应的VM不能获取到IP,也不能上网

     经过测试,只要将多个网络分别创建在不同的网卡上,这些网络就可以正常使用
     由于OpenStack Dashboard在启动VM的时候,会默认将对应项目创建的所有网络都分配给虚拟机,因此不利于我们进行多网卡分配的测试,在这边建议使用命令形式或者是http请求的形式

     接下来展示一下nova-network在FlatDHCP模型下给VM分配多网卡步骤:
  • 步骤一:创建一个cirros镜像
  • glance image-create --name cirros-mirror --file { cirros-path } --disk-format raw --container-format bare --visibility public  --progress
    //这边属性visibility如果设置成private,那么其余的项目比如demo项目下的用户则无法使用该镜像
  • 步骤二
    • 检查nova-network服务是否正常
    • 检查nova net-list下所有的网络是否清除(如果是第一次做本测试,最好清空掉以前创建的网络)
    • 检查所有nova-network节点上的/etc/nova/nova.conf配置文件
    • [DEFAULT]
      dhcpbridge_flagfile=/etc/nova/nova.conf
      dhcpbridge=/usr/bin/nova-dhcpbridge
      logdir=/var/log/nova
      state_path=/var/lib/nova
      lock_path=/var/lock/nova
      force_dhcp_release = True
      libvirt_use_virtio_for_bridges=True
      verbose = True
      ec2_private_dns_show_ip=True
      api_paste_config=/etc/nova/api-paste.ini
      enabled_apis=ec2,osapi_compute,metadata

      libvirt_inject_password=true
      inject_key=true
      inject_partition=-1
      inject_password=true

      #openstack 从H版本默认不再支持文件注入,推荐使用ConfigDrive或metadata服务。如果要继续使用, 需要配置inject_key=true,inject_partition,inject_password=true ,Config Drive的目的是,当nova实例启动后,可以mount一个元数据的文件系统,方便交换数据。

      vnc_enabled = True

      network_size = 254
      send_arp_for_ha = True
      share_dhcp_address = True
      network_api_class = nova.network.api.API
      public_interface = br0
      flat_interface = eth1

      network_manager = nova.network.manager.FlatDHCPManager
      flat_network_bridge =
      firewall_driver = nova.virt.libvirt.firewall.IptablesFirewallDriver
      allow_same_net_traffic = False
      multi_host = True
      flat_injected = True


      my_ip = 192.168.10.137
      security_group_api = nova
      vncserver_listen = 0.0.0.0
      vncserver_proxyclient_address = 192.168.10.137

      #network_manager = nova.network.manager.VlanManager
      #firewall_driver = nova.virt.libvirt.firewall.IptablesFirewallDriver
      #network_size = 254
      #allow_same_net_traffic = False
      #multi_host = True
      #send_arp_for_ha = True
      #share_dhcp_address = True
      #force_dhcp_release = True
      #vlan_interface = eth1
      #vlan_start = 100
      #public_interface = br0
    • #VLAN网络模型配置

      auth_strategy = keystone
      novncproxy_base_url = http://192.168.10.139:6080/vnc_auto.html
      rpc_backend = rabbit
    • 检查所有nova-network节点上的网桥是否清空,如果还存在如下现象建议使用ifconfig br100 down; brctl delbr br100清除。

  • 步骤三: 使用nova network-create 创建两个网络net-1、net-2
          
  • 步骤四使用nova boot创建实例

  • nova --debug boot cirros-server-instance-2 --flavor 1 --image cirros-server --security-groups default --nic net-id=99c57696-ecce-4bfb-b3cc-dc13ce0d68ae
    //net-id为所创建的net-1的id,也可以选择net-2的id,这个需要根据用户选择
    //--debug是为了监控每次执行命令的时候是否报出异常信息等等,同时也可以看到调用了哪些http接口,这个参数对于所有的nova命令都适用

  创建好之后,可以到dashboard看到如下显示,对应的网络IP已经分配给了VM

          在通过控制台可以看到对应的hostname就是VM的名称,说明这个VM再启动的时候是以非常快的速度进行了cloud-init的程序执行,同时因为cloud-init需要网络支持,所以可以知道这时候网络是访问到外网了,此时登录也可以看到ip是分配成功的

          

  • 步骤五:这个时候就需要通过手动为用户添加一个新的网络(当然可以添加同一个网络,会分配一个不同的IP)执行一下命令:
  • nova --debug  add-fixed-ip 07ad9058-dfe8-4150-9cf7-d30594584aff f9ff28cd-57e0-4c8a-b8f9-9dac3ad8a2f1
    //绿色的注释是对应的instance-id红色的注释是想要添加给VM的网络id
这个时候通过nova show cirros-server-instance-2,可以看到网络net-2已经添加成功

  • 步骤六:
          这个时候,进入到VM中,通过修改/etc/network/interfaces文件,添加一个网卡的dhcp配置,这样之后,重启VM,会发现,这个网络虽然在OpenStack层面已经分配给VM    了,但是VM却不能使用!!!为什么呢?
          
          这是因为,这个时候对应的VM的xml文件是没有配置上对应的网卡的,我们可以到这个VM对应的计算节点通过virsh edit来查看,只有一个网卡存在。

          
  • 步骤七:
由于现在对应配置好的网卡虽然在OpenStack层面是分配成功了,但是却没有分配到真实的网络上面,这个时候其实主要可以通过两种方式来解决,一种是通过手动修改对应虚机的xml文件(这显然是行不通的,不允许绕过OpenStack做),另一种就是通过修改metadata的方式。
通过查阅,暂时提供的一种方式就是通过硬重启。事实上,在reboot一个instance的时候,这个instance的libvirt.xml(只考虑kvm环境)会重新从数据库中生成。
nova reboot --hard  cirros-server-instance-2 

问题:     
由于cirros镜像本身的原因,硬重启之后会卡在cloud-init程序中,这不是OpenStack层面的原因,如果想要比较快速的测试,可以使用  ubuntu-trusty的镜像来实现。
通过硬重启生效的方式比较奇怪,但是为了网络生效感觉确实需要一定的干预,就算是直接通过元数据的修改生效,也感觉需要重启一次生效
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值