首页 文章 精选 留言 我的

精选列表

搜索[openstack],共3159篇文章
优秀的个人博客,低调大师

OVS vxlan 底层结构分析 - 每天5分钟玩转 OpenStack(148)

上一节创建了 vxlan100_net 并部署 instance,今天我们来分析底层网络结构。 控制节点 执行 ovs-vsctl show: br-int br-int 连接了如下 port: tap0d4cb13a-7a 是 vxlan100_net 的 DHCP 服务对应的 interface。 qvoa2ac3b9a-24 将 cirros-vm1 虚拟网卡连接到 vxlan100_net。 br-tun br-tun 上创建了一个特殊的 port “vxlan-a642100b”,它是 VXLAN 的隧道端点,指定了本地(devstack-controller)节点和远端(devstack-compute1)节点 VTEP 的 IP。 计算节点 执行 ovs-vsctl show: br-int br-int 上 qvoab219616-01 将 cirros-vm2 虚拟网卡连接到 vxlan100_net。 br-tun br-tun 上也创建了 port “vxlan-a642100b”,配置内容与控制节点相对,指定了本地(devstack-compute1)节点和远端(devstack-controller)节点 VTEP 的 IP。 当前网络结构如下: 需要特别注意的是:无论存在多少个 VXLAN,devstack-controller 与 devstack-compute1 之间所有的数据都只通过 “vxlan-a642100b” 这对 port 上建立的隧道传输。分析完 vxlan 的结构,那么数据是如何在节点之间传输的呢? 答案就是 flow rule,下节我们详细分析。

优秀的个人博客,低调大师

创建 vxlan 并部署 instance - 每天5分钟玩转 OpenStack(147)

上一节我们完成了 OVS VxLAN 的配置工作,今天创建 vxlan100_net 并部署 instance。 创建 vxlan100_net 打开菜单 Admin -> Networks,点击 “Create Network” 按钮。 显示创建页面。 Provider Network Type 选择 “VXLAN”。 Segmentation ID 即 VNI,设置为 100。 点击 “Create Network”,vxlan100 创建成功。 点击 vxlan100 链接,进入 network 配置页面,目前还没有 subnet,点击 “Create Subnet” 按钮。 创建 subnet_172_16_100_0,IP 地址为 172.16.100.0/24。 将 instance 连接到 vxlan100_net launch 新的 instance “cirros-vm1”,“cirros-vm2” 网络选择 vxlan100。 cirros-vm1,cirros-vm2 分别部署到控制节点和计算节点,IP 如下: 测试 cirros-vm1 和 cirros-vm2 的连通性。 与我们预期相同,cirros-vm1 能 Ping 通 cirros-vm2。 下一节我们详细分析 Open vSwitch 是如何实现 VXLAN 的。

优秀的个人博客,低调大师

用虚拟 router 连通 subnet - 每天5分钟玩转 OpenStack(141)

