OpenStack Yoga版安装笔记(十六)Openstack网络理解

news2024/12/24 20:28:25

0、前言

本文将以Openstack在Linux Bridge环境下的应用为例进行阐述。

1、Openstack抽象网络

OpenStack的抽象网络主要包括网络(network)子网(subnet)端口(port)路由器(router)。有了这些基础的网络抽象元素,就能够灵活地进行二层或三层的网络组建。

Openstack视图的网络拓扑
Openstack抽象网络示意

另外,需要特别指出的是,OpenStack的抽象网络是由特定用户(user)在特定项目(project)下创建的。

这意味着OpenStack的抽象网络具有项目(project)属性,也就是租户(Ternant)属性,因为openstack里面的project,其实就是租户的概念,目的是对资源进行隔离(包括计算/网络/存储),相互不可见,但不意味着相互不能通讯。通过设置,不同租户的网络环境是可以互通的,比如通过各自的router或者共享的router互指路由。

Openstack抽象网络具有Project/租户属性示意

Openstack的抽象网络可以被看作是Openstack自己眼中的网络,或者是从租户/用户/项目的视角看到的网络,它是一个相对简单的三层路由和二层交换(L3 routing/L2 switching)环境。

2、Openstack实体网络

OpenStack的实体网络虚拟网络物理网络两部分组成。

虚拟网络主要是指在主机(例如控制节点和计算节点)内部,通过虚拟网络技术创建的网络,如Linux bridge和Linux OVS。这里的虚拟网络是指可以通过Openstack借助虚拟网络技术进行创建和管理的部分。

物理网络则涉及主机的网卡(因为主机内的虚机需要和外部通讯,不同主机的虚机之间也需要通讯,这些都需要借助网卡进行)。这里的物理网络是指可以通过Openstack进行控制的部分,比如把一个网卡作为bridge的一个端口。

Openstack实体网络示意

Openstack实体网络可以理解为Openstack抽象网络的具体实现。Openstack实体网络通常对租户/user/project不可见。实体网络通常由Openstack管理员(admin)进行管理和维护。 

 3、Openstack抽象网络和实体网络的关系

1、OpenStack 负责配置实体网络的参数。

/etc/neutron/plugins/ml2/ml2_conf.ini 是 OpenStack Neutron 网络服务的一个配置文件,用于定义 ML2 插件的行为。ML2 是一个多厂商的网络驱动程序插件,它允许 Neutron 支持多种网络类型。

这个文件通常包含以下内容:

  1. type_drivers: 定义了 Neutron 支持的网络类型,如 flatvlangrevxlan 等。
  2. tenant_network_types: 定义了租户网络可以使用的网络类型。
  3. mechanism_drivers: 定义了网络后端的机制驱动程序,如 openvswitchlinuxbridgesriovnicswitch 等。

/etc/neutron/plugins/ml2/linuxbridge_agent.ini 是 OpenStack Neutron 的一个配置文件,用于设置 Linux Bridge 代理的行为。以下是该配置文件中一些常见的配置选项:

  1. [linux_bridge] 部分包含物理网络接口的映射设置,例如:
    • physical_interface_mappings:将物理网络名称映射到代理节点(比如controller node或者compute node)特定的物理网络接口。
  2. [vxlan] 部分包含 VXLAN 网络的配置,例如:
    • enable_vxlan:是否启用 VXLAN。
    • local_ip:本地隧道网络端点的 IP 地址。
  3. [securitygroup] 部分包含安全组的配置,例如:
    • enable_security_group:是否启用安全组。
    • firewall_driver:安全组防火墙的驱动程序。

2、OpenStack 负责创建/编排抽象网络,并根据实体网络的配置,自动构建实体网络(包括虚拟网络和物理网络)。

4、创建Openstack抽象网络,实体网络自动执行相关操作

4.1 创建network

Openstack创建network

这是创建network的例子。user admin在project admin下,创建了一个名称为“provider”的network,这个network是share的,意味着其他project可以使用这个network。这个network关联了物理网络“provider”,这个物理网络是在ml2_conf.ini文件中进行了定义,并且在每台主机的linuxbridge_agent.ini中和该主机的网卡进行了映射,说明这个network在每台主机是如何和物理网络进行对接的。

