4.1 创建云主机(网络)

系列 - 云计算运行
摘要
在 OpenStack 环境中,网络是云主机通信的基础。本节将带大家创建两种常见的网络:提供商网络(Provider Network)和自服务网络(Self-service Network),并为它们配置路由器以打通网络连通性。
节点 IP 提示
本次实验中,控制节点 IP 为 192.168.30.100,计算节点 IP 为 192.168.30.200。Provider 网络的网段配置需要与物理网络网段(192.168.30.0/24)保持一致。

Provider 网络是由管理员创建的底层物理网络映射。云主机连接到该网络后,可以直接获取并使用物理网络的 IP,与物理机处于相同的网络环境中,常用于提供外部网络访问。

1)获取管理员权限

执行 admin-openstack.sh 脚本,获取管理员的命令行执行权限:

bash

source ./admin-openstack.sh

2)创建 provider 网络

执行以下命令创建 provider 网络:

bash

openstack network create --share --external \
--provider-physical-network provider \
--provider-network-type flat provider
命令参数详解
  • --share:允许所有的项目(Project)都可以使用这个虚拟网络。
  • --external:将虚拟网络定义为外部网络(通常作为路由器的外网网关)。如果要创建内部网络,则可以使用 --internal
  • --provider-physical-network provider:指定该虚拟网络映射到的底层物理网络名称(即在 Neutron 配置文件中定义好的物理网络映射名,本例中命名为 provider)。
  • --provider-network-type flat:指定提供商网络的类型为 flatFlat 意为“扁平网络”,意味着没有 VLAN 标签隔离,所有该网络上的虚拟机处于同一个二层广播域,直接桥接到物理网络上。

3)创建子网

为 provider 网络创建子网:

bash

openstack subnet create --network provider \
--allocation-pool start=192.168.30.20,end=192.168.30.60 \
--dns-nameserver 223.5.5.5 --gateway 192.168.30.2 \
--subnet-range 192.168.30.0/24 provider
命令参数详解
  • --allocation-pool:设置 IP 地址池的起止范围,云主机将从中自动获取 IP。
  • --dns-nameserver:设置 DNS 服务器。
  • --gateway:设置物理网络的网关(根据实际环境,通常是 .1、.2 或 .254)。
  • --subnet-range:设置该子网的网段。

Self-service 网络(自服务网络)是租户自己创建的内部隔离网络。外部无法直接访问它,需要通过路由器进行网络地址转换(NAT)。

1)获取普通用户权限

执行 demo-openstack.sh 脚本,获取 myuser 用户的命令行执行权限:

bash

source ./demo-openstack.sh

2)创建自服务网络

bash

openstack network create selfservice

3)创建子网

这里我们为其分配 172.16.1.0/24 的内部私有网段:

bash

openstack subnet create --network selfservice \
--dns-nameserver 223.5.5.5 --gateway 172.16.1.1 \
--subnet-range 172.16.1.0/24 selfservice

4)创建路由器

路由器用于连接内外网,实现不同网络之间的通信:

bash

openstack router create router

5)将 Self-service 网络的子网添加到路由器端口

这一步相当于把路由器的内部接口插到了自服务网络上:

bash

openstack router add subnet router selfservice

6)设置路由器的 provider 网络网关

这一步将路由器的外部接口连到了 provider 网络,使其具备访问外网的能力:

bash

openstack router set router --external-gateway provider

网络创建并连接完毕后,我们需要验证网络是否正常工作。

1)获取管理员权限

再次切换回管理员权限:

bash

source ./admin-openstack.sh

2)查看网络命名空间

查询结果应包含 1 个 qrouter 命名空间(路由器)和 2 个 qdhcp 命名空间(因为我们创建了两个子网,每个子网对应一个 DHCP 服务):

bash

ip netns

输出示例:

text

qrouter-6f4492aa-935c-4c55-a3e0-35087f214e59 (id: 2)
qdhcp-2837cf7e-b575-4bae-9d64-32eda4cc5f45 (id: 1)
qdhcp-4d4404cc-7378-45b8-ae09-bb8ced5c507f (id: 0)

3)查找路由器的外网 IP

列出路由器上的端口,以确定它在 provider 网络上获取的外部网关 IP 地址:

bash

openstack port list --router router
注意
在命令的输出中,找到属于 provider 网络的那一行,记下其分配的 IP 地址(例如 192.168.30.26),在下一步的连通性测试中将会用到。

4)测试连通性

从 controller 节点或物理机上 ping 刚刚查到的路由器外网 IP,验证网络打通情况。

a. controller 节点 ping 路由器外网 IP(假设为 192.168.30.26)

bash

ping -c 4 192.168.30.26

输出示例:

text

PING 192.168.30.26 (192.168.30.26) 56(84) bytes of data.
64 bytes from 192.168.30.26: icmp_seq=1 ttl=64 time=0.273 ms
64 bytes from 192.168.30.26: icmp_seq=2 ttl=64 time=0.064 ms
64 bytes from 192.168.30.26: icmp_seq=3 ttl=64 time=0.070 ms
64 bytes from 192.168.30.26: icmp_seq=4 ttl=64 time=0.030 ms

--- 192.168.30.26 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 0.030/0.109/0.273/0.096 ms

b. 物理机 ping 路由器外网 IP

打开物理机(你的本地电脑)的命令行工具进行测试:

cmd

ping 192.168.30.26

输出示例:

text

正在 Ping 192.168.30.26 具有 32 字节的数据:
来自 192.168.30.26 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.30.26 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.30.26 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.30.26 的回复: 字节=32 时间<1ms TTL=64

192.168.30.26 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 1ms,平均 = 0ms
实验成功
如果都能 ping 通,说明外部提供商网络和虚拟路由器已经配置成功,接下来就可以准备创建并连接云主机了!