openstack 的网络服务组件为 neutron, 它的设计目标是实现 "网络即服务".
设计上: 遵循基于 "软件定义网络(SDN)" 的灵活和自动化原则
实现上: 充分利用 Linux 中各种网络相关的技术
物理网络与虚拟化网络
Neutron 最为核心的工作是对二层物理网络的抽象与管理, 物理服务器虚拟化后, 虚拟机的网络功能由虚拟机网卡 (vnic) 提供, 物理交换机也被虚拟化为虚拟交换机(vswitch), 各个 vnic 连接再 vswitch 的端口上, 最后这些 vswitch 通过物理服务器的物理网卡访问外部的物理网络.
Linux 网络虚拟化实现技术
网络虚拟化主要由分为三个部分:
网卡虚拟化: TAP,TUN,VETH
交换机虚拟化: Linux bridge,open vswitch
网络隔离: network-namespace
Linux 网卡虚拟化
TAP 设备: 模拟一个二层的网络设备, 可以接收和发送二层网络数据包
TUN 设备: 模拟一个三层的网络设备, 可以接收和发送三层网络数据包
VETH: 虚拟 ethernet 接口, 通常以 pair 的方式出现, 一端发出的网络数据包会被另一端接收, 可以形成两个网桥之间的通道
TAP/TUN 提供了一台主机内用户空间的数据传输机制, 它虚拟机了一套网络接口, 这套接口和物理的接口无任何区别, 可以配置 IP, 可以路由流量, 不同的是它流量只在主机内流通
veth-pari, 是成对出现的网络设备, 一端连接协议栈, 一端连接彼此, 数据从一端出, 一端进. 它的特性常常用来连接不同的虚拟网络组件, 构建大规模的虚拟网络拓扑, 比如连接 Linux bridge,ovs 等, 用于 neutron, 可以构建非常复杂的网络形态.
Linux bridge
Linux brigde: 工作于二层的网络设备, 功能类似物理交换机
brigde 可以绑定 Linux 上其他网络设备, 并将这些设备虚拟化为端口
当一个网络设备被绑定到 bridge 上, 就相当于物理交换机端口插入了一条连接终端的网线.
使用 brctl 命令配置 Linux brige
open vswitch
相比 Linux bridge 的小规模的主机内部通信场景, open vswitch 更适合大规模的多主机通信场景
network namespace
network namespace 能创建多个隔离的网络空间, 他们有独立的网络配置信息, 例如网络设备, 路由表, iptables 等.
不同的网络空间中的虚拟机运行的时候仿佛就在自己的独立网络中.
network namespace 通常于 vrf(virtual routing fowarding 虚拟路由转发)一起工作, vrf 是一种 ip 技术, 允许路由表的多个实例同时在同一个路由器上共存.
使用 veth 可以连接两个不同的网络命名空间, 使用 bridge 可以连接多个不同的网络命名空间.
neutron
作为一种虚拟网络服务, 为 openstack 计算提供网络连通和寻址服务.
neutron 对网络进行了抽象, 如下所示:
neutron 支持多种类型的 Network, 包括 local,flat,vlan,vxlan 和 gre
local: 与其他网络和节点隔离, 该网络中的虚拟机只能与位于同一个节点上网络的虚拟机通信, local 网络主要进行单机测试
flat: 无 vlan 标签的网络, 该网络中虚拟机能与位于同一网络的虚拟机通信, 并可以跨多个节点
vlan:802.1q 标签网络, 就是跟真实 vlan 使用一致
vxlan: 基于隧道技术的 overlay 网络, 主要构建大二层的数据中心网络
gre: 使用 ip 数据包的封装的隧道技术
subnet
就是子网, 每个子网在 neutron 中需要定义 ip 地址和范围
subnet 必须与 network 关联, 可以附加 dns, 网关 ip, 静态路由
port
端口
逻辑网络交换机上的虚拟交换端口
虚拟机通过 port 附着到 network 上
port 可以分配 ip 地址和 Mac 地址
router
连接租户内同一个 network 或者不同 network 之间的子网, 以及连接内外网
fixed ip
固定 ip, 分配到每个端口上的 ip, 类似于物理环境中配置到网卡上的 ip
floating ip
floating ip(浮动 ip)是 external network 创建的一种特殊的 port, 可以将 floating ip 绑定到任意 network 中的 port 上, 底层会进行 nat 转发, 将发送的浮动 ip 流量转发到该 port 上的对应固定 ip 上, 外界可以通过浮动 ip 访问虚拟机, 虚拟机也可以通过浮动 ip 访问外界
physical network
pytsical network, 物理网络.
在物理网络环境中连接到 openstack 不同节点的网络, 每个物理网络可以支持 neutron 中的一个或者多个虚拟网络.
openstack 必须通过 physical network 才能和真实物理网络通信
provider network
由 openstack 管理员创建, 直接对应数据中心现有物理网络的一个网段
providr network 通常使用 vlan 或者 flat 模式, 可以在多个租户之间共享
self-service network
自助服务网络, 也叫租户网络或项目网络, 它是由 openstack 租户创建的, 完全虚拟的, 只在本网络内部连通, 不能在租户之间共享
self-servcie network 通常使用 vxlan 或者 gre 模式, 可以通过 virtual router 的 snat 与 provider network 通信
不同的 self-service network 中的网段可以相同, 类似于物理环境中不同公司的内部网络
self-service network 如果需要和外部网络通信, 需要通过 router, 类似于物理环境中公司上网需要通过路由器或者防火墙.
External network
外部网络, 也叫公共网络
它是一种特殊的 provider network, 连接的物理网络与数据中心或者 internet 相通, 网络中的 port 可以访问外网
一般将租户的 virtual router 连接到该网络, 并创建 floating ip 绑定虚拟机, 实现虚拟机与外网通信
Exernal netwok 类似于物理环境中直接使用公网 ip 网段, 不同的是, openstack 中 external network 对应的物理网络不一定能直连 internet, 有可能只是数据中心的一个内部私有网络.
securiy group
安全组, 他的作用是在 neutron port 上的一组策略, 规定了虚拟机入口和出口流量的规则
安全组基于 Linux iptables 实现, 默认拒绝所有流量, 只有添加了放行规则的流量才允许通过
每个 openstack 项目中都有一个 default 默认安全组, 默认包含如下规则 - 拒绝所有入口流量, 允许所有出口流量
neutron 架构与组件
架构图
neutron 架构原则
统一 API
核心部分最小化
可插入式的开放架构
可扩展
message queue:neutron-sever 通过消息列队与其他的 neutron agents 进行交换消息, 但是这个消息列队不会用于 neutron-server 与其他 openstack 组件 (如 nova) 进行交换消息
l2 agent: 负责连接端口 (ports) 和设备, 使他们处于共享的广播域, 通常运行在 hypervisor 上
l3 agent: 负责连接 tenant 网络到数据中心, 或者连接到 internet. 在真实的部署环境中, 一般都需要多个 l3 agent 同时运行.
dhcp agent: 用于自动配置虚拟机网络
advance service: 提供 lb(负载均衡), 防火墙等服务
架构说明
neutron 的架构是基于插件的, 不同的插件提供不同的网络服务, 主要包含如下组件
组件 - neutron server
neutron server=apis+plugins, 通过这种方式, 可以自由对接不同网络后端能力
组件 - core plugin
core plugin, 主要是指 ml2(modular layer 2) plugin, 是一个开放架构, 在 plugin 下, 可以集成各个厂家, 各种后端技术支持的 layer 2 网络服务.
ml2 plugin 的 drivers 主要分为以下两种:
typer driver: 定义了网络类型, 每种网络类型对应一个 type driver
mechanism driver: 对接各种二层网络技术和物理交换机设备, 如 ovs,Linux bridge 等, 从 typer driver 获取相关的底层网络信息, 确保对应的底层技术能够根据这些信息正确配置二层网络.
组件 - service plugin
serivce plugin 用于实现高阶网络服务, 如路由, 负载均衡, 防火墙和 *** 服务等
l3 service plugin 主要提供路由, 浮动 ip 服务等.
组件 - agent
neutron agent 向虚拟机提供二层和三层的网络连接, 完成虚拟网络和物理网络之间的转换, 提供扩展服务等
neutron 网络流量分析
neutron 支持多种网络技术和类型, 可以自由组合各种网络模型.
生产中, openstack 主要使用如下两种网络模型
Linux bridge+flat/vlan 网络
提供简单网络互通, 虚拟网络, 路由, 负载均衡等由物理设备提供, 网络简单, 高效, 适合中小企业私有云网络环境
open vswitch+vxlan 网络
提供多租户, 大规模网络隔离能力, 适合大规模私有云和公有云网络场景
Linux bridge+flat 网络
flat 网络类似于使用网线直接连接物理网络, openstack 不负责网络隔离
interface 2 不带 vlan tag
Linux bridge+vlan 网络
interface 2 需要多个 vlan, 连接的物理交换机一般配置 trunk 模式, 并允许这些 vlan 通过
使用 Linux bridge+vlan 实现 provider network, 网络流量可以分为如下几种:
南北向流量: 虚拟机和外部网络通信的流量
东西向流量: 虚拟机之间的流量
provider network 和外部网络之间的流量, 由物理网络设备负责交换和路由
使用固定 ip 的虚拟机南北流量分析
以下涉及计算节点 1:
虚拟机 (instance) 数据包由虚拟网卡 (1) 通过 veth pair 转发到 Provider Bridge 上的端口(2)
安全组规则 (3) 检查防火墙和记录连接跟踪
vlan 子接口 (4) 将数据包转发到物理网卡(5)
物理网卡 (5) 将数据包打上 vlan tag101, 并将其转发到物理交换机端口(6)
以下涉及物理网络设备
交换机从数据包删除 vlan tag 101, 并将其转发到路由器(7)
路由器将数据包从 provider network 网关 (8) 路由到 external 网络网关(9), 并将数据包转发到 external 网络的交换机端口(10)
交换机将数据包转发到外部网络(11)
外部网络 (12) 接收数据包
同一个网络中虚拟机东西流量分析
计算节点 1:
虚拟机 1 数据包由虚拟网卡 (1) 通过 veth pair 转发到 provider Bridge 上端口(2)
安全组 (3) 检查防火墙和记录连接跟踪
vlan 子接口 (4) 将数据包转发到物理网卡(5)
物理网卡 (5) 将数据包打上 vlan tag 101, 并将其转发到物理交换机端口(6)
物理设备
交换机将数据包转发给计算节点 2 连接的交换机端口(7)
计算节点 2
计算节点 2 的物理网卡 (8) 从数据包删除 vlan tag 101, 然后转发给 vlan 子接口(9)
安全组 (10) 检查防火墙和记录连接跟踪
虚拟网卡 (11) 通过 veth pair 将数据包转发给虚拟机 2 的网卡
不同的网络中的虚拟机东西流量
计算节点 1
虚拟机 1 由虚拟机网卡 (1) 通过 veth pair 转发到 provider bridg 上的端口(2)
安全组 (3) 检查防火墙和记录连接跟踪
vlan 子接口 (4) 将数据包转发到物理网卡(5)
物理网卡 (5) 将数据包打上 vlan tag 101, 转发到物理交换机端口(6)
物理设备
交换机删除数据包 vlan tag 101, 并转发到路由器(7)
路由器将数据包从 provider network1 网关 (8) 转发到 provider network2 网关(9)
路由器将数据包发送到交换机端口(10)
交换机将数据包打上 vlan tag 102, 然后转发给计算节点 1 连接的端口(11)
以下涉及计算节点 1
物理网卡 (12) 删除数据包 vlan tag 102, 然后转发 vlan 子接口(13)
安全组 (14) 检查防火墙和记录连接跟踪
虚拟网卡 (15) 通过 veth pair 将数据包转发给虚拟机 2 的网卡(16)
open vswitch +vxlan
vxlan 是虚拟可扩展的局域网, 是一种 oeverlay 技术, 通过三层网络来搭建虚拟的二层网络.
使用固定 ip 的虚拟机南北流量
虚拟机运行在计算节点 1 上, 使用 self-service network 1, 将数据包发送给 internet 上的主机
计算节点 1
实例接口 (1) 通过 veth 将数据包转发到安全组网桥实例端口(2)
安全组网桥上的安全组 (3) 处理数据包防火墙和连接跟踪
安全组网桥 OVS 端口 (4) 通过 veth 将对数据包转发到 OVS 集成网桥 (br-int) 安全组端口(5)
OVS 集成网桥为 (br-int) 数据包添加内部 vlan 标记
OVS 集成网桥对内部隧道(br-tun)ID 交换内部 VLAN 标记
OVS 集成网桥补丁接口 (6) 将数据包转发给 OVS 隧道补丁接口(7)
OVS 隧道网桥 (8) 使用 vni 101 包裹分组
用于覆盖网络的底层物理接口 (9) 经由覆盖网络 (10) 将分组转发到网络节点
网络节点
底层网络物理接口 (11) 将分组转发到 OVS 隧道桥(12)
OVS 隧道网桥解包并为其添加内部隧道 ID
OVS 隧道网桥为内部 VLAN 标记交换内部隧道 ID
OVS 隧道桥补丁端口 (13) 将分组转发到 OVS 集成桥接口补丁端口(14)
用于自助服务网络 (15) 的 OVS 集成桥接端口移除内部 VLAN 标记并将分组转发到路由器命名空间的自助服务网络接口(16)
路由器将数据包转发到提供商网络的 OVS 集成桥接端口(18)
OVS 集成桥将内部 VLAN 标记添加到数据包
OVS 集成桥接 int-br-provider 补丁端口 (19) 将数据包转发到 OVS 提供程序桥接 phy-br-provider 补丁端口(20)
OVS 提供程序将内部 VLAN 标记与实际 VLAN 标记 101 交换
OVS 桥接提供商网络端口 (21) 将分组转发到物理网络接口(22)
物理网络接口通过物理网络设备将数据包转发到 Internet(23)
从外部访问带 Floating IP 的虚拟机
(直接放图吧.....)
同一个网络中虚拟机东西流量
不同网络中虚拟机东西流量
头大.. 头大..
网络看来真的是要学一辈子的
来源: http://www.bubuko.com/infodetail-3199762.html