从网络方面看,一个network代表着一个二层的广播域。对应实体网络就是每台主机的一个bridge。这个bridge是按需创建的,单纯的创建一个network,并不会在实体网络中有具体操作。

4.2 创建subnet

创建subnet

在network “provider"之上,创建了一个名称为”provider"的subnet。

从网络方面看,subnet是指IP子网的概念。subnet并没有对应的实体网络。subnet主要限制了主机IP地址之间的通讯方式。

IP地址之间通讯,依赖IP地址,同时还依赖子网掩码。

当一个主机A需要和另一个主机B通讯时,首先会将目的主机B的IP地址和自己的掩码(主机A的掩码)进行计算,得出子网号1。

同时,主机A自己的IP地址和自己的掩码(主机A的掩码)进行计算,得出子网号2。

如果子网号1和子网号2相同,主机A就知道主机B和自己在同一个子网(subnet),此时主机A如果不知道主机B的MAC地址,就发出ARP广播请求(目的地址255.255.255.255),这个ARP请求会封装为二层的广播帧(目的地址FFFF.FFFF.FFFF)

如果子网1和子网号2不同,主机A就知道主机B和自己不在同一个子网,此时主机A就直接把这个包发给网关(gateway)。此时主机A会把IP包(源地址主机A的IP,目的地址主机B的IP)封装为二层帧(源MAC为主机A的MAC,目的MAC为网关的MAC)。主机A如果只知道网关的IP地址(配置中会指明),不知道网关的MAC地址,也会首先发出ARP请求,查找网关的MAC地址。

举例说明:

1、假设主机A为192.168.1.1,掩码为255.255.255.0,主机B为192.168.1.2,A需要和B通讯,A则将192.168.1.2和255.255.255.0进行计算,得出子网号1(192.168.1.0),同时A将自己的IP地址192.168.1.1和255.255.255.0进行计算,得出子网号2(192.168.1.0),子网号1和子网号2相同,所以A知道B和自己在同一个子网(subnet)。如果A不知道B的MAC地址,发出ARP进行查找。

2、假设主机A为192.168.1.1,掩码为255.255.255.0,主机B为192.168.2.2,A需要和B通讯,A则将192.168.2.2和255.255.255.0进行计算,得出子网号1(192.168.2.0),同时A将自己的IP地址192.168.1.1和255.255.255.0进行计算,得出子网号2(192.168.1.0),子网号1和子网号2不相同,所以A知道B和自己不在同一个子网(subnet),此时IP包(源地址为192.168.1.1,目的地址为192.168.2.2)会封装成二层帧(源地址为A的mac,目的地址为网关的mac),发往网关进行处理。如果A不知道网关的MAC地址,会首先发出ARP进行查找。

这个subnet上的虚机需要dhcp动态分配地址。这就需要在实体网络在进行具体的操作。

在neutron安装中,在controller安装了dhcp agent:

在controller node上会针对"provider" network创建一个network namespace,运行dhcp服务,专门用于这个network的dhcp服务:

同时在controller node针对"provider" network,创建一个bridge,dhcp的netns会连接到这个bridge。

为了给这个subnet提供dhcp服务,在qdhcp-48f2b连接bridge的端口分配了该子网的IP地址:

 4.3 创建虚机

首先由nova决定在哪台主机创建虚机,这里是在compute1节点创建了虚机。

同时通过--nic参数指定在network "provider"上创建虚机。

该虚机在正常创建和启动的情况下,在compute1上会针对network "provider"创建一个bridge,虚机连接到该bridge,同时网卡ens35也连接到该bridge上:

这样,虚机在启动过程中,发送dhcp请求就可以到达controller节点上的dhcp server(qdhcp-qdhcp-48f2b)

虚机启动后通过dhcp获取IP地址

 通过wireshark在vmnet6抓包,可以观察dhcp数据流:

 4.4 port

port是network的一部分。在openstack抽象网络,network代表了一个广播域,可以理解为一个大的虚拟交换机。port就是虚拟交换机的端口。

port可以关联一个或多个安全组,用于控制网络访问。

在本文中,qdhcp、虚机都连接到相应的port上。

