美文网首页
openvswitch和namespace的搭配使用

openvswitch和namespace的搭配使用

作者: 周鹏宇1994 | 来源:发表于2018-10-20 20:41 被阅读0次

    记录一下关于使用ip命令操作namespace的方法,刚好装了openvswitch,搭配ovs进行一下联合测试。

    先简单介绍一下namespace的相关概念
    Namespace是Linux提供的一种内核级别环境隔离的方法
    这里引用一张图

    image.png

    namespace实际上有6中,比如说容器的实现也正是利用了namespace,这里只是单纯的说明一下网络命名空间

    Network NameSpace实质上是为了支持kvm、容器等虚拟化所打造的一个虚拟化网络环境,他使得你可以创建不同的命名空间,并且每个命名空间都是相对独立的,有自己的ip、arp、route,并且每个命名空间都相互不影响。
    举个简单的例子:docker容器namespace点对点通信
    这里说明了操作不同的ns可以给ns所对应的container中添加netdev,也就刚好说明了container的隔离性。

    拓扑结构如下

    image.png

    先创建两个namespace

    [root@docker_server ~]# ip netns add ns1
    [root@docker_server ~]# ip netns add ns2
    

    然后再创建两组veth
    veth的概念引用博客:Linux-虚拟网络设备-veth pair
    简单说就是:成对出现,两个相互连接的命名空间(两个设备间相当于用网线直接连接在一起)

    [root@docker_server ~]# ip link add type veth
    [root@docker_server ~]# ip link add type veth
    

    默认会创建下面两对点到点的veth
    veth0---veth1
    veth2---veth3

    或者这样创建自定义命名设备
    ip link add veth0 type veth peer name veth1
    ip link add veth2 type veth peer name veth2

    把veth1/veth3划到ns1/ns2中,并配置ip

    [root@docker_server ~]# ip link set veth1 netns ns1
    [root@docker_server ~]# ip link set veth3 netns ns2
    [root@docker_server ~]# ip netns exec ns1 ip addr add 192.168.1.1/24 dev veth1
    [root@docker_server ~]# ip netns exec ns2 ip addr add 192.168.1.2/24 dev veth3
    [root@docker_server ~]# ip netns exec ns1 ip link set dev veth1 up 
    [root@docker_server ~]# ip netns exec ns2 ip link set dev veth3 up
    
    [root@docker_server ~]# ip netns exec ns1 ip addr show veth1
    15: veth1@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
        link/ether 42:21:16:e1:1b:d2 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 192.168.1.1/24 scope global veth1
           valid_lft forever preferred_lft forever
        inet6 fe80::4021:16ff:fee1:1bd2/64 scope link 
           valid_lft forever preferred_lft forever
    
    [root@docker_server ~]# ip netns exec ns2 ip addr show veth3 
    17: veth3@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
        link/ether 06:78:37:29:b4:2a brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 192.168.1.2/24 scope global veth3
           valid_lft forever preferred_lft forever
        inet6 fe80::478:37ff:fe29:b42a/64 scope link 
           valid_lft forever preferred_lft forever
    
    

    先ping一下,测试一下namespace的功能

    [root@docker_server ~]# ip netns exec ns1 ping -c1 192.168.1.2
    PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
    
    --- 192.168.1.2 ping statistics ---
    1 packets transmitted, 0 received, 100% packet loss, time 0ms
    
    

    在把veth1/veth3的点对点设备veth0/veth2划到ovs0中,并up端口

    [root@docker_server ~]# ovs-vsctl add-port ovs0 veth0
    [root@docker_server ~]# ovs-vsctl add-port ovs0 veth3
    [root@docker_server ~]# ip link set dev veth0 up 
    [root@docker_server ~]# ip link set dev veth2 up
    [root@docker_server ~]# ovs-vsctl show
    03a08428-3278-4a6c-835b-29f4d91e5da2
        Bridge "ovs0"
            Port "veth2"
                Interface "veth2"
            Port "ovs0"
                Interface "ovs0"
                    type: internal
            Port "veth0"
                Interface "veth0"
            Port "gre1"
                Interface "gre1"
                    type: gre
                    options: {remote_ip="172.16.0.2"}
    
    

    从ns1上ping ns2

    [root@docker_server ~]# ip netns exec ns1 ping -c1 192.168.1.2
    PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
    64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=2.48 ms
    
    --- 192.168.1.2 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 2.484/2.484/2.484/0.000 ms
    [root@docker_server ~]# 
    

    ovs,namespace,veth的功能都符合预期

    相关文章

      网友评论

          本文标题:openvswitch和namespace的搭配使用

          本文链接:https://www.haomeiwen.com/subject/uzomzftx.html