Neutron Routing 服务提供跨 subnet 互联互通的能力。例如前面我们搭建了实验环境: cirros-vm1 172.16.100.3 vlan100 cirros-vm3 172.16.101.3 vlan101 这两个 instance 要通信必须借助 router。可以是物理 router 或者虚拟 router。 下面详细讨论 Neutron 的虚拟 router 实现。 配置 l3 agent Neutron 的路由服务是由 l3 agent 提供的。 l3 agent 需要正确配置才能工作,配置文件为 /etc/neutron/l3_agent.ini,位于控制节点或网络节点。 devstack 已经帮我们配置默认的属性,大部分情况下不需要修改就可以使用。 external_network_bridge 指定连接外网的网桥,默认是 br-ex。 interface_driver 是最重要的选项,如果 mechanism driver 是 open vswitch,则: interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver 如果选用 linux bridge,则: interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver l3 agent 运行在控制或网络节点。 下面将创建虚拟 router “router_100_101”,打通 vlan100 和 vlan101。 创建 router 进入操作菜单 Project -> Network -> Routers。 点击 “Create Router” 按钮。 router 命名为 “router_100_101”,点击 “Create Router” 按钮确认。 router_100_101 创建成功。 接下来需要将 vlan100 和 vlan101 连接到 router_100_101。 点击 “router_100_101” 链接进入 router 的配置页面,在 “Interfaces” 标签中点击 “Add Interface” 按钮。 选择 vlan100 的 subnet_172_16_100_0,点击 “Add Interface” 确认。 用同样的方法添加 vlan101 的 subnet_172_16_101_0。 完成后,可以看到 router_100_101 有了两个 interface,其 IP 正好是 subnet 的 Gateway IP 172.16.100.1 和 172.16.101.1。 到这里,我们可以预见: 1. router_100_101 已经连接了 subnet_172_16_100_0 和 subnet_172_16_101_0。 2. router_100_101 上已经设置好了两个 subnet 的 Gateway IP。 3. cirros-vm1 和 cirros-vm3 应该可以通信了。 通过 PING 测试一下: 不出所料,cirros-vm1 和 cirros-vm3 能通信了。 下一节我们详细探究 router_100_101 是如何起作用的。

优秀的个人博客,低调大师

通过 floating IP 访问 VIP - 每天5分钟玩转 OpenStack(126)

前面我们是直接用 curl 测试 VIP,在更为真实的场景中通常会使用 floating IP 访问 VIP。 下面我们给 VIP 关联一个 floating IP,再进行测试。 访问 Project -> Compute -> Access & Security,打开 Floating IPs 标签页,点击 “Allocate IP to Project” 按钮。 在下拉列表中选择 “ext_net”,Neutron 将从该网络中分配 floating IP。 点击 “Allocate IP”。 分配到的 IP 为 “10.10.10.7”。 点击 “Associate” 按钮。 在 “Port to be associated” 列表中选择 “VIP for web servers: 172.16.100.11” 并点击 “Associate”。 成功将外网 IP 10.10.10.7 关联到 VIP。 下面是在 IP 为 10.10.10.4 的 instance 中进行 curl 测试。 floating IP 生效,load balaner 工作正常。 LBaaS 小节 LBaaS 为租户提供了横向扩展应用的能力。 租户可以将外部请求 balancing 到多个 instance 上,并通过 monitor 实现应用的高可用。 LBaaS 当前的实现是基于 HAProxy,其功能已经能够满足普通业务需求。 至此,Linux Bridge 实现 Neutron 网络的全部内容已经讨论完,下节我们开始学习 Open vSwitch 实现。

优秀的个人博客,低调大师

Neutron 默认安全组规则 - 每天5分钟玩转 OpenStack(115)

Neutron 为 instance 提供了两种管理网络安全的方法: 安全组(Security Group)和虚拟防火墙。 安全组的原理是通过 iptables 对 instance 所在计算节点的网络流量进行过滤。 虚拟防火墙则由 Neutron Firewall as a Service(FWaaS)高级服务提供。 其底层也是使用 iptables,在 Neutron Router 上对网络包进行过滤。 这两种安全方案我们都会讨论,本章先重点学习安全组。 默认安全组 每个 Project(租户)都有一个命名为 “default” 的默认安全组。 点击菜单 Project -> Compute -> Access & Security,查看 Security Group 列表。 点击按钮,查看 “default” 安全组的规则。 “default” 安全组有四条规则,其作用是: 允许所有外出(Egress)的流量,但禁止所有进入(Ingress)的流量。 当我们创建 instance 时,可以在 “Access & Security” 标签页中选择安全组。 如果当前只有 “default” 这一个安全组,则会强制使用 “default” 。 当前在 devstack-controller 上有 instance “cirros-vm1”。 在 devstack-controller 上执行 iptables-save 命令查看相关规则。 iptables 的规则较多,这里我们节选了 cirros-vm1 相关的规则。这些规则是 Neutron 根据安全组自动生成的。 如果大家想深入理解 iptables,可 google 相关文档。 cirros-vm1 的 TAP interface 为 tap8bca5b86-23,可以看到: 1. iptables 的规则是应用在 Neutron port 上的,port 在这里是 cirros-vm1 的虚拟网卡 tap8bca5b86-23。 2. ingress 规则集中定义在命名为 “neutron-linuxbri-i8bca5b86-2” 的 chain 中。 3. egress 规则集中定义在命名为 “neutron-linuxbri-o8bca5b86-2” 的 chain 中。 下面我们通过 dhcp namespace 对 cirros-vm1 进行 ping 和 ssh 测试。 无法 ping 和 ssh cirros-vm1,可见当前的规则实现了 “default” 安全组,所有 ingress 流量都被禁止。 下节我们会创建新的安全组允许 ping 和 ssh。