root@osclient ~(admin/amdin)# openstack port list
+--------------------------------------+------+-------------------+------------------------------------------------------------------------------+--------+
| ID                                   | Name | MAC Address       | Fixed IP Addresses                                                           | Status |
+--------------------------------------+------+-------------------+------------------------------------------------------------------------------+--------+
| 2d863922-bc61-4041-a13e-258f629719b2 |      | fa:16:3e:60:78:cd | ip_address='203.0.113.125', subnet_id='8279842e-d7c5-4ba6-a037-831e0a72a938' | ACTIVE |
| a51b2fe4-049f-4462-ba5d-9660c4faaca1 |      | fa:16:3e:5b:d6:a5 | ip_address='203.0.113.101', subnet_id='8279842e-d7c5-4ba6-a037-831e0a72a938' | ACTIVE |
+--------------------------------------+------+-------------------+------------------------------------------------------------------------------+--------+
root@osclient ~(admin/amdin)# openstack port show a51b2fe4-049f-4462-ba5d-9660c4faaca1
+-------------------------+-------------------------------------------------------------------------------+
| Field                   | Value                                                                         |
+-------------------------+-------------------------------------------------------------------------------+
| admin_state_up          | UP                                                                            |
| allowed_address_pairs   |                                                                               |
| binding_host_id         | controller                                                                    |
| binding_profile         |                                                                               |
| binding_vif_details     | bound_drivers.0='linuxbridge', connectivity='l2', port_filter='True'          |
| binding_vif_type        | bridge                                                                        |
| binding_vnic_type       | normal                                                                        |
| created_at              | 2024-09-26T00:19:22Z                                                          |
| data_plane_status       | None                                                                          |
| description             |                                                                               |
| device_id               | dhcpd3377d3c-a0d1-5d71-9947-f17125c357bb-48f2b88e-7740-4d94-a631-69e2abadf25b |
| device_owner            | network:dhcp                                                                  |
| device_profile          | None                                                                          |
| dns_assignment          | None                                                                          |
| dns_domain              | None                                                                          |
| dns_name                | None                                                                          |
| extra_dhcp_opts         |                                                                               |
| fixed_ips               | ip_address='203.0.113.101', subnet_id='8279842e-d7c5-4ba6-a037-831e0a72a938'  |
| id                      | a51b2fe4-049f-4462-ba5d-9660c4faaca1                                          |
| ip_allocation           | None                                                                          |
| mac_address             | fa:16:3e:5b:d6:a5                                                             |
| name                    |                                                                               |
| network_id              | 48f2b88e-7740-4d94-a631-69e2abadf25b                                          |
| numa_affinity_policy    | None                                                                          |
| port_security_enabled   | False                                                                         |
| project_id              | ee65b6c3961747b988ab8bd1cc19fb93                                              |
| propagate_uplink_status | None                                                                          |
| qos_network_policy_id   | None                                                                          |
| qos_policy_id           | None                                                                          |
| resource_request        | None                                                                          |
| revision_number         | 26                                                                            |
| security_group_ids      |                                                                               |
| status                  | ACTIVE                                                                        |
| tags                    |                                                                               |
| trunk_details           | None                                                                          |
| updated_at              | 2024-10-06T22:14:04Z                                                          |
+-------------------------+-------------------------------------------------------------------------------+
root@osclient ~(admin/amdin)# openstack port show 2d863922-bc61-4041-a13e-258f629719b2
+-------------------------+------------------------------------------------------------------------------+
| Field                   | Value                                                                        |
+-------------------------+------------------------------------------------------------------------------+
| admin_state_up          | UP                                                                           |
| allowed_address_pairs   |                                                                              |
| binding_host_id         | compute1                                                                     |
| binding_profile         |                                                                              |
| binding_vif_details     | bound_drivers.0='linuxbridge', connectivity='l2', port_filter='True'         |
| binding_vif_type        | bridge                                                                       |
| binding_vnic_type       | normal                                                                       |
| created_at              | 2024-09-28T02:49:21Z                                                         |
| data_plane_status       | None                                                                         |
| description             |                                                                              |
| device_id               | d2e4bc39-63c8-4c80-b33f-52f4e1891f50                                         |
| device_owner            | compute:nova                                                                 |
| device_profile          | None                                                                         |
| dns_assignment          | None                                                                         |
| dns_domain              | None                                                                         |
| dns_name                | None                                                                         |
| extra_dhcp_opts         |                                                                              |
| fixed_ips               | ip_address='203.0.113.125', subnet_id='8279842e-d7c5-4ba6-a037-831e0a72a938' |
| id                      | 2d863922-bc61-4041-a13e-258f629719b2                                         |
| ip_allocation           | None                                                                         |
| mac_address             | fa:16:3e:60:78:cd                                                            |
| name                    |                                                                              |
| network_id              | 48f2b88e-7740-4d94-a631-69e2abadf25b                                         |
| numa_affinity_policy    | None                                                                         |
| port_security_enabled   | True                                                                         |
| project_id              | f5e75a3f7cc347ad89d20dcfe70dae01                                             |
| propagate_uplink_status | None                                                                         |
| qos_network_policy_id   | None                                                                         |
| qos_policy_id           | None                                                                         |
| resource_request        | None                                                                         |
| revision_number         | 24                                                                           |
| security_group_ids      | 15dfe688-d6fc-4231-a670-7b832e08fb9d                                         |
| status                  | ACTIVE                                                                       |
| tags                    |                                                                              |
| trunk_details           | None                                                                         |
| updated_at              | 2024-10-07T03:45:50Z                                                         |
+-------------------------+------------------------------------------------------------------------------+
root@osclient ~(admin/amdin)# 

