跨物理节点的2层隔离网络--GRE通道

这篇博客介绍了如何在云计算环境中,通过GRE通道解决VLAN TAG限制,实现跨物理节点的2层隔离网络。详细阐述了使用TAG创建网络,以及通过扩展GRE包头的Key字段实现更多隔离网络的方法,并给出了实际操作步骤和示例。
摘要由CSDN通过智能技术生成

使用通道,在不同的节点部署虚拟2层网络

我们可以通过使用TAG来跨节点组件2层网络,但是根据协议来说,VLAN的TAG最多只能定12个bit长度的(VID):

16 bits 3 bits 1 bit 12 bits
TPID PCP CFI VID

当环境中的需要需要的vlan的TAG多于4096的时候就会出现问题,因此需要用其他的解决方案。
参照GRE的文档https://tools.ietf.org/html/rfc2890,使用其中的KEY作为标记,32位的长度就使得我们有足够的标记用来使用。

注:本文是一个简单的模型,并没有做成生产环境的模型,下一节我们将首先分析一个生产环境中的例子,并模拟该生产环境。

首先我们使用TAG创建跨节点的2层网络

此时我们需要两台物理机,在此我使用一台物理机和一台虚拟机来进行模拟的,约定为物理机A(server_1, ip: 10.180.66.3)和物理机B(servier_2,ip:10.180.64.184)

首先我们先初始化server_1中模拟环境

(server_1)(使用上一节说的脚本)
# ./init_vms 
+ ovs-vsctl add-br br-int
+ ip netns add vm_a_1
+ ip netns add vm_a_2
+ ip netns add vm_b_1
+ ip netns add vm_b_2
+ ovs-vsctl add-port br-int vm_a_1 -- set interface vm_a_1 type=internal
+ ovs-vsctl add-port br-int vm_a_2 -- set interface vm_a_2 type=internal
+ ovs-vsctl add-port br-int vm_b_1 -- set interface vm_b_1 type=internal
+ ovs-vsctl add-port br-int vm_b_2 -- set interface vm_b_2 type=internal
+ ip link set vm_a_1 netns vm_a_1
+ ip link set vm_a_2 netns vm_a_2
+ ip link set vm_b_1 netns vm_b_1
+ ip link set vm_b_2 netns vm_b_2
+ ip netns exec vm_a_1 ifconfig vm_a_1 up
+ ip netns exec vm_a_2 ifconfig vm_a_2 up
+ ip netns exec vm_b_1 ifconfig vm_b_1 up
+ ip netns exec vm_b_2 ifconfig vm_b_2 up
root@www /home/abaobo/tmp 2015-08-17 19:28:45 
# ip netns exec vm_a_1 ip a a 10.1.0.1/24 dev vm_a_1
root@www /home/abaobo/tmp 2015-08-17 19:29:50 
# ip netns exec vm_a_2 ip a a 10.1.0.2/24 dev vm_a_2
root@www /home/abaobo/tmp 2015-08-17 19:30:00 
# ip netns exec vm_b_2 ip a a 10.1.0.12/24 dev vm_b_2
root@www /home/abaobo/tmp 2015-08-17 19:30:10 
# ip netns exec vm_b_1 ip a a 10.1.0.11/24 dev vm_b_1
ovs-vsctl add-port br-int gre_tun -- set interface gre_tun type=gre options:remote_ip=10.180.64.184

接下来我们初始化server_2中模拟环境

(server_2)(在此我们只初始化两个模拟)
# ./init_vm 
+ ovs-vsctl add-br br-int
+ ip netns add vm_a_1
+ ip netns add vm_b_1
+ ovs-vsctl add-port br-int vm_a_1 -- set interface vm_a_1 type=internal
+ ovs-vsctl add-port br-int vm_b_1 -- set interface vm_b_1 type=internal
+ ip link set vm_a_1 netns vm_a_1
+ ip link set vm_b_1 netns vm_b_1
+ ip netns exec vm_a_1 ifconfig vm_a_1 up
+ ip netns exec vm_b_1 ifconfig vm_b_1 up
root@cnsdev-network-dca5999d-f2e4-4cec-80ac-1e673baa3b90 ~/tmp 19:31:16  
# ip netns exec vm_a_1 ip a a 10.1.0.101/24 dev vm_a_1
root@cnsdev-network-dca5999d-f2e4-4cec-80ac-1e673baa3b90 ~/tmp 19:31:46 
# ip netns exec vm_b_1 ip a a 10.1.0.111/24 dev vm_b_1
root@cnsdev-network-dca5999d-f2e4-4cec-80ac-1e673baa3b90 ~/tmp 19:32:09 
# ovs-vsctl add-port br-int gre_tun -- set interface gre_tun type=gre options:remote_ip=10.180.66.3

此时我们已经初始化完我们需要的环境,在server_1中的vm_a_1(10.1.0.1)的网络环境中ping宿主物理机server_2的vm_a_1(10.1.0.101):

root@www /home/abaobo/tmp 2015-08-17 20:27:24 
# ip netns exec vm_a_2 ping 10.1.0.101 -c 1
PING 10.1.0.101 (10.1.0.101) 56(84) bytes of data.
64 bytes from 10.1.0.101: icmp_seq=1 ttl=64 time=3.02 ms

--- 10.1.0.101 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 3.027/3.027/3.027/0.000 ms

此时我们已经满足了跨节点组件2层网络的目的,根据上面的vlan的TAG格式我们可以看出,该TAG只有12个bit的长度,也就是说整个环境中只允许存在不超过4096个2层隔离网络,对于云计算来说,这个远远不能满足我们的需求。

使用带标记的tunnel来跨物理节点组建隔离的2层网络。

本文章我们主要讲述通过使用GRE通道方式组建,参见技术资料:

在扩展的GRE包头格式资料,从中我们可以看出,扩展的包头多了一个key和一个Sequence,长度都为为32bit,在此我们使用的是key来标记分区分不同网络的,32 位的长度几乎为我们地球上的每一个人创建一个私有网络,足够了。

接下来我们来尝试组建一个这样的网络,

  • 1, 上面的基础上,分别再两个server上,我们把用户A的所有虚拟机使用tag打上标签1,把所有的用户B的虚拟机打上标签2。
(server_1)
root@www /home/abaobo/tmp 2015-08-17 20:49:19 
# ovs-vsctl set port vm_a_1 tag=1 -- set port vm_a_2 tag=1                                  
root@www /home/abaobo/tmp 2015-08-18 09:20:19 
# ovs-vsctl set port vm_b_1 tag=2 -- set port vm_b_2 tag=2 
root@www /home/abaobo/tmp 2015-08-18 09:20:34 
#
(server_2)
root@cnsdev-network-dca5999d-f2e4-4cec-80ac-1e673baa3b90 ~/tmp 20:26:31 
# ovs-vsctl set port vm_a_1 tag=1 
root@cnsdev-network-dca5999d-f2e4-4cec-80ac-1e673baa3b90 ~/tmp 09:20:50 
# ovs-vsctl set port vm_b_1 tag=2
root@cnsdev-network-dca5999d-f2e4-4cec-80ac-1e673baa3b90 ~/tmp 09:20:58 
#

然后我们在server_1上用vm_a_1分别ping,server_1的vm_a_2和server_2的vm_a_1

(server_1)
root@cnsdev-network-dc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值