优秀的个人博客,低调大师

配置 L2 Population - 每天5分钟玩转 OpenStack(114)

前面我们学习了L2 Population 的原理,今天讨论如何在 Neutron 中配置和启用此特性。 目前 L2 Population 支持 VXLAN with Linux bridge 和 VXLAN/GRE with OVS。 可以通过以下配置启用 L2 Population。 在 /etc/neutron/plugins/ml2/ml2_conf.ini 设置 l2population mechanism driver。 mechanism_drivers = linuxbridge,l2population 同时在 [VXLAN] 中配置 enable L2 Population。 L2 Population 生效后,创建的 vxlan-100 会多一个 Proxy ARP 功能。 查看控制节点上的 forwarding database,可以看到 VTEP 保存了 cirros-vm2 的 port 信息。 cirros-vm2 的 MAC 为 fa:16:3e:1d:23:a3。 VTEP IP 为 166.66.16.11。 当需要与 cirros-vm2 通信时,控制节点 VTEP 166.66.16.10 会将封装好的 VXLAN 数据包直接发送给计算节点的 VTEP 166.66.16.11。 我们再查看一下计算节点上的 forwarding database: fdb 中保存了 cirros-vm1 和 dhcp 的 port 信息。 当需要与它们通信时,计算节点 VTEP 知道应该将数据包直接发送给控制节点的 VTEP。下节我们开始学习 Neutron 的另一个特性 -- Security Group。

优秀的个人博客,低调大师

L2 Population 原理 - 每天5分钟玩转 OpenStack(113)

前面我们学习了 VXLAN,今天讨论跟 VXLAN 紧密相关的 L2 Population。 L2 Population 是用来提高 VXLAN 网络 Scalability 的。 通常我们说某个系统的 Scalability 好,其意思是: 当系统的规模变大时,仍然能够高效地工作。 L2 Population 到底解决了怎样的 Scalability 问题? 请看下图: 这是一个包含 5 个节点的 VXLAN 网络,每个节点上运行了若干 VM。 现在假设 Host 1 上的 VM A 想与 Host 4 上的 VM G 通信。VM A 要做的第一步是获知 VM G 的 MAC 地址。 于是 VM A 需要在整个 VXLAN 网络中广播 APR 报文:“VM G 的 MAC 地址是多少?” 如果 VXLAN 网络的节点很多,广播的成本会很大,这样 Scalability 就成问题了。 幸好 L2 Population 出现了。 L2 Population 的作用是在 VTEP 上提供 Porxy ARP 功能,使得 VTEP 能够预先获知 VXLAN 网络中如下信息: 1. VM IP -- MAC 对应关系 2. VM -- VTEP 的对应关系 当 VM A 需要与 VM G 通信时: 1. Host 1 上的 VTEP 直接响应 VM A 的 APR 请求,告之 VM G 的 MAC 地址。 2. 因为 Host 1 上的 VTEP 知道 VM G 位于 Host 4,会将封装好的 VXLAN 数据包直接发送给 Host 4 的 VTEP。 这样就解决了 MAC 地址学习和 APR 广播的问题,从而保证了 VXLAN 的 Scalability。 那么下一个关键问题是:VTEP 是如何提前获知 IP -- MAC -- VTEP 相关信息的呢?答案是: Neutron 知道每一个 port 的状态和信息; port 保存了 IP,MAC 相关数据。 instance 启动时,其 port 状态变化过程为:down -> build -> active。 每当 port 状态发生变化时,Neutron 都会通过 RPC 消息通知各节点上的 Neutron agent,使得 VTEP 能够更新 VM 和 port 的相关信息。 VTEP 可以根据这些信息判断出其他 Host 上都有哪些 VM,以及它们的 MAC 地址,这样就能直接与之通信,从而避免了不必要的隧道连接和广播。 理解了工作原理,下节我们学习如何在 Neutorn 中配置 L2 Population。