4.5 相关操作归纳

Openstack操作抽象网络实体网络相关操作
controler节点compute1节点
1创建networknetwork "provider"无操作无操作
2创建subnetsbunet "provider“

a.创建bridge

b.创建qdhcp netns

c. qdhcp、网卡ens34连接到bridge

无操作
3创建虚机”provider-instance"无操作

a.创建bridge

b.创建并启动虚机,连接到bridge

c.网卡ens35连接到bridge

注:如果没有虚机连接到该bridge,bridge将删除

4port(这里是自动创建的)

连接qdhcp的port

连接虚机的port

无操作无操作

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

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

相关文章

Android15车载音频之Virtualbox中QACT实时调试(八十八)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

Python--暂停一秒输出

在编程实践中,我们经常需要让程序在执行特定操作后暂停一段时间。Python中的time模块提供了一个简单而强大的sleep()函数,允许程序暂停指定的时间。本文将通过一个具体的例子,展示如何使用sleep()函数来实现每隔一秒输出一次当前时间的最后两…

爱心曲线公式大全

local r a*((math.sin(angle) * math.sqrt(math.abs(math.cos(angle)))) / (math.sin(angle) 1.4142) - 2 * math.sin(angle) 2) local x r * math.cos(angle) -- 计算对应的x值 local z r * math.sin(angle) 1.5*a - --曲线公式绘画 local function generateParabola()…

Golang | Leetcode Golang题解之第463题岛屿的周长

