Openstack neutron多个external network

    xiaoxiao2021-12-03  18

    基于Openstack kilo版本

    Neutron本身的设计可以支持多个external network, 今天试了一下这个功能,由于环境的局限,外网和管理网是同一个,

    外网上建立了一个网桥br-eth2, 同时建立了另外一个网桥br-ex,这两个网桥提供外网的服务。

    实验一, 测试两个external network是否能绑定到同一个物理网桥上, 失败

    配置:

    Ml2的配置/etc/neutron/plugins/ml2/ml2_conf.ini

    [ml2_type_flat]

    flat_networks = default,physnet1,ext1,ext2

    OVS的配置文件/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini

    [OVS]

    bridge_mappings =default:br-eth1,ext1:br-ex,ext2:br-ex

    l3_agent的配置文件 /etc/neutron/l3_agent.ini

    [DEFAULT]

    gateway_external_network_id =

    external_network_bridge =

    该实验已失败告终,因为br-int上的流表会产生错乱,因为ext1 和ext2网络的in-port是同一个。

    实验二,测试两个external network绑定到两个物理网桥上, 成功

    Ml2的配置/etc/neutron/plugins/ml2/ml2_conf.ini

    [ml2_type_flat]

    flat_networks = default,physnet1,ext1,ext2

    OVS的配置文件/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini

    [OVS]

    bridge_mappings =default:br-eth1,ext1:br-eth2,ext2:br-ex

    l3_agent的配置文件 /etc/neutron/l3_agent.ini

    [DEFAULT]

    gateway_external_network_id =

    external_network_bridge =

    步骤:

    1. 创建两个external network

    $ neutron net-create --shared --router:external --provider:network_type flat --provider:physical_network ext1 external1

    $ neutron subnet-create --name external1-sub --gateway 10.160.57.254 --allocation-pool start=10.160.57.194,end=10.160.57.200 --disable-dhcp external1 10.160.57.0/24

    $ neutron net-create --shared --router:external --provider:network_type flat --provider:physical_network ext2 external2

    $ neutron subnet-create --name external2-sub --gateway 10.160.57.254 --allocation-pool start=10.160.57.201,end=10.160.57.209 --disable-dhcp external2 10.160.57.0/24

    2. 创建两个router,分别把网关绑定到两个external network

    $ neutron router-create test-router1

    $ neutron router-create test-router2

    $ neutron router-gateway-set test-router1 external1

    $ neutron router-gateway-set test-router2 external2

    3. 创建内部网络,并创建两个subnet分别绑定到两个路由上

    $ neutron net-create --name lan-test

    $ neutron subnet-create lan-test 172.16.1.0/24

    $ neutron subnet-create lan-test 172.16.2.0/24

    $ neutron router-interface-add test-router1 6507b2f6-4409-42fd-862e-c41db4653147

    $ neutron router-interface-add test-router2 a2ac2ca9-e7d1-4e86-9320-1987b72880a1

    NOTE:做这个测试的目的是我们希望一个虚拟机可以通过两个floatingip提供服务

    4. 部署虚拟机指定网络的其中一个subnet

    $ nova boot --image centos7-x64 --nic net-id=5abf3f34-428b-4f3a-82e8-82d8a092d5b4  --flavor 1 instance01

    5. 创建另外一个subnet的port,并绑定到这个虚拟机上

    $ neutron port-create lan-test --fixed-ip subnet_id=6507b2f6-4409-42fd-862e-c41db4653147

    $ nova interface-attach instance01 --port-id aa4e02ee-e514-426d-85c3-43b72ecab3a5

    这时候会虚拟机上会有两个网卡,不过只有一个默认路由

    6. 创建两个floatingip,分别绑定到虚拟机的两个网卡上

    $ neutron floatingip-create external1

    $ neutron floatingip-create external2

    $ neutron floatingip-associate 5b9a1c92-13e2-4ec5-84b6-00c72e4d9bbb aa4e02ee-e514-426d-85c3-43b72ecab3a5

    $ neutron floatingip-associate ceb75c33-fcee-4552-9942-d3f75858facd 49d50bc5-0684-42fa-bd16-8cb27fd1db17

    两个floatingip的地址分别为10.160.57.195和10.160.57.202

    这个时候只用通过其中的floatingip访问,因为虚拟机内部只有一个默认路由。

    7. 在其中的一个router中创建SNAT规则,使得从该router进来的ip都转化成该subnet的网关

    $ ip netns exec qrouter-ce1b4d87-d138-45ce-a0a7-892e8c01a928 iptables -t nat -A neutron-vpn-agen-POSTROUTING -o qr-f67f701e-0b -j SNAT --to-source 172.16.1.1

    这时候两个ip应该都能访问了

    [root@controller1 ~]# ping -c 4 10.160.57.195 PING 10.160.57.195 (10.160.57.195) 56(84) bytes of data. 64 bytes from 10.160.57.195: icmp_seq=1 ttl=63 time=1.19 ms 64 bytes from 10.160.57.195: icmp_seq=2 ttl=63 time=0.718 ms 64 bytes from 10.160.57.195: icmp_seq=3 ttl=63 time=0.766 ms 64 bytes from 10.160.57.195: icmp_seq=4 ttl=63 time=0.918 ms [root@controller1 ~]# ping -c 4 10.160.57.202 PING 10.160.57.202 (10.160.57.202) 56(84) bytes of data. 64 bytes from 10.160.57.202: icmp_seq=1 ttl=63 time=1.79 ms 64 bytes from 10.160.57.202: icmp_seq=2 ttl=63 time=0.857 ms 64 bytes from 10.160.57.202: icmp_seq=3 ttl=63 time=0.760 ms 64 bytes from 10.160.57.202: icmp_seq=4 ttl=63 time=2.86 ms

    问题: 虚拟机里面获取不到真正的源ip地址!!!

    转载请注明原文地址: https://ju.6miu.com/read-680081.html

    最新回复(0)