优秀的个人博客,低调大师

创建外网 ext_net - 每天5分钟玩转 OpenStack(104)

虽然外部网络是已经存在的网络,但我们还是需要在 Neutron 中定义外部网络的对象,这样 router 才知道如何将租户网络和外部网络连接起来。 上一节我们已经为创建外部网络配置了ML2,本节将通过 UI 创建 ext_net。 进入 Admin -> Networks 菜单,点击 “Create Network” 按钮。 显示创建页面。 Provider Network Type 选择 “Flat” Physical Network 填写 “external”,与 ml2_conf.ini 中 flat_networks 参数的设置保持一致。 勾选 External Network 选择框。 点击 “Create Network”,ext_net 创建成功。 点击 ext_net 链接,进入 network 配置页面,目前还没有 subnet,点击 “Create Subnet” 按钮。 创建 subnet_10_10_10_0,IP 地址为 10.10.10.0/24。 这里 Gateway 我们使用默认地址 10.10.10.1。 通常我们需要询问网络管理员外网 subnet 的 Gateway IP,然后填在这里。 点击 “Next”。 因为我们不会直接为 instance 分配外网 IP,所以一般不需要 enable DHCP。 点击 “Create”。 subnet 创建成功,网关为 10.10.10.1。 下面查看控制节点网络结构的变化,执行 brctl show 增加了一个网桥 brqe496d3d2-53,物理网卡 eth2 已经连接到该 bridge。 下一节我们会将 ext_net 连接到 router,并验证内外网的连通性,以及分析隐藏在表象之下的原理。

优秀的个人博客,低调大师

创建 router 连通 subnet- 每天5分钟玩转 OpenStack(100)

上一节我们为 Neutron 虚拟路由器配置好了 L3 agent,今天将创建虚拟路由器“router_100_101”,打通 vlan100 和 vlan101。 打开操作菜单 Project -> Network -> Routers。 点击 “Create Router” 按钮 router 命名为 “router_100_101”,点击 “Create Router” 按钮确认。 router_100_101 创建成功。 接下来需要将 vlan100 和 vlan101 连接到 router_100_101。 点击 “router_100_101” 链接进入 router 的配置页面,在 “Interfaces” 标签中点击 “Add Interface” 按钮。 选择 vlan101 的 subnet_172_16_101_0,点击 “Add Interface” 确认。 用同样的方法添加 vlan100 的 subnet_172_16_100_0。 完成后,可以看到 router_100_101 有了两个 interface,其 IP 正好是 subnet 的 Gateway IP 172.16.100.1 和 172.16.101.1。 到这里,我们可以预见: 1. router_100_101 已经连接了 subnet_172_16_100_0 和 subnet_172_16_101_0。 2. router_100_101 上已经设置好了两个 subnet 的 Gateway IP。 3. cirros-vm1 和 cirros-vm3 应该可以通信了。 通过 PING 测试一下。 判断正确,cirros-vm1 和 cirros-vm3 能通信了。 查看 cirros-vm1 的路由表,默认网关为 172.16.100.1。 同时 traceroute 告诉我们,cirros-vm1 确实是通过 router_100_101 访问到 cirros-vm3 的。 下一节我们会探讨 router_100_101 是如何起作用的。

