Ubuntu16手动安装OpenStack——创建实例

文章目录
  1. 1. 目标
  2. 2. 说明
  3. 3. 网卡配置
  4. 4. 创建子网
  5. 5. 添加用户
  6. 6. 创建实例
    1. 6.1. 环境准备
    2. 6.2. 创建实例
    3. 6.3. 访问实例
  7. 7. 网络问题
    1. 7.1. 网桥支持
    2. 7.2. 网卡配置
    3. 7.3. 修改ip
  8. 8. 访问实例
  9. 9. 后记

目标

完成了《Ubuntu16手动安装OpenStack——neutron篇》,意味着keystone、glance、nova和neutron都已经安装完成,也就是说,openstack最小安装已经完成。在安装horizon、cinder和swift之前,我们先来通过命令行创建一个实例,验证一下之前的安装。

主要参考OpenStack Queens : Add UsersOpenStack Queens : Add UsersOpenStack Queens : Boot Instances

说明

本文操作全部都是在控制节点。
为了避免权限问题,建议切换到root用户进行操作(否则要加很多sudo)。
sudo -i

网卡配置

参考Openstack的网卡设置和和OpenStack Networking Tutorial: Single-host FlatDHCPManager,配置eth2网卡。

1、查看当前网络,ip add

route -nbrctl show

2、vim /etc/network/interfaces,添加:

1
2
3
4
5
6
auto eth2
iface eth2 inet manual
up ifconfig $IFACE 0.0.0.0 up
up ifconfig $IFACE promisc
#iface eth2 inet manual
#up ifconfig eth2 up

3、启用网卡,ifup eth2

创建子网

1、vi /etc/neutron/plugins/ml2/ml2_conf.ini,如下修改:

1
2
3
# line 181: add
[ml2_type_flat]
flat_networks = physnet1

2、vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini,如下修改:

1
2
3
4
5
# line 147: add
[linux_bridge]
physical_interface_mappings = physnet1:eth2
# line 208: uncomment and change
enable_vxlan = false

3、重启neutron-linuxbridge-agent
systemctl restart neutron-linuxbridge-agent

4、获取projectID
. admin-openrc

projectID=$(openstack project list | grep service | awk '{print $2}')

5、创建名为sharednet1的网络

1
2
openstack network create --project $projectID \
--share --provider-network-type flat --provider-physical-network physnet1 sharednet1

6、在sharednet1中创建子网10.0.0.0/24

1
2
3
4
openstack subnet create subnet1 --network sharednet1 \
--project $projectID --subnet-range 10.0.0.0/24 \
--allocation-pool start=10.0.0.200,end=10.0.0.254 \
--gateway 10.0.0.1 --dns-nameserver 10.0.0.10

7、查看网络
openstack network list

openstack subnet list

添加用户

首先使admin环境生效,. admin-openrc

1、添加siat项目
openstack project create --domain default --description "SIAT Project" siat

2、添加voidking用户,密码为openstack
openstack user create --domain default --project siat --password openstack voidking

3、添加clouduser角色
openstack role create clouduser

4、给voidking用户添加clouduser角色
openstack role add --project siat --user voidking clouduser

5、因为cirros需要的资源很少,所以创建一个类型模板m1.tiny
openstack flavor create --id 0 --vcpus 1 --ram 256 --disk 5 m1.tiny

创建实例

环境准备

1、vi ~/voidkingrc,创建voidking环境脚本,内容如下:

1
2
3
4
5
6
7
8
9
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=siat
export OS_USERNAME=voidking
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='\u@\h \W(keystone)\$ '

2、使环境生效
. voidkingrc

3、查看类型模板
openstack flavor list

4、查看可用镜像
openstack image list

5、查看可用网络
openstack network list

6、创建安全组
openstack security group create secgroup01

7、查看安全组
openstack security group list

8、创建ssh密钥
ssh-keygen -q -N ""

密钥文件保存在/home/root/.ssh/目录下。

9、添加公钥
openstack keypair create --public-key ~/.ssh/id_rsa.pub vkkey

10、查看公钥
openstack keypair list

