openvswitch和namespace的搭配使用

记录一下关于使用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的功能都符合预期

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 装载自http://sdnhub.cn/index.php/openv-switch-full-guide/ 1 ...
    ximitc阅读 11,331评论 0 11
  • OpenStackOVSGRE/VXLAN网络 学习或者使用OpenStack普遍有这样的现象:50%的时间花费在...
    石头和齐齐阅读 7,188评论 0 12
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,180评论 2 89
  • Open vSwitch介绍 在过去,数据中心的服务器是直接连在硬件交换机上,后来VMware实现了服务器虚拟化技...
    杀破魂阅读 25,079评论 1 18
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,107评论 19 139

友情链接更多精彩内容