网络服务

1.Linux网络虚拟化基础

(1)Linux网络虚拟化基础知识学习背景

Neutron的设计目标是实现“网络即服务”。

设计上:遵循基于“软件定义网络(SDN)”的灵活和自动化原则。
实现上:充分利用 Linux 各种网络相关的技术。
学习Linux系统中的网络虚拟化知识,有助于快速理解Neutron的原理和实现。

(2) 物理网络与虚拟化网络

Neutron最为核心的工作是对二层物理网络的抽象与管理,物理服务器虚拟化后,虚拟机的网络功能由虚拟网卡(vNIC)提供,物理交换机(Switch)也被虚拟化为虚拟交换机(vSwitch),各个vNIC连接在vSwitch的端口上,最后这些vSwitch通过物理服务器的物理网卡访问外部的物理网络。

(3) Linux网络虚拟化实现技术

网卡虚拟化:TAP、TUN、VETH

交换机虚拟化:Linux Bridge和Open vSwitch

网络隔离:Network Namespace

1)Linux网卡虚拟化

TAP设备:模拟一个二层的网络设备,可以接收和发送二层网包。

TUN设备:模拟一个三层的网络设备,可以接收和发送三层网包。

VETH:虚拟ethernet接口,通常以pair的方式出现,一端发出的网包,会被另一端接收,可以形成两个网桥之间的通道。

Veth-Pair 是成对出现的一种虚拟网络设备,一端连接着协议栈,一端连接着彼此,数据从一端出,从另一端进。它的这个特性常常用来连接不同的虚拟网络组件,构建大规模的虚拟网络拓扑,比如连接 Linux Bridge、OVS、LXC 容器等。一个很常见的案例就是它被用于 OpenStack Neutron,构建非常复杂的网络形态。

2)Linux交换机虚拟化 - Linux bridge

Linux bridge:工作于二层的网络设备,功能类似于物理交换机。

Bridge可以绑定Linux上的其他网络设备,并将这些设备虚拟化为端口。

当一个设备被绑定到bridge时,就相当于物理交换机端口插入了一条连接着终端的网线。

使用brctl命令配置Linux bridge:

brctl addbr BRIDGE

brctl addif BRIDGE DEVICE

3)Linux交换机虚拟化 - Open vSwitch
Open vSwitch是产品级的虚拟交换机。

Linux bridge更适用于小规模,主机内部间通信场景。

Open vSwitch更适合于大规模,多主机间通信场景。

Open vSwitch常用的命令:ovs-vsctl add-br BRIDGE、ovs-vsctl add-port PORT、ovs-vsctl show BRIDGE、ovs-vsctl dump-ports-desc BRIDGE、ovs-vsctl dump-flows BRIDGE。

4)Linux网络隔离 - Network Namespace

NameSpace称为container,是一种资源隔离方案,是基于容器的虚拟化技术的基础,是属于Linux系统层次资源管理和使用的技术内容,不属于网络部分的概念。

Network namespace能创建多个隔离的网络空间,它们有独自的网络配置信息,例如网络设备、路由表、iptables等。
不同网络空间中的虚拟机运行的时候仿佛自己就在独立的网络中。
Network Namespace通常与VRF(Virtual Routing Forwarding虚拟路由和转发)一起工作,VRF是一种IP技术,允许路由表的多个实例同时在同一路由器上共存。

使用VETH可以连接两个不同网络命名空间,使用Bridge可以连接多个不同网络命名空间。

2.OpenStack网络服务简介

网络服务Neutron首次出现在OpenStack的“Folsom”版本中。
Neutron负责管理虚拟网络组件,专注于为OpenStack提供网络即服务。
依赖的OpenStack服务是Keystone。
网络服务.png

3.Neutron概念

Neutron是一种虚拟网络服务,为Opensack计算提供网络连通和寻址服务。
Neutron对网络进行了抽象,有如下基本管理对象:

Network、Subnet、Port、Router、Floating IP

1)Neutron概念 – Network

一个隔离的、虚拟二层广播域,也可看成一个Virtual Switch,或者Logical Switch。Neutron支持多种类型的Network,包括 Local, Flat, VLAN, VXLAN 和 GRE。
在OpenStack Folsom版本之后,OpenStack通过Cinder服务为云平台提供块逻辑卷服务。

2)Neutron概念 – Subnet

Subnet:子网

一个IPv4或者IPv6地址段。虚拟机的IP从Subnet中分配。每个Subnet需要定义IP地址的范围和掩码。

Subnet必须与Network关联。

Subnet可选属性:DNS,网关IP,静态路由。

3)Neutron概念 – Port

Port:端口
逻辑网络交换机上的虚拟交换端口

虚拟机通过Port附着到Network上

Port可以分配IP地址和Mac地址

4)Neutron概念 – Router

Router:路由器

连接租户内同一Network或不同Network之间的子网,以及连接内外网。

5)Neutron概念 - Fixed IP

Fixed IP:固定IP

分配到每个端口上的IP,类似于物理环境中配置到网卡上的IP。

6)Neutron概念 - Floating IP

Floating IP:浮动IP

Floating IP是从External Network创建的一种特殊Port,可以将Floating IP绑定到任意Network中的Port上,底层会做NAT转发,将发送给Floating IP的流量转发到该Port对应的Fixed IP上。

外界可以通过Floating IP访问虚拟机,虚拟机也可以通过Floating IP访问外界。

7)Neutron概念 - Provider Network

Provider Network:

由OpenStack管理员创建的,直接对应于数据中心现有物理网络的一个网段。
Provider Network通常使用VLAN或者Flat模式,可以在多个租户之间共享。

8)Neutron概念 - Physical Network

Physical Network:物理网络
在物理网络环境中连接OpenStack不同节点的网络,每个物理网络可以支持Neutron中的一个或多个虚拟网络。
OpenStack必须通过Physical Network才能和真实物理网络通信。

9)Neutron概念 - Self-service Network

Self-service Network:自助服务网络,也叫租户网络或项目网络

由OpenStack租户创建的,完全虚拟的,只在本网络内部连通,不能在租户间共享。

Self-service Network通常使用VXLAN或者GRE模式,可以通过Virtual Router的SNAT与Provider Network 通信。

不同Self-service Network中的网段可以相同,类似于物理环境中不同公司的内部网络。

Self-service Network如果需要和外部物理网络通信,需要通过Router,类似于物理环境中公司上网需要通过路由器或防火墙。

10)Neutron概念 - External Network

External Network:外部网络,也叫公共网络

一种特殊的Provider Network,连接的物理网络与数据中心或Internet相通,网络中的Port可以访问外网。

一般将租户的Virtual Router连接到该网络,并创建Floating IP绑定虚拟机,实现虚拟机与外网通信。

External Network类似于物理环境中直接使用公网IP网段,不同的是,OpenStack中External Network对应的物理网络不一定能直连Internet,有可能只是数据中心的一个内部私有网络。

11)Neutron概念 - Security Group

Security Group:安全组

安全组是作用在neutron port上的一组策略,规定了虚拟机入口和出口流量的规则。

安全组基于Linux iptables实现。

安全组默认拒绝所有流量,只有添加了放行规则的流量才允许通过。

每个OpenStack项目中都有一个default默认安全组,默认包含如下规则:拒绝所有入口流量、允许所有出口流量

4. Neutron架构与组件分析

1)架构图

Last modification:May 22nd, 2020 at 09:44 am
如果觉得我的文章对你有用,请随意赞赏