首页 文章 精选 留言 我的

精选列表

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

将 ext_net 连接到 router - 每天5分钟玩转 OpenStack(145)

上一节完我们创建了外部网络 ext_net,接下来需要将其连接到 Neutron 的虚拟路由器,这样 instance 才能访问外网。 点击菜单 Project -> Network -> Routers 进入 router 列表。 点击 router_100_101 的 “Set Gateway” 按钮。 在 “External Network” 下拉列表中选择 ext_net,点击 “Set Gateway”。 外网设置成功。我们需要看看 router 发生了什么变化。 点击 “router_100_101” 链接,打开 “Interfaces” 标签页。 router 多了一个新 interface,IP 为 10.10.10.2。 该 interface 用于连接外网 ext_net,对应的 br-ex 的 port “qg-cf54d3ea-6a”。 在 router 的 namespace 中查可以看到 qg-cf54d3ea-6a 已经配置了 IP 10.10.10.2。 router interface 的命名规则如下: 1. 如果 interface 用于连接租户网络,命名格式为 qr-xxx。 2. 如果 interface 用于连接外部网络,命名格式为 qg-xxx。 查看 router 的路由表信息: 可以看到默认网关为 10.10.10.1。 意味着对于访问 vlan100 和 vlan101 租户网络以外的所有流量,router_100_101 都将转发给 ext_net 的网关 10.10.10.1。 现在 router_100_101 已经同时连接了 vlan100, vlan101 和 ext_net 三个网络,如下图所示: 我们在 cirros-vm3 上测试一下。 cirros-vm3 位于计算节点,现在已经可以 Ping 到 ext_net 网关 10.10.10.1 了。 通过 traceroute 查看一下 cirros-vm3 到 10.10.10.1 的路径: 数据包经过两跳到达 10.10.10.1 网关。 1. 数据包首先发送到 router_100_101 连接 vlan101 的 interface(172.16.101.1)。2. 然后通过连接 ext_net 的 interface(10.10.10.2) 转发出去,最后到达 10.10.10.1。 当数据包从 router 连接外网的接口 qg-cf54d3ea-6a 发出的时候,会做一次 Source NAT,将包的源地址修改为 router 的接口地址 10.10.10.2,这样就能够保证目的端能够将应答的包发回给 router,然后再转发回源端 instance。 有关 Source NAT 的详细分析可以参考 Linux Bridge 中 router 的相关章节。 floating IP 通过 SNAT 使得 instance 能够直接访问外网,但外网还不能直接访问 instance。 直接访问 instance 指的是通信连接由外网发起,例如从外网 SSH instance。 如果需要从外网直接访问 instance,可以利用 floating IP。 Open vSwitch driver 环境中 floating IP 的实现与 Linux Bridge driver 完全一样: 都是通过在 router 提供网关的外网 interface 上配置 iptables NAT 规则实现。 有关 floating IP 的详细分析可以参考 Linux Bridge 中 floating IP 的相关章节。 至此,OVS 的路由服务就讨论完了,下一节我们将开始学习 Neutron VxLAN 的 OVS 实现。

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

创建 OVS 外部网络 ext_net - 每天5分钟玩转 OpenStack(144)

上一节完成连接外网的配置准备工作,今天就来创建 OVS 外部网络 ext_net。 进入 Admin -> Networks 菜单,点击 “Create Network” 按钮。 显示创建页面。 Provider Network Type 选择 “Flat”。 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。 下面查看控制节点网络结构的变化,执行 ovs-vsctl show: 上图所示,br-ex 与 br-int 通过 patch port “phy-br-ex” 和 “int-br-ex” 连接。 下一节我们将 ext_net 连接到 router_100_101 并验证与外网的连通性。

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

部署 instance 到 OVS vlan100 - 每天5分钟玩转 OpenStack(138)

