命令行配置OpenStack使实例能够联通外网

您所在的位置:网站首页 ubuntu怎么连外网 命令行配置OpenStack使实例能够联通外网

命令行配置OpenStack使实例能够联通外网

2023-06-09 23:31| 来源: 网络整理| 查看: 265

目录

一、宿主机配置

二、虚拟网络配置

1. 修改netplan配置文件

2. 配置OpenStack

(1)配置认证

(2)配置neutron

3. 创建虚拟网络

(1)flat类型的网络

(2)vxlan类型的网络

4. 将实例关联到网络

 5. 创建虚拟路由器

6. 配置浮动ip

7. 管理安全组

8. 在宿主虚拟机中管理NAT

参考

使用OpenStack管理和配置虚拟网络,并使创建的实例能够通过宿主机网卡连接到外网。使用的宿主机为Ubuntu 20.04 VMWare虚拟机。

OpenStack安装时,选择安装了horizon组件,然而并不能正常显示网络的所有功能,如虚拟路由器和floating ip等。这里全部使用命令行的形式,对OpenStack的虚拟网络环境进行配置,以实现能够让虚拟机实例访问外网的需求。

一、宿主机配置

宿主机为Ubuntu 20.04.6 LTS,安装了OpenStack的VMWare虚拟机。宿主机配置至少两个网卡。其中网卡1(ens33)为NAT模式,IP地址段为192.168.50.0/24,用于对宿主机的管理,不连接虚拟网络。网卡2(ens38)为仅主机模式,IP地址段为192.168.150.0/24,用于连接虚拟网络。

二、虚拟网络配置 1. 修改netplan配置文件 sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.bak sudo vim /etc/netplan/01-network-manager-all.yaml

修改网络配置文件为指定静态IP地址,以方便后续虚拟网络的创建。这里将ens33网卡配置为192.168.50.22,ens38网卡配置为192.168.150.22,并关闭DHCP服务和NetworkManager,交由OpenStack管理网络。修改好后,重启宿主机。

# Do not let NetworkManager manage all devices on this system network: ethernets: ens33: # 配置的网卡的名称 addresses: [192.168.50.22/24] # 配置的静态ip地址和掩码 dhcp4: false # 关闭dhcp4 optional: true gateway4: 192.168.50.2 # 网关地址 nameservers: addresses: [192.168.50.2] ens38: addresses: [192.168.150.22/24] dhcp4: false optional: true gateway4: 192.168.150.1 nameservers: addresses: [192.168.150.1] version: 2 # renderer: NetworkManager

2. 配置OpenStack (1)配置认证

若无此步骤,使用openstack命令时会报错提示:Missing value auth-url required for auth plugin password

# 认证配置 source admin-openrc cat admin-openrc # 输出 export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=password export OS_AUTH_URL=http://openstack:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 (2)配置neutron

配置ml2以使其支持对网卡ens38的flat类型网络创建。其中,provider和external都是标识符名称,可按需求更改。ens33和ens38是标识符对应的网卡名称。当创建flat网络时,需使用此标识符名称来对应所创建网络连接到的网卡。

# 修改ml2配置文件 sudo vim /etc/neutron/plugins/ml2/ml2_conf.ini # 修改内容 [ml2] type_drivers = flat,vlan,vxlan tenant_network_types = flat,vxlan extension_drivers = port_security [ml2_type_flat] flat_networks = provider,external # 修改linux bridge配置文件 sudo vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini # 修改内容 [linux_bridge] physical_interface_mappings = provider:ens33,external:ens38 3. 创建虚拟网络

为使虚拟机实例能够通过物理网卡连接到外部网络,需要创建两个虚拟网络。网络总体架构图如图所示。通过flat类型的网络连接网卡、vxlan类型的网络连接实例,并通过虚拟路由器相连,实现实例与外网的网络通信链路。

(1)flat类型的网络

此虚拟网络直接连接并独占一个物理网卡。

# 创建网络,名为flat-network openstack network create flat-network --project admin --external --share --provider-network-type=flat --provider-physical-network=external # 创建子网,并关联到flat-network openstack subnet create flat-subnet --network flat-network --subnet-range 192.168.150.0/24 --no-dhcp --gateway 192.168.150.1 --dns-nameserver 114.114.114.114 --allocation-pool start=192.168.150.100,end=192.168.150.200 (2)vxlan类型的网络

此虚拟网络创建在宿主机内部,并将实例创建在此网络中。

# 创建网络,名为vxlan-network openstack network create vxlan-network --project admin --external --share --provider-network-type=vxlan # 创建子网,并关联到vxlan-network openstack subnet create vxlan-subnet --network vxlan-network --subnet-range 10.1.1.0 /24 --dhcp --gateway 10.1.1.1 --dns-nameserver 114.114.114.114 --allocation-pool start=10.1.1.100,end=10.1.1.200

