【私有云】网络虚拟化

news2024/11/14 16:18:24

前言

大家好,我是秋意零。

之前一直对 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 如果需要连通外网就需要通过虚拟网络连接到物理主机上的网卡,通过物理网卡跳转出去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/736088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot整合websocket遇到的小问题

今天尝试了通过springboot整合websocket来初步学习使用websocket,然后发现启动的时候报错了,发这篇文章分享一下。 springboot整合websocket的步骤很简单: 第一步:创建一个springboot项目,在这里命名为websocket 在I…

day16 移除元素

题目描述 解题思路: 1.快慢指针,移除数组元素只能是下标操作;fast往前,不等于value的时候,赋给slow; 2.slow;返回的长度直接返回slow; int removeElement(int* nums, int numsSize, …

Rethinking the Role of Pre-ranking in Large-scale E-Commerce Searching system

来源: KDD’2023Taobao Search 文章目录 ASHASMOL训练样本训练目标蒸馏精排 总结 反思粗排在大规模电商搜索系统中的角色。 由于巨大的数据量以及对系统实时反馈的要求,一个典型的工业排序系统通常由这些模块组成:召回(matching&…

VTR编译问题

机器环境 vmware 16.0; ubuntu22.04.02; 问题描述 一、在build过程中会出现一些警告,但没有停止; 二、访问 **raw.githubsercontent.com/…/…**相关网站被拒绝,如下图: 之前在 /etc/hosts 仅仅是添加了raw.github…

JS数组解构赋值变量存在依赖关系

题目随便起的, 在刷力扣 41.缺失的第一个正数 这个题的时候,出现了解构赋值的问题, 对于[a,b] [1,2]和[b,a][2,1]按理说都是行的通的,和位置没有关系,本质上都是进行交换 可是当我在题目中 使用[nums[nums[i]-1], nu…

SpringMVC的高频面试题

2023最新版(持续更新) 一、SpringMVC的高频面试题1. SpringMVC的执行流程2. SpringMVC常见的注解有哪些? 一、SpringMVC的高频面试题 1. SpringMVC的执行流程 前置知识 视图阶段(JSP): 涉及到的重要组件:…

KubeSphere 社区双周报 | KubeSphere 多项更新 | 2023.06.23-07.06

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2023.06.23-2023.…

管道设计专业版:Pipedata-Pro Crack

Pipedata-Pro 提高了管道设计的效率并减轻了查找管道信息的负担。它可以直观、轻松地检索最新的管道和设计数据。尺寸和重量单位可以设置为公制或美制单位。 Pipedata-Pro 于 1996 年由 Zeataline Projects 推出,现已遍布全球,Pipedata-Pro 管道表的映射…

怎么判断两个文档节点时候相同?判断两个DOM节点时候相等、相同的4种方法

方法1: document.querySelector(html) document.querySelector(html) //true 方法2:compareDocumentPosition document.querySelector(html).compareDocumentPosition(document.querySelector(html)) //0 返回0就代表相同 方法3:isEqualNode …

编译运行ContactDiscoveryService-Icelake

下载 git clone https://codeup.aliyun.com/6306306f95064d67d44656e5/lxr1907/ContactDiscoveryService-Icelake.git或github地址 git clone https://github.com/signalapp/ContactDiscoveryService-Icelake按照Readme安装 Building git submodule init git submodule update …

每次装完 homebrew,ohmyzsh 就会报错:Insecure completion-dependent directories detected:

参考:https://zhuanlan.zhihu.com/p/313037188 这是因为在big sur安装homebrew后,会在/usr/local/share/生成一个zsh文件夹,里面包含了 因此,zsh文件默认设置的权限是775,也就是group user有writer的权利,zsh认为这是…

python读写excel利器:xlwings从入门到精通

python读写excel利器:xlwings 从入门到精通 目录 安装和使用 基础操作 操作工作簿操作工作表读取单元格写入(单元格赋值)range的操作(range常用的api) 写入一行或一列Excel数据(函数式)使用range(\A1\).api.AddComment(\comments…

本质矩阵(Essential Matrix)E进行分解的过程

分解本质矩阵的过程遵循以下步骤: 使用奇异值分解(SVD)计算本质矩阵E的分解。SVD分解是一种将矩阵分解为三个矩阵的乘积的方法,它的形式为 E UΣV^T,其中U和V是正交矩阵,Σ是对角矩阵。此步骤的结果存储在…

Edge浏览器无法展示Stable Diffusion Control Net插件

Edge浏览器无法展示Stable Diffusion Control Net插件 最近在学习Stable Diffusion,需要使用到Control Net插件,结果通过各种方式安装成功插件后,浏览器页面没有展示ControlNet相关页面,最终换到Chorme浏览器后正常,猜…

【Python】绘图_pandas(1)

# -*- coding: utf-8 -*- #汉字处理 import matplotlib.pyplot as plt import numpy as np from numpy.random import randn import pandas as pd #import DataFrame from matplotlib.font_manager import FontPropertiesfont FontProperties(fnamer"c:\windows\fonts\si…

基于51单片机的电子密码锁设计

功能:本实例是基于51单片机的电子密码锁,主要硬件由51单片机最小系统,LCD1602液晶屏电路,继电器控制电路,AT24C02存储电路,LED指示灯电路,矩阵按键电路构成。 1.系统采用LCD1602液晶屏作为显示屏…

【软件设计原则】系统设计面试基础:CAP 与 PACELC

什么是 CAP 定理以及 PACELC 如何扩展它? 在分布式系统中,可能会发生不同类型的故障,例如,服务器可能会崩溃或永久故障,磁盘可能会损坏导致数据丢失,或者网络连接可能会丢失,导致系统的一部分无…

在openFoam中创建cellZone

简介 openFoam的cellZone概念十分重要,可以给一个区域的单元命名,广泛应用于设置初始场(如气、液两相流的初始VOF分布) 而cellZone通常由cellSet转化而来,本文将介绍使用cellSet定义cellZone的方法 方法 在项目的sy…

【JavaWeb】博客系统的前端页面设计

目录 前言 1、页面组成 2、实现博客列表页 🍂设置背景图片 🍂设置导航栏 🍂实现版心 🍃实现个人信息 🍃实现博客列表 3、实现博客详情页 4、编写博客的登录页 5、博客编辑页面 🍂实现标题的编辑区 …

Python学习笔记-基于socket基础的http服务端程序

通过HTTP协议可以进行通信可以规范化的进行网络间通信。下面技术第一个http服务器小程序。简单的记录第一个试手程序。 1.http通信的基本流程 整个流程对应四层网络架构:应用层、传输层、网络层、链路层。有的部分已经封装,不需要我们再行处理。 2.服务…