题目: 题解: type pair struct{ x, y int } var dir4 []pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}func islandPerimeter(grid [][]int) (ans int) {n, m : len(grid), len(grid[0])for i, row : range grid {for j, v : range row {if v 1 {for _, d :…

深度学习---------------------------------自注意力和位置编码

目录 自注意力跟CNN、RNN对比位置编码位置编码矩阵 绝对位置信息相对位置信息总结自注意力和位置编码自注意力该部分总代码 位置编码该部分总代码 二进制表示在编码维度上降低频率该部分总代码 自注意力 给定一个由词元组成的输入序列 x 1 x_1 x1​,…, x n x_n xn​&#xff…

基于web的网上摄影工作室的开发与实现源码+论文

项目简介 基于springboot实现的,主要功能如下: 技术栈 后端框框:springboot/mybatis 前端框架:html/JavaScript/Css/vue/elementui 运行环境:JDK1.8/MySQL5.7/idea(可选)/Maven3&#xff08…

基于ssm实现的建筑装修图纸管理平台(源码+文档)

项目简介 基于ssm实现的建筑装修图纸管理平台,主要功能如下: 技术栈 后端框框:spring/springmvc/mybatis 前端框架:html/JavaScript/Css/vue/elementui 运行环境:JDK1.8/MySQL5.7/idea(可选&#xff09…

农业政策与市场分析:解读当前政策导向下的农业发展趋势

在快速变化的全球经济格局中,农业作为国家稳定发展的基石,其政策走向与市场动态备受瞩目。本文将深入剖析当前的农业政策背景,探讨其对设计的导向作用,以及市场趋势的反馈与影响,为农业可持续发展提供洞见。 1. 政策背…

SAP学习笔记 - 豆知识11 - 如何查询某个字段/DataElement/Domain在哪个表里使用?

大家知道SAP的表有10几万个(也有说30多万个的,总之很多就是了),而且不断增多,那么当想知道一个字段在哪个表里使用的时候该怎么办呢? 思路就是SAP的表其实也是存在表里的:)&#xf…

k8s 中的 PV 的动态供给

目录 1 存储类 Storageclass 介绍 1.1 StorageClass 说明 1.2 StorageClass 的属性 2 存储分配器 NFS Client Provisioner 2.1 官网存储分配器的部署介绍 2.2 实现动态创建 PV 模版清单文件的介绍 2.2.1 Storageclass 存储类的模版 2.2.2 创建 Provisioner 制备器的模版 2.2.3…

数据结构与算法——动态规划算法简析

1.初步了解动态规划 由于本篇博客属于动态规划的初阶学习,所以大多都是简单的表示,更深层次的学术用语会在之后深度学习动态规划之后出现,本文主要是带各位了解一下动态规划的大致框架 1.1状态表示 通常的我们会开辟一个dp数组来存储需要表示…

centos7 yum仓库无法使用的问题

1、问题 如下 2、按照csdn等网页说的做了没有用!CentOS-yum源不可用报错:Could not retrieve mirrorlist 问题解决_yum could not retrieve mirrorlist-CSDN博客 3、使用b站博主的方法解决! LinuxMirrors: GNU/Linux 一键更换系统软件源脚本…

切片辅助超推理-sahi库-slice_image使用

代码地址:https://github.com/obss/sahi slice_image是sahi库中一个函数,理解这个函数是理解切片的入口。 一、官方函数使用示例 from sahi.slicing import slice_imageimage_pathrsmall-vehicles1.jpeg output_dirrashi_result output_file_name1-#手…

LeetCode 3311. 构造符合图结构的二维矩阵

LeetCode 3311. 构造符合图结构的二维矩阵 给你一个二维整数数组 edges ,它表示一棵 n 个节点的 无向 图,其中 edges[i] [ui, vi] 表示节点 ui 和 vi 之间有一条边。 请你构造一个二维矩阵,满足以下条件: 矩阵中每个格子 一一对应…

力扣之1336.每次访问的交易次数

题目: sql建表语句: Create table If Not Exists Visits (user_id int, visit_date date); Create table If Not Exists Transactions (user_id int, transaction_date date, amount int); Truncate table Visits; insert into Visits (user_id,…

如何让客户主动成为你的品牌大使

在销售领域,转介绍被公认为一把无坚不摧的利器,它不仅铸就了高成交率的辉煌,更以惊人的速度缩短了成交周期。一位精通转介绍艺术的销售员,其业绩自然熠熠生辉,工作之路亦显得游刃有余。 然而,面对这一宝藏…

Bianchi模型、python计算及ns3验证_关于2~10 STA验证的补充

首先就是预设修改, NS3中bitrate是OfdmRate54Mbps,STA数目我设置了2-10,ack长度是14bytes,数据长36,头36(trace中只有1536和14两个长度,也就是数据长度1500,头36,ack14),SIFS和SLOT是16us和9us(在phy的定义中,11a的时候,sifs是16,slot是9),difs是34us(在bia…

2024Java最新面试题总结(针对于一些小厂、中厂)

这是根据个人面试经历总结出来的一些经验希望可以帮助到有需要的人。 面试的时候,会先让你进行自我介绍,这个大家准备一两分钟的面试稿就可以。然后就是正式面试,面试官一般是两个人以上,开始,面试官会先提问一些基本…

【NLP自然语言处理】01-基础学习路径简介

目的:让大家能够在 AI-NLP 领域由基础到入门具体安排: NLP介绍 文本预处理RNN 及其变体(涉及案例)Transformer 原理详解迁移学习 和 Bert 模型详解 (涉及案例)特点: 原理 实践每个文章会有练习…

Nat. Commun.:飞秒激光书写受蚂蚁启发的可重构微型机器人集体

背景介绍生物在各种环境中的集体行为十分普遍,它们能够自发有序地完成单个个体难以完成的任务。目前,生物集体的形成主要分为两大类。第一类生物个体之间没有直接接触,如蜜蜂、鱼和鸟类,这导致这些集体不稳定,容易受到…