neutron的基本原理

常见三网络划分

 

External Network/API Network:连接外网,用于调用 openstack 的 API,虚拟机访问外网,外部ssh到虚拟机

Data Network:数据网络,虚拟机之间的数据传输

Management Network:管理网络,openstack 内部各个模块之间的交互,连接数据库,连接 Message Queue

Neutron中的网桥

br-int 综合网桥,实现内部网络功能

br-ex 外部网桥,与外部网络通信

 

单节点是 openstack 的测试环境,对于复杂环境的多节点,每个机器都有自己的 br-int

对于多节点结构,可以想象 br-int 是一个大的,横跨所有节点的二层 switch

然而 br-int 在实际环境中是物理的分隔开了,需要有一种方式将它们串联起来,openstack 提供了多种方式,例如 GRE,VLAN,VxLAN

不同机器上的 br-int 通过 br-int 下面的网卡连接

对于虚拟机和虚拟 router,它们仍然觉得是连接到了一个大的 L2 的 br-int 上,通过这个 br-int 相互通信,它们感受不到 br-int 下面的虚拟网卡 br-tun

 

如果有不同的 tenant,创建了不同的 private network,为了在 Data Network 上对数据进行隔离,创建 private network 的时候,需要指定 vlanid

不同的 tenant 的 private network 上创建的虚拟机,连接到 br-int 上的时候都是带 tag 的,所以不同 tenant 的虚拟机,即使连接到同一个 br-int 上,因为 tag 不同,也是不能相互通信

 

同一个机器上的 tag 计数仅在本机有效,并不使用我们创建 private network 指定的全局唯一的 vlanid

全局唯一的 vlanid 仅在 br-int 以下的虚拟网卡和物理网络中使用

虚拟机仅能感知 br-int 以上的网络,看不到打通 br-int 所要使用的 vlanid

neutron 组件的简单流程图

neutron-server:接受 api 调用,发送到对应的 neutron-plugin 上

neutron-plugin:实现网络功能,交给对应的 neutron-agent

neutron-agent:模拟出具体设备

neutron-L2-agent:二层代理,用于管理 vlan 的插件,实现二层网络通信的代理

neutron-L3-agent:租户网络和 floating ip 之间的转换

neutron-metadata-agent:运行在网络节点,用于响应 nova 的 metadata 请求

LBaaS agent:为多台实例和 ovs agent 提供负载均衡服务

Linux虚拟网络基础

虚拟网络设备 tap/tun

tap/tun 虚拟了一套网络接口,与物理网络几乎无区别

tap/tun 虚拟网络设备的原理:

在 linux 内核中添加了一共 tap/tun 虚拟设备的驱动程序,和与之关联的字符设备文件 /dev/tunX,协议栈可以像操作普通网卡一样操作(read/write 设备文件) tunX 代表的虚拟网卡

tap位于数据链路层,与以太网协议对应

##检查linux系统是否有tun模块
modinfo tun

##检查tun模块是否已经加载
lsmod | grep tun

##如果没有加载则执行以下命令加载
modprobe tun

##检查是否有tun/tap的命令行操作工具tunctl
tunctl help
yum install tunctl
##创建一个tap设备
tunctl -f tap_test

##给tap设备配置IP地址
ip addr add 192.168.12.3/24 dev tap_test
ifconfig 192.168.12.3/24 tap_test

tun是一个网络层的点对点设备,它启用了IP层隧道功能,Linux原生支持的三层隧道,可以通过命令行ip tunnel help查看

lsmod | grep gre
modprobe gre    ##加载gre模块
##在ns1上创建tun1和gre tunnel
ip netns exec ns1 ip tunnel add tun1 mode gre remote 192.168.200.2 local 192.168.100.2 ttl 255
ip  netns exec ns1 ip link set tun1 up
ip  netns exec ns1 ip addr add 192.168.50.10 peer 192.168.60.10 dev tun1

##在ns2上创建tun2和gre tunnel
ip netns exec ns2 ip tunnel add tun2 mode gre remote 192.168.100.2 local 192.168.200.2 ttl 255
ip  netns exec ns2 ip link set tun2 up
ip  netns exec ns2 ip addr add 192.168.60.10 peer 192.168.50.10 dev tun2

tap 和 tun 的区别:

1.tap 工作在二层,可以配置 mac 和 ip 地址

   tun 工作在点对点三层,无 mac 地址

2.tap 子网掩码为 /24,对应以太网设备

   tun 子网掩码为 /30,对应点对点设备