上一节创建了 OVS vlan network vlan100,今天部署 instance 到该网络。launch 新的 instance “cirros-vm1”,网络选择 vlan100。 cirros-vm1 分配到的 IP 为 172.16.100.3。 cirros-vm1 被 schedule 到控制节点,其虚拟网卡也连接到 br-int。 虚拟网卡与 br-int 的连接方式与 local 和 flat 网络没有任何区别,不再赘述。 当前 vlan100 的结构如下: 继续用同样的方式 launch instance cirros-vm2,分配到的 IP 为 172.16.100.104。 cirros-vm2 被 schedule 到计算节点,虚拟网卡已经连接到 br-int。 因为计算节点上没有 hdcp 服务,所以没有相应的 tap 设备。 当前 vlan100 的结构如下: cirros-vm1(172.16.100.3) 与 cirros-vm2(172.16.100.4) 位于不同节点,通过 vlan100 相连,下面执行 PING 验证连通性。 在 cirros-vm1 控制台中执行 ping 172.16.100.4 如我们预料,ping 成功。下一节创建 vlan101 并部署 instance。

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

OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)

前面已经创建了两个 OVS local network,今天详细分析它们之间的连通性。 launch 新的 instance “cirros-vm3”,网络选择 second_local_net cirros-vm3 分配到的 IP 为 172.16.1.102 cirros-vm3 被 schedule 到控制节点,其虚拟网卡也连接到 br-int。 当前的控制节点上的网络结构如下: 下面我们讨论一个有趣的问题:cirros-vm3 能否 Ping 到 cirros-vm1 呢? 根据我们在 linux bridge 中学到的知识,既然 cirros-vm3 和 cirros-vm1 都连接到同一个网桥 br-int,那么它们之间应该是可以 Ping 通的。 但另一方面,根据 Neutron 的设计,不同 local 网络之间是无法通信的。那么事实到底是如何呢? 实验证明 cirros-vm3 无法 Ping 到 cirros-vm1。 下面我们需要解释同一个网桥上的 port 为什么不能通信。 让我们重新审视一下 br-int 上各个 port 的配置。 这次我们注意到,虚拟网卡和 DHCP 对应的 port 都有一个特殊的 tag 属性。 first_local_net 相关 port 其 tag 为 1; second_local_net 相关 port 其 tag 为 2。 玄机就在这里了: Open vSwitch 的每个网桥都可以看作一个真正的交换机,可以支持 VLAN,这里的 tag 就是 VLAN ID。 br-int 中标记 tag 1 的 port 和 标记 tag 2 的 port 分别属于不同的 VLAN,它们之间是隔离的。 需要特别说明的是: Open vSwitch 中的 tag 是内部 VLAN,用于隔离网桥中的 port,与物理网络中的 VLAN 没有关系。 我们将 tag 信息添加到网络结构图中,如下所示: 到这里,OVS local network 的内容已经讨论完了,下节开始学习 flat network。

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

将 instance 部署到 OVS Local Network - 每天5分钟玩转 OpenStack(130)