优秀的个人博客,低调大师

配置 L3 agent - 每天5分钟玩转 OpenStack(99)

上一节我们介绍了路由服务(Routing)的基本功能,今天教大家如何配置。 Neutron 的路由服务是由 l3 agent 提供的。 除此之外,l3 agent 通过 iptables 提供 firewall 和 floating ip 服务。 l3 agent 需要正确配置才能工作,配置文件为 /etc/neutron/l3_agent.ini,位于控制节点或网络节点上。 interface_driver 是最重要的选项,如果 mechanism driver 是 linux bridge,则: interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver 如果选用 open vswitch,则: interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver l3 agent 运行在控制或网络节点上。 可以看到 l3 agnet 已经正常启动,下节我们就来创建 router。

优秀的个人博客,低调大师

获取 dhcp IP 过程分析 - 每天5分钟玩转 OpenStack(91)

前面我们已经讨论了 DHCP agent 的配置以及 namespace 如何隔离 dnsmasq 服务,本节将以 cirros-vm1 为例分析获取 DHCP IP 的详细过程。 在创建 instance 时,Neutron 会为其分配一个 port,里面包含了 MAC 和 IP 地址信息。这些信息会同步更新到 dnsmasq 的 host 文件。如下图所示: 同时 nova-compute 会设置 cirros-vm1 VIF 的 MAC 地址。 一切准备就绪,instance 获取 IP 的过程如下: cirros-vm1 开机启动,发出 DHCPDISCOVER 广播,该广播消息在整个 flat_net 中都可以被收到。 广播到达 veth tap19a0ed3d-fe,然后传送给 veth pair 的另一端 ns-19a0ed3d-fe。dnsmasq 在它上面监听,dnsmasq 检查其 host 文件,发现有对应项,于是dnsmasq 以 DHCPOFFER 消息将 IP(172.16.1.103)、子网掩码(255.255.255.0)、地址租用期限等信息发送给 cirros-vm1。 cirros-vm1 发送 DHCPREQUEST 消息确认接受此 DHCPOFFER。 dnsmasq 发送确认消息 DHCPACK,整个过程结束。 这个过程我们可以在 dnsmasq 日志中查看。 dnsmasq 默认将日志记录到 /var/log/syslog。 至此,我们已经讨论完 DHCP 服务,下节开始讲学习应用最广泛的 vlan network。

优秀的个人博客,低调大师

用 namspace 隔离 DHCP 服务 - 每天5分钟玩转 OpenStack(90)

Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 如何独立的为每个 network 服务呢? 答案是通过 Linux Network Namespace 隔离,本节将详细讨论。 在二层网络上,VLAN 可以将一个物理交换机分割成几个独立的虚拟交换机。 类似地,在三层网络上,Linux network namespace 可以将一个物理三层网络分割成几个独立的虚拟三层网络。 每个 namespace 都有自己独立的网络栈,包括 route table,firewall rule,network interface device 等。 Neutron 通过 namespace 为每个 network 提供独立的 DHCP 和路由服务,从而允许租户创建重叠的网络。如果没有 namespace,网络就不能重叠,这样就失去了很多灵活性。 每个 dnsmasq 进程都位于独立的 namespace, 命名为 qdhcp-<network id>,例如 flat_net,我们有: ip netns list 命令列出所有的 namespace。 qdhcp-f153b42f-c3a1-4b6c-8865-c09b5b2aa274 就是 flat_net 的 namespace。 其实,宿主机本身也有一个 namespace,叫 root namespace,拥有所有物理和虚拟 interface device。 物理 interface 只能位于 root namespace。 新创建的 namespace 默认只有一个 loopback device。 管理员可以将虚拟 interface,例如 bridge,tap 等设备添加到某个 namespace。 对于 flat_net 的 DHCP 设备 tap19a0ed3d-fe,需要将其放到 namespace qdhcp-f153b42f-c3a1-4b6c-8865-c09b5b2aa274 中,但这样会带来一个问题: tap19a0ed3d-fe 将无法直接与 root namespace 中的 bridge 设备 brqf153b42f-c3 连接。 Neutron 使用 veth pair 解决了这个问题。 veth pair 是一种成对出现的特殊网络设备,它们象一根虚拟的网线,可用于连接两个 namespace。向 veth pair 一端输入数据,在另一端就能读到此数据。 tap19a0ed3d-fe 与 ns-19a0ed3d-fe 就是一对 veth pair,它们将 qdhcp-f153b42f-c3a1-4b6c-8865-c09b5b2aa274 连接到 brqf153b42f-c3。如下图所示: 可以通过 ip netns exec <network namespace name> <command> 管理 namespace。 例如查看 ns-19a0ed3d-fe 的配置: 理解了 namespace,下一节我们分析 instance 从 dnsmasq 获取 IP 的详细过程。