3.tap 用于创建网桥

   tun 一般用于路由

 

namespace

linux namespace隔离的资源

uts_ns    UTS为Unix Timesharing System的简称,包含内存名称、版本、底层体系结构等信息
ipc_ns    所有与进程间通信(IPC)有关的信息
mnt_ns    当前装载的文件系统
pid_ns    有关进程ID的信息
user_ns    资源配额的信息
net_ns    网络信息
ip netns

##创建一个namespace
ip netns add ns_test

##把虚拟设备tap_test迁移到这个namespace
ip link set tap_test netns ns_test

##在ns_test里执行配置IP地址
ip netns exec ns_test ifconfig tap_test 192.168.12.3/24 up

 

veth pair

veth-pair 是成对出现的一种虚拟网络设备,一端连接协议栈,一端互联

常用于连接虚拟网络组件,例如 linux bridge,ovs

##创建veth pair
ip link add tap1 type veth peer name tap2

##创建namespace:ns1、ns2
ip netns add ns1
ip netns add ns2
##把两个tap分别迁移到对应的namespace中 ip link set tap1 netns ns1 ip link set tap2 netns ns
2

##分别给两个tap绑定IP地址 ip netns exec ns1 ip addr add local 192.168.50.1/24 dev tap1 ip netns exec ns2 ip addr add local 192.168.50.2/24 dev tap2
##将两个tap设置为up ip netns exec ns1
ifconfig tap1 up ip netns exec ns2 ifconfig tap2 up
##
ping ip netns exec ns2 ping 192.168.50.1 ip netns exec ns1 ping 192.168.50.2

 

Bridge

如果多个namespace之间需要互通,veth pair只有一对tap,无法满足需求,这就需要用的Bridge/Switch

##Linux实现Bridge功能的是brctl模块
yum install bridge-utils
brctl

实现4个namespace通过veth pair、Bridge互联

##创建veth pair
ip link add tap1 veth peer name tap1_peer
ip link add tap2 veth peer name tap2_peer
ip link add tap3 veth peer name tap3_peer
ip link add tap4 veth peer name tap4_peer

##创建namespace
ip netns add ns1
ip netns add ns2
ip netns add ns3
ip netns add ns4

##把tap迁移到相应namespace中
ip link set tap1 netns ns1
ip link set tap2 netns ns2
ip link set tap3 netns ns3
ip link set tap4 netns ns4

##创建bridge
brctl addbr br1

##把相应tap添加到bridge中
brctl addif br1 tap1_peer
brctl addif br1 tap2_peer
brctl addif br1 tap3_peer
brctl addif br1 tap4_peer

##配置相应tap的ip地址
ip netns exec ns1 ip addr add local 192.168.50.1/24 dev tap1
ip netns exec ns2 ip addr add local 192.168.50.2/24 dev tap2
ip netns exec ns3 ip addr add local 192.168.50.3/24 dev tap3
ip netns exec ns4 ip addr add local 192.168.50.4/24 dev tap4

##将bridge及所有tap状态设置为up
ip link set br1 up
ip link set tap1_peer up
ip link set tap2_peer up
ip link set tap3_peer up
ip link set tap4_peer up
ip netns exec ns1 ip link set tap1 up
ip netns exec ns2 ip link set tap2 up
ip netns exec ns3 ip link set tap3 up
ip netns exec ns4 ip link set tap4 up

##ping测试
ip netns exec ns1 ping 192.168.50.4

 

Neutron的网络实现模型

计算节点的实现模型

 

VLAN实现模型

qbr (quantum bridge)

常见实现载体linux bridge,引入qbr主要是利用iptables实现security group功能

br-int (integration bridge)

常见实现载体openvswitch,综合网桥,qbr与br-int之间通过vethpair连接,vm与qbr之间通过tap连接

br-ex (bridge-ethernet-external)

常见实现载体openvswitch,负责外部通信,br-ex与br-int之间通过vethpair连接

内外VLAN ID的转换

 

 

 

 

 

参考链接:

https://www.cnblogs.com/fish001/articles/5619132.html

https://blog.csdn.net/controllerha/article/details/78881018

https://blog.csdn.net/liuxiaoxueer/article/details/89163433

https://www.cnblogs.com/tongxiaoda/p/8862789.html

https://www.cnblogs.com/wyzhou/p/9286864.html

https://www.cnblogs.com/bakari/p/10494773.html

https://blog.csdn.net/chengqiuming/article/details/79840092

posted @ 2019-12-23 18:24  chili7  阅读(1437)  评论(0编辑  收藏  举报