上一节创建了 OVS 本地网络 first_local_net,今天我们会部署一个 instance 到该网络并分析网络结构。launch 一个 instance,选择 first_local_net 网络 instance 部署成功,分配的 IP 地址为 172.16.1.3 底层网络发生了什么变化? 对于 instance “cirros-vm1”,Neutron 会在 subnet 中创建一个 port,分配 IP 和 MAC 地址,并将 port 分配给 cirros-vm1。 如上图所示,port 列表中增加了一个 port “(fc1c6ebb-719d)”,IP 为 172.16.1.3,点击 port 名称查看 MAC 信息。 我们可以先按照在 linux bridge driver 章节学到的知识推测一下: Open vSwitch driver 会如何将 cirros-vm1 连接到 first_local_net? 如果采用类似的实现方法,neutron-openvswitch-agent 会根据 port 信息创建 tap 设备 tapfc1c6ebb-71,并将其连接到 br-int 网桥,tapfc1c6ebb-71 就是 cirros-vm1 的虚拟网卡。 下面我们验证一下事实是否如此: cirros-vm1 部署到了控制节点,通过 ovs-vsctl show 查看 bridge 的配置: 非常遗憾,在 br-int 上并没有看到 tapfc1c6ebb-71,而是多了一个 qvofc1c6ebb-71。 目前我们并不知道 qvofc1c6ebb-71 是什么,我们再用 brctl show 查看一下 linux bridge 的配置: 这里我们看到有一个新建的网桥 qbrfc1c6ebb-71,上面连接了两个设备 qvbfc1c6ebb-71 和 tapfc1c6ebb-71。从命名上看,他们都应该与 cirros-vm1 的虚拟网卡有关。 通过 virsh edit 查看 cirros-vm1 的配置: 确实 tapfc1c6ebb-71 是 cirros-vm1 的虚拟网卡。 那么 linux bridge qbrfc1c6ebb-71 上的 qvbfc1c6ebb-71 设备与 Open vSwitch br-int 上的 qvofc1c6ebb-71 是什么关系呢? 下面的内容稍微需要一些技巧了。 我们用 ethtool -S 分别查看 qvbfc1c6ebb-71 和 qvofc1c6ebb-71 的 statistics。 原来 qvbfc1c6ebb-71 和 qvofc1c6ebb-71 都是 veth 设备,它们对应的另一端 veth 设备 的 index 分别是 12 和 13。 通过 ip a 命令找到 index 12 和 13 的设备。 到这里,相信有同学已经看出来了:qvbfc1c6ebb-71 和 qvofc1c6ebb-71 组成了一个 veth pair。我们之前介绍过,veth pair 是一种成对出现的特殊网络设备,它们象一根虚拟的网线连接两个网络设备。这里 qvbfc1c6ebb-71 和 qvofc1c6ebb-71 的作用就是连接网桥 qbrfc1c6ebb-71 和 br-int。 文字描述往往是不够直观的,下面我们将前面梳理好的信息通过图片展示出来。 由图所示,tapfc1c6ebb-71 通过 qbrfc1c6ebb-71 间接连接到 br-int。 那问题来了,为什么 tapfc1c6ebb-71 不能像左边的 DHCP 设备 tap7970bdcd-f2 那样直接连接到 br-int 呢? 其原因是: Open vSwitch 目前还不支持将 iptables 规则放在与它直接相连的 tap 设备上。 如果做不到这一点,就无法实现 Security Group 功能。 为了支持 Security Group,不得不多引入一个 Linux Bridge 支持 iptables。 这样的后果就是网络结构更复杂了,路径上多了一个 linux bridge 和 一对 veth pair 设备。 下节我们再部署一个 instance 到 first_local_network 并验证两个 instance 的连通性。

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

OVS 中的各种网络设备 - 每天5分钟玩转 OpenStack(128)

上一节我们启用了 Open vSwitch,本节将查看当前的网络状态并介绍 Open vSwitch 涉及的各种网络设备 初始网络状态 查看一下当前的网络状态。 控制节点 ifconfig 显示控制节点上有三个网桥 br-ex,br-int 和 br-tun。 从命名上看我们大致能猜出他们的用途: br-ex连接外部(external)网络的网桥 br-int集成(integration)网桥,所有 instance 的虚拟网卡和其他虚拟网络设备都将连接到该网桥。 br-tun隧道(tunnel)网桥,基于隧道技术的 VxLAN 和 GRE 网络将使用该网桥进行通信。 这些网桥都是 Neutron 自动为我们创建的,但是通过 brctl show 命令却看不到它们。 这是因为我们使用的是 Open vSwitch 而非 Linux Bridge,需要用 Open vSwitch 的命令 ovs-vsctl show 查看,如下图所示: 输出内容后面会详细讲解。 计算节点 计算节点上也有 br-int 和 br-tun,但没有 br-ext。 这是合理的,因为发送到外网的流量是通过网络节点上的虚拟路由器转发出去的,所以 br-ext 只会放在网络节点(devstack-controller)上。 了解 Open vSwitch 环境中的各种网络设备 在 Open vSwitch 环境中,一个数据包从 instance 发送到物理网卡大致会经过下面几个类型的设备: tap interface 命名为 tapXXXX。 linux bridge 命名为 qbrXXXX。 veth pair 命名为 qvbXXXX, qvoXXXX。 OVS integration bridge 命名为 br-int。 OVS patch ports 命名为 int-br-ethX 和 phy-br-ethX(X 为 interface 的序号)。 OVS provider bridge 命名为 br-ethX(X 为 interface 的序号)。 物理 interface 命名为 ethX(X 为 interface 的序号)。 OVS tunnel bridge 命名为 br-tun。 OVS provider bridge 会在 flat 和 vlan 网络中使用;OVS tunnel bridge 则会在 vxlan 和 gre 网络中使用。 后面会通过实例详细讨论这些设备。 Open vSwitch 支持 local, flat, vlan, vxlan 和 gre 所有五种 network type。 vxlan 和 gre 非常类似,接下来我们将深入学习 Open vSwitch 是如何实现 local, flat, vlan 和 vlxan 的。 下一节将从 local network 开始。

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

