OpenStack之Neutron相关概念

OpenStack之Neutron相关概念

Neutron 管理的网络资源包括不仅限于 Network,subnet、port、浮动IP。

network

network 是一个隔离的二层广播域。

Neutron 支持多种类型的 network,包括 local, flat, VLAN, VxLAN 和 GRE。

local

local 网络与其他网络和节点隔离。local 网络中的 instance 只能与位于同一节点上同一网络的 instance 通信,local 网络主要用于单机测试。

flat

flat 网络是无 vlan tagging 的网络。flat 网络中的 instance 能与位于同一网络的 instance 通信,并且可以跨多个节点。

flat 网络是无 tag 的网络,要求宿主机的物理网卡直接与 linux bridge 连接,这意味着:

每个 flat 网络都会独占一个物理网卡。

如果需要创建多个 flat 网络,就得准备多个物理网卡。

因为 flat 网络与物理网卡一一对应,一般情况下租户网络不会采用 flat。

vlan

vlan 网络是具有 802.1q tagging 的网络。vlan 是一个二层的广播域,同一 vlan 中的 instance 可以通信,不同 vlan 只能通过 router 通信。vlan 网络可跨节点,是应用最广泛的网络类型。

vxlan

vxlan 是基于隧道技术的 overlay 网络。vxlan 网络通过唯一的 segmentation ID(也叫 VNI)与其他 vxlan 网络区分。vxlan 中数据包会通过 VNI 封装成 UDP 包进行传输。因为二层的包通过封装在三层传输,能够克服 vlan 和物理网络基础设施的限制。

gre

gre 是与 vxlan 类似的一种 overlay 网络。主要区别在于使用 IP 包而非 UDP 进行封装。

不同 network 之间在二层上是隔离的

以 vlan 网络为例,network A 和 network B 会分配不同的 VLAN ID,这样就保证了 network A 中的广播包不会跑到 network B 中。

当然,这里的隔离是指二层上的隔离,借助路由器不同 network 是可能在三层上通信的。

network 必须属于某个 Project( Tenant 租户),Project 中可以创建多个 network。

subnet

subnet 是一个 IPv4 或者 IPv6 地址段。instance 的 IP 从 subnet 中分配。每个 subnet 需要定义 IP 地址的范围和掩码。

network 与 subnet 是 1对多 关系

一个 subnet 只能属于某个 network;一个 network 可以有多个 subnet,这些 subnet 可以是不同的 IP 段,但不能重叠。

下面的配置是有效的:

network A subnet A-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"}

subnet A-b: 10.10.2.0/24 {"start": "10.10.2.1", "end": "10.10.2.50"}

但下面的配置则无效,因为 subnet 有重叠:

networkA subnet A-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"}

subnet A-b: 10.10.1.0/24 {"start": "10.10.1.51", "end": "10.10.1.100"}

这里不是判断 IP 是否有重叠,而是 subnet 的 CIDR 重叠(都是 10.10.1.0/24)。

但是,如果 subnet 在不同的 network 中,CIDR 和 IP 都是可以重叠的,比如:

networkA subnet A-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"}

networkB subnet B-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"}

具有相同 IP 的两个 instance,会不会冲突?

这里大家不免会疑惑: 如果上面的IP地址是可以重叠的,那么就可能存在具有相同 IP 的两个 instance,这样会不会冲突? 简单的回答是:不会!

具体原因

因为 Neutron 的 router 是通过 Linux network namespace 实现的。network namespace 是一种网络的隔离机制。通过它,每个 router 有自己独立的路由表。上面的配置有两种结果:

1.如果两个 subnet 是通过同一个 router 路由,根据 router 的配置,只有指定的一个 subnet 可被路由。

2.如果上面的两个 subnet 是通过不同 router 路由,因为 router 的路由表是独立的,所以两个 subnet 都可以被路由。

port

port 可以看做虚拟交换机上的一个端口。port 上定义了 MAC 地址和 IP 地址,当 instance 的虚拟网卡 VIF(Virtual Interface) 绑定到 port 时,port 会将 MAC 和 IP 分配给 VIF。

subnet 与 port 是 1对多 关系。一个 port 必须属于某个 subnet;一个 subnet 可以有多个 port。

Project,Network,Subnet,Port 和 VIF 之间关系

Project 1 : m Network 1 : m Subnet 1 : m Port 1 : 1 VIF m : 1 Instance

浮动IP

OpenStack引入了一个叫浮动IP的概念,浮动IP是一些可以从外部访问的IP列表,通常从ISP那里买来的。

绑定了浮动IP的实例,不仅可以访问外网,而且还能被外部访问。

浮动IP默认不会自动关联实例,用户需要手动从地址池里获取然后绑定实例。一旦用户获取后,他就变成这个IP的所有者,可以随意绑定自己拥有的其他实例。如果实例挂掉了的话,用户也不会失去这个浮动IP,可以随时绑定其他实例。暂时不支持为了负载均衡多实例共享一个浮动IP。

系统管理员可以配置多个浮动IP池,这个IP池不能指定租户,每个用户都可以去获取。多浮动IP池是为了考虑不同的ISP服务提供商,免得某一个ISP出故障带来麻烦。

如果运行的是企业云,浮动IP池就是那些OpenStack外的数据中心都能访问到的IP。

浮动IP机制给云用户提供了很多灵活性,也给系统管理员减少了安全风险,尽量只让OpenStack软件去改防火墙会安全些。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值