前言
大家好,我是秋意零。
之前一直对 OpenStack 网络很陌生与神奇啊,不知道它是如何实现的,网络结构是怎样的。不过,今天介绍的是网络虚拟化,它在 OpenStack 中及云计算中是非常重要的概念,是理解 OpenStack Neutron 网络服务的基础,为加快 Neutron 网络服务理解有绝对的好处。
👿 简介
- 🏠 个人主页: 秋意零
- 🔥 账号:全网同名, 秋意零 账号创作者、 云社区 创建者
- 🧑 个人介绍:在校期间参与众多云计算相关比赛,如:🌟 “省赛”、“国赛”,并斩获多项奖项荣誉证书
- 🎉 目前状况:24 届毕业生,拿到一家私有云(IAAS)公司 offer,暑假开始实习
- 💕欢迎大家:欢迎大家一起学习云计算,走向年薪 30 万
- 💕推广:CSDN 主页左侧,是个人扣扣群推广(技术交流、技术博客互助)。
正文开始:
- 快速上车,马上开始上车了(OpenStack),距离发车还有 3s,2s,1s...
一、Neutron 介绍
Neutron 是 OpenStack 最重要的网络服务资源之一,它管理 OpenStack 所有网络层面,分为两个层面,如下:
- 对内访问层面:虚拟网络基础架构
- 对外访问层面:物理网络基础架构
OpenStack 中的实例也就是虚拟机(VM),在没有网络的情况下是无法工作的。在 OpenStack 中,计算、存储、网络是最核心的组件;因为云计算中最核心的技术分四个方面,计算、存储、网络、安全(从事云计算行业要懂的知识面很广泛了)。
Neutron 最主要的功能是为虚拟机(VM) 提供网络连接。
Neutron 为整个 OpenStack 环境提供软件定义网络(Software Defined Network,即:SDN)支持,主要功能包括二层交换、三层路由、防火墙、VPN 以及负载均衡等。
在 OpenStack 中,网络功能是最复杂的功能,很多计算和存储方面的问题都是和网络紧密相关的。
PS:
软件定义网络(Software-Defined Networking,简称SDN):是一种网络架构和管理方法,通过将网络控制平面(Control Plane)与数据转发平面(Data Plane)进行分离,使用集中化的控制器来管理网络。
什么是集中化的控制器来管理网络?
- 将网络中的决策和控制功能集中到一个中心控制器中管理,不在由网络设备(如:交换机、路由器)本身管理
二、网络虚拟化
OpenStack 网络服务(Neutron)最核心的任务就是对二层物理网络进行抽象和管理。
- 二层网络也就是交换机,抽象也就是虚拟化,所以也就是对虚拟交换机的管理。
2.1、Linux 网络虚拟化(Vnet)
OpenStack 部署在 Linux 平台上,涉及 Linux 虚拟网络,它是 OpenStack 网络服务的基础。
1.传统网络:
可以看到,一些物理服务器,它们都部署这自己的服务,并且都有着自己的硬件,如:网卡、CPU、内存。
这里它们有着一张或多张网卡,一般来说存在两张网卡:一张内网,一张外网。
- 外网网卡:通过连接一个交换机,这个个交换机连接一个路由器,通过路由器来转发到 Internet 互联网上,也就可以上网了。
- 内网网卡:一般只会连接一个交换机,如何需要实现不同网段的通信的话,就使用路由器转发,而路由器不会转发到 Internet 互联网,而是你所需要通信的目的网段。
2.虚拟化中的网络:
可以看到,我们只有一台物理服务器,而在这台物理服务器中运行了多台虚拟机,这些虚拟机是由:虚拟机管理程序(Hypervisor)实现,一般使用 KVM。
而 Hypervisor 对服务器虚拟化的同时,也对网络进行了虚拟化。
Hypervisor 为虚拟机创建了一张或多张网卡,也是分内网、外网。而虚拟机会将虚拟网卡当作物理网卡,与物理服务器的物理网卡是一样的概念。
- 外网网卡:首先连接到虚拟交换机,虚拟机交换机连接物理服务器的物理网卡,通过这张物理网卡连接到 Internet(物理网卡如何连接到 Internet?看传统网络的物理网卡连接方式)。
- 内网网卡:内网网卡对于外网网卡区别就是,所连接的虚拟交换机并不会连接到物理服务器的物理网卡。如果需要不同网段的通信,就需要创建虚拟路由器来实现内网目的地址的转发。
对于简单的物理网络中的物理网卡,其主要工作是网络接口(网卡)和交互设备(交换机)的虚拟化。
ps:目前这个图中的虚拟交换机,可以看作为虚拟网桥。
2.2、Linux 虚拟网桥(VBridge)
因为,虚拟机没有硬件设备,与物理机和其它虚拟机进行通信,所以这个时候就需要一个媒介来传递这个通信,也就出现了虚拟网桥(虚拟设备),可以看作是交换机。
可以看到图中,虚拟网桥提供了网桥接口,与交换机的接口是一个概念。
- KVM 虚拟化中,会为每个虚拟机创建虚拟网络接口,用于虚拟机与虚拟网桥之间的通信。接口的名称通常是以 vnet(Virtually Network) 开头,加数字 0 结尾的编号,比如:vnet0、vnet1,虚拟机创建时自动创建这些接口。
- 而在 KVM 虚拟化环境下,OpenStack 通常会使用 Linux 内核
bridge 模块
,提供的虚拟网桥技术。
网桥接口与虚拟网卡连接,而虚拟网桥也可以直接与物理网卡的内网(br1)或外网连接(br2),当然也可以不与物理网卡连接(br3)。
- br1:可以直接与物理服务器通信;
- br2:可以直接通过物理服务器的外网网卡与 Internet 互联网通信;
- br3:因为没有连接物理服务器,所以只能与连接再 br3 虚拟网桥的 VM 直接通信。如果需要与 br1 上的 VM 通信,就需要路由器来转发了。
综上所述,br1、br2、br3 能与谁通信,那么连接到它上面的 VM 也能与谁通信。
2.3、虚拟局域网(VLAN)
一个虚拟网桥中可以连接很多台虚拟机,当多个虚拟机连接到同一个虚拟网桥时,每个虚拟机发出的广播报文会引发广播风暴,影响网络性能或网络瘫痪。所以为了避免这种情况,我们就可以是使用虚拟局域网(VLAN)来解决。
VLAN 在这里的主要作用是:
- 将一个网桥中所连接的 VM 的网络划分为更小的一些局域网。因为是在网桥这个本身局域网的基础上,再次划分一个更小逻辑局域网也称为虚拟局域网。
VLAN 端口配置有两种模式:
- 接入(Access):一般情况下使用
- 骨干(Trunk):需要跨 VLAN ID 时使用,就是说在不同的虚拟局域网中可以通过 Trunk 打通。
可以看到图(网桥与 VLAN)中,VM 都有一个 VLAN ID。VLAN ID 相同的表示在一个虚拟局域网(VLAN),它们之间是可以正常通信的。
- 比如:虚拟机A1(VLAN 3)与虚拟机C2(VLAN 3)它们之间是可以通信的。与虚拟机D1(VLAN3)是不能通信的,因为它没有根本就不是一个局域网,更别说虚拟局域网连通了。
2.4、开放虚拟交换机(Open vSwitch)
开放虚拟交换机(Open vSwitch,OVS)是一个开源的软件交换机,用于构建和管理虚拟化网络环境。它在数据中心和云计算平台中被广泛使用,提供高性能的网络虚拟化和软件定义网络(SDN)功能。
Linux 网桥和 VLAN 的结合已经可以胜任虚拟交换机角色,Open vSwitch 则有更多的优势。
- 在传统的数据中心中:管理员可以对物理交换机进行配置,控制服务器的网络接入,实现网络隔离、流量监控、QoS 配置、流量优化等目标;
- 在云环境中:单靠物理交换机的支持,是无法区分所接的物理网卡上流经的数据包究竟是哪个虚拟机,哪个操作系统、哪个用户的,采用 Open vSwitch 技术的虚拟交换机可使虚拟网络的管理、网络状态和流量的监控得以轻松实现。
由图可以看到,Open vSwitch 支持在物理主机之间创建虚拟交换机,将虚拟机实例连接到这些交换机,并实现虚拟机实例之间的通信。它可以在多个物理主机上进行分布式部署,实现网络流量的转发和负载均衡。将不同物理主机之间上的 Open vSwitch 连接起来,形成一个大规模的虚拟网络。
2.5、虚拟路由(VRoute)
通过上面的介绍,相信或许还有一个疑问,既然二层网络实现了,那么三层网络(路由)是怎么回事呢?
在 OpenStack 中,路由器功能是通过 Neutron 服务来实现的。Neutron 是 OpenStack 的网络服务,它提供了虚拟网络的管理和操作。Neutron 使用了多种技术来实现网络功能,其中路由器功能是通过虚拟路由器来实现的。
- Linux 内核路由:OpenStack 利用 Linux 内核中的路由功能来实现虚拟路由器。Linux 内核提供了路由表、网络命名空间和 iptables 等功能,用于处理路由和数据包转发。
- Linux 网络命名空间:每个虚拟路由器都在独立的 Linux 网络命名空间中运行,这样可以实现虚拟化和隔离。每个命名空间都有自己的网络接口、路由表和 iptables 规则。
- 路由器端口:虚拟路由器有一个或多个路由器端口(Router Port),用于连接到不同的子网或网络。每个路由器端口都有自己的 IP 地址和 MAC 地址,作为虚拟路由器在相应网络中的入口和出口。
- 路由器命名空间:每个虚拟路由器的路由功能运行在独立的路由器命名空间中。路由器命名空间中运行的路由守护程序负责处理数据包的转发和路由决策。
- 包括虚拟路由器的虚拟网络拓扑:通过 Neutron 的 API 和插件机制,管理员可以创建虚拟网络和子网,并将虚拟路由器与其关联。虚拟路由器可以连接不同的子网或网络,形成复杂的虚拟网络拓扑。
OpenStack 利用 Linux 内核的路由功能和网络命名空间,结合 Neutron 的管理和配置机制,实现了虚拟路由器的功能。虚拟路由器在 OpenStack 中扮演着关键的角色,为虚拟机实例提供了跨子网或跨网络的通信能力,并支持网络隔离、策略路由和防火墙等功能。
总结
这里主要介绍了,OpenStack 中 Neutron 网络服务的基本概念,重点介绍了 Neutron 网络虚拟化之后的一个结构。
通过,上述你应该能理解,虚拟化后的网络结构是怎么样的,比如:虚拟网桥(VBridge)与虚拟局域网(VLAN)的结合以及开放式虚拟交换机(Open vSwitch),及最后的虚拟路由的实现。
通过这些,我们应该可以想象到,虚拟化后的网络与物理网络结构还是类似的,将虚拟网络与物理网络分开看。你会发现虚拟网络也是虚拟交换机、虚拟路由器为主要。
- VM 连接到虚拟交换机(br0、OVS),将 VM 组织成一个局域网,而虚拟路由器将虚拟交换机组织成一个可以跨网段的大局域网。这与我们物理网络的实现是一致的,与计算机网络基础概念是一致的(万变不离其宗)。
最后,VM 如果需要连通外网就需要通过虚拟网络连接到物理主机上的网卡,通过物理网卡跳转出去。