在 ML2 中配置 VXLAN - 每天5分钟玩转 OpenStack(110)

上一节我们介绍了 VXLAN 的基本概念,今天介绍如何在 ML2 中启用 VXLAN。 在 /etc/neutron/plugins/ml2/ml2_conf.ini 设置 vxlan network 相关参数。 tenant_network_types = vxlan 指定普通用户创建的网络类型为 vxlan。 这里还使用了一个名为 “l2population” mechanism driver,我们放到后面单独介绍。 然后指定 vxlan 的范围。 上面的配置定义了 vxlan vni 的范围是 1001 - 2000。 这个范围是针对普通用户在自己的租户里创建 vxlan network 的范围。 因为普通用户创建 network 时并不能指定 vni,Neutron 会按顺序自动从这个范围中取值。 对于 admin 则没有 vni 范围的限制,admin 可以创建 vni 范围为 1-16777216 的 vxlan network。 接着需要在 [VXLAN] 中配置 VTEP。控制节点 devstack_controller 的 ml2_conf.ini 配置如下: 计算节点 devstack_compute01 的 ml2_conf.ini 配置如下: local_ip 指定节点上用作 VTEP 的 IP 地址。 devstack_controller 的 VTEP IP 是 166.66.16.10,网卡为 eth1。 devstack_compute01 的 VTEP IP 是 166.66.16.11,网卡为 eth1。注意:作为准备工作,这两个 VTEP IP 需要提前配置到节点的 eht1 上,Neutron 并不会帮我们分配这个 IP。下节我们将开始创建第一个 VXLAN。

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

访问外网 ML2 的配置 - 每天5分钟玩转 OpenStack(103)

通过 router 可以实现位于不同 vlan 中的 instance 之间的通信。 接下来要探讨的问题是 instance 如何与外部网络通信。 这里的外部网络是指的租户网络以外的网络。 租户网络是由 Neutron 创建和维护的网络。 外部网络不由 Neutron 创建。如果是私有云,外部网络通常指的是公司 intranet;如果是公有云,外部网络通常指的是 internet。 具体到我们的实验网络环境: 计算节点和控制节点 eth1 提供的是租户网络,IP 段租户可以自由设置。 控制节点 eth2 连接的就是外部网络,IP 网段为 10.10.10.0/24。 如下图所示: 配置准备 为了连接外部网络,需要在配置文件中告诉 Neutron 外部网络的类型以及对应的物理网卡。 因为外部网络是已经存在的物理网络,一般都是 flat 或者 vlan 类型。 这里我们将外部网络的 label 命名为 “external”。 如果类型为 flat,控制节点 /etc/neutron/plugins/ml2/ml2_conf.ini 配置如下: 如果类型为 vlan,配置如下: 修改配置后,需要重启 neutron 的相关服务。 在我们的网络环境中,外部网络是 flat 类型。 下一节我们将演示如何创建外部网络 ext_net。

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

将 instance 连接到 vlan100- 每天5分钟玩转 OpenStack(95)

上一节我们创建了 vlan100,今天将部署两个 instance 到 vlan 并验证其连通性。 同时我们也将讨论底层网络结构的变化。 launch 新的 instance “cirros-vm1”,网络选择 vlan100。 cirros-vm1 分配到的 IP 为 172.16.100.3。 cirros-vm1 被 schedule 到控制节点,对应的 tap 设备为 tapc1875c7f-cb,并且连接到 bridge。 当前 vlan100 的结构如下。 继续用同样的方式 launch instance cirros-vm2,分配到的 IP 为 172.16.100.104。 cirros-vm2 被 schedule 到计算节点,对应的 tap 设备为 tap238437b8-50,并且连接到 bridge。 因为计算节点上没有 hdcp 服务,所以没有相应的 tap 设备。 另外,bridge 的名称与控制节点上一致,都是 brq3fcfdb98-9d,表明是同一个 network。 当前 vlan100 的结构如下: cirros-vm1(172.16.100.3) 与 cirros-vm2(172.16.100.4) 位于不同节点,通过 vlan100 相连,下面执行 PING 验证连通性。 在 cirros-vm1 控制台中执行 ping 172.16.100.4。 如我们预料,ping 成功。 下一节将继续创建 vlan101 并观察新的网络结构变化。

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