优秀的个人博客,低调大师

flat network 原理与配置 - 每天5分钟玩转 OpenStack(86)

flat network 是不带 tag 的网络,要求宿主机的物理网卡直接与 linux bridge 连接,这意味着: 每个 flat network 都会独占一个物理网卡。 上图中 eth1 桥接到 brqXXX,为 instance 提供 flat 网络。 如果需要创建多个 flat network,就得准备多个物理网卡,如下图所示。 接下来讨论如何配置 flat 网络。 在 ML2 配置中 enable flat network 在 /etc/neutron/plugins/ml2/ml2_conf.ini 设置 flat network 相关参数。 tenant_network_types = flat 指定普通用户创建的网络类型为 flat。 需要注意的是:因为 flat 网络与物理网卡一一对应,一般情况下租户网络不会采用 flat,这里只是示例。 接着需要指明 flat 网络与物理网卡的对应关系。 如上所示: 1. 在 [ml2_type_flat] 中通过 flat_networks 定义了一个 flat 网络,label 为 “default”。 2. 在 [linux_bridge] 中通过 physical_interface_mappings 指明 default 对应的物理网卡为 eth1。 理解 label 与 ethX 的关系 label 是 flat 网络的标识,在创建 flat 时需要指定 label(后面演示)。label 的名字可以是任意字符串,只要确保各个节点 ml2_conf.ini 中的 label 命名一致就可以了。 各个节点中 label 与物理网卡的对应关系可能不一样。这是因为每个节点可以使用不同的物理网卡将 instance 连接到 flat network。 例如对于 label 为 “default” 的 flat network,节点 A 可能使用 eth1,配置为: physical_interface_mappings = default:eth1 而节点 B 则可能使用 eth2,配置为: physical_interface_mappings = default:eth2 支持多个 flat 如果要创建多个 flat 网络,需要定义多个 label,用逗号隔开,当然也需要用到多个物理网卡,如下所示: [ml2_type_flat] flat_networks = flat1,flat2 [linux_bridge] physical_interface_mappings = flat1:eth1,flat2:eth2 准备就绪,下一节将创建 flat 网络。

优秀的个人博客,低调大师

理解 Neutron Server 分层模型 - 每天5分钟玩转 OpenStack(69)