4. 将实例关联到网络

宿主机上提前创建了cirros的镜像。从镜像和实例类型创建实例,并关联到网络。

# 创建一个新的实例并关联到网络 openstack server create test-cirros --image cirros --flavor instance_type --network vxlan-network # 将一个已有的实例关联到网络 openstack server add network test-cirros vxlan-network # 查看实例信息 openstack server show test-cirros

此时,实例在vxlan网络中已经拥有一个ip,这里分配到了10.1.1.160。通过horizon提供的控制台连接到test-cirros,执行ifconfig,可以看到已经成功分配到ip。 

 5. 创建虚拟路由器

创建一个将vxlan网络和flat网络相连接的虚拟路由器。

# 创建一个名为external-router的虚拟路由器 openstack router create external-router # 路由器作为vxlan网络子网的网关 openstack router add subnet external-router vxlan-subnet # 路由器作为flat子网的普通网络节点,连接端口为路由器向外部网络发送报文的网关 openstack router set external-router --external-gateway flat-network # 查看路由器信息 openstack router show external-router

可以看到,路由器已经成功连接到两个网络。此时在test-cirros实例中,ping vxlan网络的网关(10.1.1.1)或路由器在flat网络中的ip(192.168.150.118),均是可以ping通的。

6. 配置浮动ip

 这里为test-cirros实例分配一个在外网(flat网络)中的浮动ip。此ip绑定到test-cirros,即外部所有对此ip的访问都会被导向虚拟内部的实例。以使外部网络的数据包能够返回到实例中,实现双向连接。

# 在flat网络中创建一个浮动ip openstack floating ip create flat-network # 查看创建的浮动ip openstack floating ip list # 浮动ip:192.168.150.103 # 查看实例所连接网络的port id openstack port list --server test-cirros # port id:7e93f556-0eb9-415d-970a-3d10dea46a9c # 关联floating ip到port openstack floating ip set --port 7e93f556-0eb9-415d-970a-3d10dea46a9c 192.168.150.103

此时浮动ip(192.168.150.103)已被设置到实例。在实例内部ping宿主机网卡ip,已经可以ping通。然而,在宿主机中无法ping通实例。这是因为安全组设置阻拦了外部网络向实例发送的报文。

7. 管理安全组

需创建一个允许外部报文发送到实例的安全组。安全起见,这里设置了允许ICMP报文进入和SSH连接进入。其余设置保持默认不变。 

# 建立一个新的安全组vlan-cirros-group openstack security group create vlan-cirros-group # 允许ICMP报文进入 openstack security group rule create --ingress --protocol icmp vlan-cirros-group # 允许目的为22端口的TCP报文进入,即SSH openstack security group rule create --ingress --protocol tcp --dst-port 22 vlan-cir ros-group # 查看安全组 openstack security group show vlan-cirros-group # 将实例关联到安全组 openstack server remove security group test-cirros default openstack server add security group test-cirros vlan-cirros-group

至此,外网也可以通过访问floating ip连接到实例。 

8. 在宿主虚拟机中管理NAT

这一步骤是因为宿主机(Ubuntu 20.04)使用的是VMWare 虚拟机。虚拟机只支持将一个子网网段设为NAT模式,这里将其连接到了网卡ens33。由于不想要干扰宿主机访问外网,使用了仅主机模式的子网网卡ens38作为虚拟网络连接外网的物理网卡。仅主机模式无法通过物理机(Windows)访问外网,因此目标地址为外网的数据报文均会被路由到ens33网卡转发,并顺利到达外网访问目标。然而,外网的回应报文返回物理机时,物理机并不知道要将其发回VMWare NAT模式的虚拟网卡。这就导致虽然访问链路畅通,但报文无法得到回应。

 

通过截包才发现了问题的原因。这里采用的解决方法是,在宿主机中加入一条SNAT规则:

# 将源为192.168.150.0/24的数据包,源地址转换为192.168.50.22 sudo iptables -t nat -A POSTROUTING -o ens33 -s 192.168.150.0/24 -j SNAT --to 192.168.50.22

此规则将flat虚拟网络中ip段发出的报文进行了源地址转换,改为了连接VMWare NAT模式虚拟子网ens33网卡的ip地址。至此,外网发回的通信报文就可以顺利路由到达宿主机,虚拟网络中的实例真正意义上可以与外网联通。如果实际上使用的是NAT模式的宿主机物理网卡连接虚拟网络,或是在实际的多网口架构服务器上部署,则不需要这个步骤即可访问外网。

参考

Command List — OpenStack Command Line Client 6.3.0.dev52 documentation

每天5分钟玩转 OPENSTACK系列教程 – Jimmy's Blog

Linux防火墙iptables之SNAT与DNAT_linux snat_不回头的蛙的博客-CSDN博客



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3