将 instance 连接到 flat_net - 每天5分钟玩转 OpenStack(88)

上一节我们创建了 "flat_net",本节将在此网络中部署 instance 并验证连通性。 launch 新的 instance “cirros-vm1”,选择网络 falt_net。 cirros-vm1 分配到的 IP 为 172.16.1.103。 cirros-vm1 被 schedule 到控制节点,对应的 tap 设备为 tapc1875c7f-cb,并且已经连接到 bridge。 当前 flat_net 的结构如下: 继续用同样的方式 launch instance cirros-vm2,分配到的 IP 为 172.16.1.104。 cirros-vm2 被 schedule 到计算节点,对应的 tap 设备为 tapfb3fb197-24,并且连接到 bridge。 这里有两点需要提醒: 因为计算节点上没有 hdcp 服务,所以 brctl show 中没有 dhcp 对应的 tap 设备。 计算节点上 bridge 的名称与控制节点上一致,都是 brqf153b42f-c3,表明是同一个 network。 当前 flat_net 的结构如下: cirros-vm1(172.16.1.103) 与 cirros-vm2(172.16.1.104) 位于不同节点,通过 flat_net 相连,下面执行 PING 验证连通性。 在 cirros-vm1 控制台中执行 ping 172.16.1.104 如我们预料,ping 成功。flat network 至此告一段落。下节将开始深入讨论之前多次涉及的环节:instance 如何从 Neutron 的 DHCP 服务获得 IP?

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

- 每天5分钟玩转 OpenStack(43)

Rebuild 可以恢复损坏的 instance。 那如果是宿主机坏了怎么办呢? 比如硬件故障或者断电造成整台计算节点无法工作,该节点上运行的 instance 如何恢复呢? 用 Shelve 或者 Migrate 可不可以? 很不幸,这两个操作都要求 instance 所在计算节点的 nova-compute 服务正常运行。 幸运的是,还有 Evacuate 操作。 Evacuate 可在 nova-compute 无法工作的情况下将节点上的 instance 迁移到其他计算节点上。但有个前提: Instance 的镜像文件必须放在共享存储上。 下面是 Evacuate instance 的流程图 向 nova-api 发送请求 nova-api 发送消息 nova-scheduler 执行调度 nova-scheduler 发送消息 nova-compute 执行操作 下面我们详细讨论每一个步骤。 向 nova-api 发送请求 我们的实验场景如下: Instance c2 运行在 devstack-compute1 上。 通过断电模拟计算节点故障,然后执行 Evacuate 操作恢复 instance c2。 目前 Evacuate 只能通过 CLI 执行。 这里需要指定 --on-shared-storage 这个参数 查看日志 /opt/stack/logs/n-api.log nova-api 发送消息 nova-api 向 Messaging(RabbitMQ)发送了一条消息:“Evacuate 这个 Instance” 查看源代码 /opt/stack/nova/nova/compute/api.py,方法是 evacuate。 大家注意到没有,evacuate 实际上是通过 rebuild 操作实现的。 这是可以理解的,因为 evacuate 是用共享存储上 instance 的镜像文件重新创建虚机 nova-scheduler 执行调度 nova-scheduler 收到消息后,会为 instance 选择合适的计算节点。 查看日志 /opt/stack/logs/n-sch.log。 nova-scheduler 最后选择在 devstack-controller 计算节点上重建 instance。 nova-scheduler 发送消息 nova-scheduler 发送消息,通知计算节点可以创建 instance 了。 源代码在 /opt/stack/nova/nova/scheduler/filter_scheduler.py 第 95 行,方法为 select_destinations。 nova-compute 执行操作 计算节点上的工作是用共享存储上的镜像文件重建 instance。 日志在 devstack-controller:/opt/stack/logs/n-cpu.log。 为instance分配资源 使用共享存储上的镜像文件 启动 instance Evacuate 操作完成后,instance 在 devstack-controller 上运行。 以上是 Evacuate 操作的详细分析。至此,我们已经学习完 Nova 所有的操作,下一节将用一张图总结这些操作的用途和使用场景。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册