本节开始讨论 Neutron 的各个服务组件,首先学习 Neutron Server 。 上图是 Neutron Server 的分层结构,至上而下依次为: Core API对外提供管理 network, subnet 和 port 的 RESTful API。 Extension API对外提供管理 router, load balance, firewall 等资源 的 RESTful API。 Commnon Service认证和校验 API 请求。 Neutron CoreNeutron server 的核心处理程序,通过调用相应的 Plugin 处理请求。 Core Plugin API定义了 Core Plgin 的抽象功能集合,Neutron Core 通过该 API 调用相应的 Core Plgin。 Extension Plugin API定义了 Service Plgin 的抽象功能集合,Neutron Core 通过该 API 调用相应的 Service Plgin。 Core Plugin实现了 Core Plugin API,在数据库中维护 network, subnet 和 port 的状态,并负责调用相应的 agent 在 network provider 上执行相关操作,比如创建 network。 Service Plugin实现了 Extension Plugin API,在数据库中维护 router, load balance, security group 等资源的状态,并负责调用相应的 agent 在 network provider 上执行相关操作,比如创建 router。 归纳起来,Neutron Server 包括两部分: 1. 提供 API 服务。 2. 运行 Plugin。 即 Neutron Server = API + Plugins 明白了 Neutron Server 的分层模型,我们就更容易理解 Neutron 是如何支持各种 network provider。这一点我们放到下节详细讨论。

优秀的个人博客,低调大师

Neutron 网络基本概念 - 每天5分钟玩转 OpenStack(66)

上次我们讨论了 Neutron 提供的功能,今天我们学习 Neutron 模块几个重要的概念。 Neutron 管理的网络资源包括 Network,subnet 和 port,下面依次介绍。 network network 是一个隔离的二层广播域。Neutron 支持多种类型的 network,包括 local, flat, VLAN, VxLAN 和 GRE。 locallocal 网络与其他网络和节点隔离。local 网络中的 instance 只能与位于同一节点上同一网络的 instance 通信,local 网络主要用于单机测试。 flatflat 网络是无 vlan tagging 的网络。flat 网络中的 instance 能与位于同一网络的 instance 通信,并且可以跨多个节点。 vlanvlan 网络是具有 802.1q tagging 的网络。vlan 是一个二层的广播域,同一 vlan 中的 instance 可以通信,不同 vlan 只能通过 router 通信。vlan 网络可以跨节点,是应用最广泛的网络类型。 vxlanvxlan 是基于隧道技术的 overlay 网络。vxlan 网络通过唯一的 segmentation ID(也叫 VNI)与其他 vxlan 网络区分。vxlan 中数据包会通过 VNI 封装成 UDP 包进行传输。因为二层的包通过封装在三层传输,能够克服 vlan 和物理网络基础设施的限制。 gregre 是与 vxlan 类似的一种 overlay 网络。主要区别在于使用 IP 包而非 UDP 进行封装。 不同 network 之间在二层上是隔离的。以 vlan 网络为例,network A 和 network B 会分配不同的 VLAN ID,这样就保证了 network A 中的广播包不会跑到 network B 中。当然,这里的隔离是指二层上的隔离,借助路由器不同 network 是可能在三层上通信的。 network 必须属于某个 Project( Tenant 租户),Project 中可以创建多个 network。 network 与 Project 之间是 1对多 关系。 subnet subnet 是一个 IPv4 或者 IPv6 地址段。instance 的 IP 从 subnet 中分配。每个 subnet 需要定义 IP 地址的范围和掩码。 subnet 与 network 是 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 都是可以重叠的,比如 network A 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地址是可以重叠的,那么就可能存在具有相同 IP 的两个 instance,这样会不会冲突? 简单的回答是:不会! 具体原因: 因为 Neutron 的 router 是通过 Linux network namespace 实现的。network namespace 是一种网络的隔离机制。通过它,每个 router 有自己独立的路由表。 上面的配置有两种结果: 如果两个 subnet 是通过同一个 router 路由,根据 router 的配置,只有指定的一个 subnet 可被路由。 如果上面的两个 subnet 是通过不同 router 路由,因为 router 的路由表是独立的,所以两个 subnet 都可以被路由。 这里只是先简单做个说明,我们会在后面三层路由的章节详细分析这种场景。 port port 可以看做虚拟交换机上的一个端口。port 上定义了 MAC 地址和 IP 地址,当 instance 的虚拟网卡 VIF(Virtual Interface) 绑定到 port 时,port 会将 MAC 和 IP 分配给 VIF。 port 与 subnet 是 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下一节我们讨论 Neutron 的架构。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册