创建实例

1、给netID赋值
netID=$(openstack network list | grep sharednet1 | awk '{ print $2 }')

2、创建实例

1
2
3
openstack server create --flavor m1.tiny \
--image cirros --security-group secgroup01 \
--nic net-id=$netID --key-name vkkey cirros0

3、查看实例
openstack server list

如上图,已经成功启动实例,ip为10.0.0.206,nice。

PS:删除实例命令,openstack server delete cirros0

访问实例

配置安全组的安全设置,以便使用SSH和ICMP进行访问。

1、设置允许ICMP
openstack security group rule create --protocol icmp --ingress secgroup01

2、设置允许ssh
openstack security group rule create --protocol tcp --dst-port 22:22 secgroup01

3、查看安全组规则
openstack security group rule list

4、访问测试
ping 10.0.0.206 -c3

ping不通,看来网络出了问题,等会再解决这个问题。

5、查看vnc的url,并复制该url
openstack console url show cirros0

6、url中的controller替换为192.168.56.110,在浏览器中打开

顺利访问,可以看到,cirros0的ip为192.168.56.102,难怪10.0.0.206无法ping通。

控制节点上,ping 192.168.56.102,依然不通。
vnc中,ping 192.168.56.110,也不通。

网络问题

网桥支持

Configure the Linux bridge agent一节中,提到过要启用网桥支持,那就启用网桥试试。

1、查看ip转发
cat /proc/sys/net/ipv4/ip_forward
如果值为0,那么改为1。

2、启用网桥支持
vim /etc/sysctl.conf,添加

1
2
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

3、使配置生效
sysctl -p

修改后,依然无法ping通10.0.0.206。

网卡配置

1、查看ip
ip add

如上图,和本文开始时相比,多了三个接口。

2、查看网桥
brctl show

3、vim /etc/network/interfaces,添加

1
2
3
4
5
6
auto brqedda68f7-72
iface brqedda68f7-72 inet static
address 10.0.0.1
netmask 255.255.255.0
bridge_stp off
bridge_fd 0

然后启用brqedda68f7-72端口,ifup brqedda68f7-72

或者不配置interfaces,直接执行ifconfig brqedda68f7-72 10.0.0.1/24 up

5、查看网络
ip add

route -n

不过,依然无法ping通10.0.0.206。毕竟,cirros0的ip不是10.0.0.206,而是192.168.56.102。这个ip,明显是通过VirtualBox分配的,和虚拟机在同一个网段。

修改ip

既然cirros0的ip不对,那就给它手动修改一下,好主意。
1、通过vnc登录cirros0

2、sudo vi /etc/network/interfaces,修改eth0的配置为:

1
2
3
4
auto eth0
iface eth0 inet static
address 10.0.0.206
netmask 255.255.255.0

3、重启eth0
sudo ifdown eth0

sudo ifup eth0

4、在控制节点测试连接
ping 10.0.0.206 -c3

至此,问题解决。

访问实例

1、cirros当前只支持密码访问:
ssh cirros@10.0.0.206,输入密码gocubsgo。

登录后执行ls .ssh,并没有authorized_keys文件,看来创建实例时并没有注入密钥,不知道什么原因。

2、在控制节点,添加密钥到cirros0
ssh-copy-id -i .ssh/id_rsa.pub -p 22 cirros@10.0.0.206

3、用密钥测试登录
ssh cirros@10.0.0.206 -i .ssh/id_rsa

登录成功。

4、如果重启了控制节点,那么需要手动启动cirros0
openstack server start cirros0

5、vnc的token也会改变,所以要重新获取
openstack console url show cirros0

后记

至此,已经完成了吗?想到一些问题:

  • cirros0理论上应该通过浮动ip进行访问,我们这种直接访问是闹哪样?
  • 以后每次创建实例,都要通过vnc重新配置ip?
  • 以后每次创建实例,都要手动添加密钥?

也许是因为VirtualBox网卡分配不对,也许是因为在虚拟机中安装,也许是因为控制节点网络配置不对。。。不管了,反正创建实例完成,其他问题放在以后的文章中解决。