【OpenStack】OpenStack系列11之namaspace&openvswitch原理實踐

  1. Namespace實現網絡隔離與互通
    1. 新建ns:

      ip netns add foo python

    2. 查看ns:

      ip netns linux

    3. 查看ns詳細配置:

      ip netns exec foo ip addr git

    4. 設置ns內部lo網絡up:

      ip netns exec foo ip link set lo up github

      ip netns exec foo ip addr 網絡

      ip netns exec foo route –n spa

      ip netns exec foo iptables -t nat –S 3d

    5. ip netns exec foo ping 10.20.0.88

    6. 建立tap設備對:

      ip link add tap-foo type veth peer name tap-root rest

      ip link router

      使用ethtool確認屬於成對設備: xml

    7. 設置tap設備的ns:

      ip link set tap-foo netns foo

      ip netns exec foo ip link

      ip netns exec foo ip link set tap-foo up

      root的ns看不到foo-tap了:

    8. 爲tap設備添加ip地址

      ip netns exec foo ip addr add 88.88.88.100/24 dev tap-foo

      ip netns exec foo ifconfig

    9. 設置tap-root設備的ip地址

      ip addr add 88.88.88.101/24 dev tap-root

    10. up起root的tap設備

      ip link set tap-root up

      ifconfig

    11. 能夠相互ping通88.88.88.100、88.88.88.101,可是仍然不可訪問10.20.0.88

      ip netns exec foo ping 10.20.0.88

    12. 設置默認路由

      ip netns exec foo route add -net 0.0.0.0 netmask 0.0.0.0 gw 88.88.88.101

      ip netns exec foo route –n

    13. 繼續ping 10.20.0.88,能夠ping通

      ip netns exec foo ping 10.20.0.88

    14. 機器重啓全部配置自動清除。
  2. Openvswitch VM+GRE隧道實現同網段虛擬機跨主機通訊
    1. 環境拓撲

    2. 環境準備

      network1

    eth0:10.20.0.201 (management network)

    eht1:172.16.0.201 (public/external network)

    eht2:192.168.4.201 (private network,gre tunning)

     

    compute1

    eth0:10.20.0.202 (management network)

    eht1:(disabled)

    eht2:192.168.4.202 (private network,gre tunning)

    1. 先看網絡節點。

      安裝必備軟件包:yum install libvirt openvswitch python-virtinst xauth tigervnc –y

    yum install kvm qemu-kvm qemu-kvm-tools

    yum install bridge-utils qemu-img

    yum install python-virtinst virt-manager virt-viewer

    yum install libvirt libvirt-client

    reboot -h 0,vm重啓生效。

    1. 移除默認的libvirt網絡

    virsh net-destroy default

    virsh net-autostart --disable default

    virsh net-undefine default

    virsh net-list

    1. 設置容許ipforward

    vi /etc/sysctl.conf

    net.ipv4.ip_forward=1

    net.ipv4.conf.all.rp_filter=0

    net.ipv4.conf.default.rp_filter=0

    sysctl –p,當即生效。

    1. 啓動openvswitch

      service openvswitch start

      chkconfig openvswitch on

    2. 建立linux bridge,qbr設備,虛擬機網卡與br-int網橋之間的橋樑網橋。

      brctl addbr qbr01

      ip link set qbr01 up

      brctl show

      ifconfig

    3. 建立虛擬機,虛擬機網卡鏈接到網橋qbr01的tap設備:

      mkdir -p /var/tmp/gre

      mv instance1.img instance1.xml /var/tmp/gre

      instance文件參考:

      https://github.com/yongluo2013/osf-openstack-training/blob/master/installation/gre/instance1.xml

      cd /var/tmp/gre

      virsh define instance1.xml

      virsh start instance1

      virsh vncdisplay instance1

      vncviewer :0

      vncviewer進入虛擬機。

    4. 爲虛擬機配置IP與默認網關

      sudo ip addr add 192.168.1.11/24 dev eth0

      sudo route add default gw 192.168.1.1

    5. 建立br-int網橋,用於鏈接qbr網橋

      ovs-vsctl add-br br-int

      ovs-vsctl add-port br-int gre0 -- set interface gre0 type=gre options:remote_ip=192.168.4.202

    6. 建立tap對,用於br-int與qbr之間的鏈接

      ip link add qvo01 type veth peer name qvb01

      brctl addif qbr01 qvb01,設置qvb01爲qbr01的接口

      ovs-vsctl add-port br-int qvo01

      ovs-vsctl set port qvo01 tag=100

      ip link set qvb01 up

      ip link set qvo01 up

      br-int如下的網絡設備均up起來了

    7. 再看計算節點。準備軟件與網絡節點一致。

      brctl addbr qbr02

      ip link set qbr02 up

       

      virsh define instance2.xml

      virsh start instance2

      virsh vncdisplay instance2

      vncviewer :0

       

      sudo ip addr add 192.168.1.12/24 dev eth0

      sudo route add default gw 192.168.1.1

       

      ovs-vsctl add-br br-int

      ovs-vsctl add-port br-int gre0 -- set interface gre0 type=gre options:remote_ip=192.168.4.201

       

      ip link add qvo02 type veth peer name qvb02

      brctl addif qbr02 qvb02

      ovs-vsctl add-port br-int qvo02

      ovs-vsctl set port qvo02 tag=100

      ip link set qvb02 up

      ip link set qvo02 up

       

    8. 至此,vm01的192.168.1.11能夠ping通vm02的192.168.1.12。在沒有namespace場景下,同一vlan能夠直接連通。

      vm01:

       

      vm02:

  3. Openvswitch VM+GRE隧道+NameSpace實現dhcp的namespace
    1. 添加dhcp的ns

      ip netns add dhcp01

    2. 爲br-int添加dhcp的tap設備接口

      ovs-vsctl add-port br-int tapdhcp01 -- set interface tapdhcp01 type=internal

    3. ovs-vsctl set port tapdhcp01 tag=100

    4. 設置tap設備所屬的ns

      ip link set tapdhcp01 netns dhcp01

    5. 爲dhcp的tap設備設置ip

      ip netns exec dhcp01 ip addr add 192.168.1.2/24 dev tapdhcp01

      ip netns exec dhcp01 ip link set tapdhcp01 up

    6. 在namespace中能夠訪問vm01與vm02。
  4. Openvswitch VM+GRE隧道+NameSpace實現router的namespace
    1. ovs-vsctl add-br br-ex
    2. 從新配置eth1和br-ex

    vi /etc/sysconfig/network-scripts/ifcfg-eth1

    DEVICE=eth1

    ONBOOT=yes

    BOOTPROTO=none

    PROMISC=yes

    MTU=1546

     

    vi /etc/sysconfig/network-scripts/ifcfg-br-ex

    DEVICE=br-ex

    TYPE=Bridge

    ONBOOT=yes

    BOOTPROTO=none

    IPADDR0=172.16.0.201

    PREFIX0=24

     

    ovs-vsctl add-port br-ex eth1

    1. 重啓網絡服務:service network restart

      ip link set br-ex up

      sudo ip addr add 172.16.0.20/24 dev br-ex

    2. 添加router的ns

      ip netns add router01

    3. 添加私網的網關

      ovs-vsctl add-port br-int qr01 -- set interface qr01 type=internal

      ovs-vsctl set port qr01 tag=100

    4. 設置網關在router01的ns中

      ip link set qr01 netns router01

      ip netns exec router01 ip addr add 192.168.1.1/24 dev qr01

      ip netns exec router01 ip link set qr01 up

      ip netns exec router01 ip link set lo up

    5. 至此,路由器的qr端能夠ping通vm的私有ip。

    6. 在br-ex中添加qg設備,設置爲私有網段鏈接外網的下一跳地址

    ovs-vsctl add-port br-ex qg01 -- set interface qg01 type=internal

    ip link set qg01 netns router01

    ip netns exec router01 ip addr add 172.16.0.100/24 dev qg01

    ip netns exec router01 ip link set qg01 up

    ip netns exec router01 ip link set lo up

     

    1. 爲虛擬機添加浮動ip,而且配置iptables,規則使虛擬機能夠訪問外網

      ip netns exec router01 ip addr add 172.16.0.101/32 dev qg01

      ip netns exec router01 iptables -t nat -A OUTPUT -d 172.16.0.101/32 -j DNAT --to-destination 192.168.1.11

      ip netns exec router01 iptables -t nat -A PREROUTING -d 172.16.0.101/32 -j DNAT --to-destination 192.168.1.11

      ip netns exec router01 iptables -t nat -A POSTROUTING -s 192.168.1.11/32 -j SNAT --to-source 172.16.0.101

      ip netns exec router01 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 172.16.0.100

    2. 到此,能夠使用洗浮動IP訪問虛擬機,以下圖所示:

  5. 參考文檔:

    https://github.com/yongluo2013/osf-openstack-training/blob/master/installation/mock-neutron-sdn-with-ovs-gre.md

相關文章
相關標籤/搜索