1. 目标
完成了《Ubuntu16手动安装OpenStack——neutron篇》,意味着keystone、glance、nova和neutron都已经安装完成,也就是说,openstack最小安装已经完成。在安装horizon、cinder和swift之前,我们先来通过命令行创建一个实例,验证一下之前的安装。
主要参考OpenStack Queens : Add Users、OpenStack Queens : Add Users 和 OpenStack Queens : Boot Instances。
2. 说明
本文操作全部都是在控制节点。
为了避免权限问题,建议切换到root用户进行操作(否则要加很多sudo)。sudo -i
3. 网卡配置
参考Openstack的网卡设置和和OpenStack Networking Tutorial: Single-host FlatDHCPManager,配置eth2网卡。
1、查看当前网络,ip add
route -n
,brctl show
2、vim /etc/network/interfaces
,添加:
1 | auto eth2 |
3、启用网卡,ifup eth2
4. 创建子网
1、vi /etc/neutron/plugins/ml2/ml2_conf.ini
,如下修改:
1 | # line 181: add |
2、vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
,如下修改:
1 | # line 147: add |
3、重启neutron-linuxbridge-agentsystemctl restart neutron-linuxbridge-agent
4、获取projectID. admin-openrc
projectID=$(openstack project list | grep service | awk '{print $2}')
5、创建名为sharednet1的网络
1 | openstack network create --project $projectID \ |
6、在sharednet1中创建子网10.0.0.0/24
1 | openstack subnet create subnet1 --network sharednet1 \ |
7、查看网络openstack network list
openstack subnet list
5. 添加用户
首先使admin环境生效,. admin-openrc
。
1、添加siat项目openstack project create --domain default --description "SIAT Project" siat
2、添加voidking用户,密码为openstackopenstack 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.tinyopenstack flavor create --id 0 --vcpus 1 --ram 256 --disk 5 m1.tiny
6. 创建实例
6.1. 环境准备
1、vi ~/voidkingrc
,创建voidking环境脚本,内容如下:
1 | export OS_PROJECT_DOMAIN_NAME=default |
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
6.2. 创建实例
1、给netID赋值netID=$(openstack network list | grep sharednet1 | awk '{ print $2 }')
2、创建实例
1 | openstack server create --flavor m1.tiny \ |
3、查看实例openstack server list
如上图,已经成功启动实例,ip为10.0.0.206,nice。
PS:删除实例命令,openstack server delete cirros0
6.3. 访问实例
配置安全组的安全设置,以便使用SSH和ICMP进行访问。
1、设置允许ICMPopenstack security group rule create --protocol icmp --ingress secgroup01
2、设置允许sshopenstack 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,并复制该urlopenstack 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
,也不通。
7. 网络问题
7.1. 网桥支持
Configure the Linux bridge agent一节中,提到过要启用网桥支持,那就启用网桥试试。
1、查看ip转发cat /proc/sys/net/ipv4/ip_forward
如果值为0,那么改为1。
2、启用网桥支持vim /etc/sysctl.conf
,添加
1 | net.bridge.bridge-nf-call-iptables = 1 |
3、使配置生效sysctl -p
修改后,依然无法ping通10.0.0.206。
7.2. 网卡配置
1、查看ipip add
如上图,和本文开始时相比,多了三个接口。
2、查看网桥brctl show
3、vim /etc/network/interfaces
,添加
1 | auto brqedda68f7-72 |
然后启用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分配的,和虚拟机在同一个网段。
7.3. 修改ip
既然cirros0的ip不对,那就给它手动修改一下,好主意。
1、通过vnc登录cirros0
2、sudo vi /etc/network/interfaces
,修改eth0的配置为:
1 | auto eth0 |
3、重启eth0sudo ifdown eth0
sudo ifup eth0
4、在控制节点测试连接ping 10.0.0.206 -c3
至此,问题解决。
8. 访问实例
1、cirros当前只支持密码访问:ssh cirros@10.0.0.206
,输入密码gocubsgo。
登录后执行ls .ssh
,并没有authorized_keys文件,看来创建实例时并没有注入密钥,不知道什么原因。
2、在控制节点,添加密钥到cirros0ssh-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、如果重启了控制节点,那么需要手动启动cirros0openstack server start cirros0
5、vnc的token也会改变,所以要重新获取openstack console url show cirros0
9. 后记
至此,已经完成了吗?想到一些问题:
- cirros0理论上应该通过浮动ip进行访问,我们这种直接访问是闹哪样?
- 以后每次创建实例,都要通过vnc重新配置ip?
- 以后每次创建实例,都要手动添加密钥?
也许是因为VirtualBox网卡分配不对,也许是因为在虚拟机中安装,也许是因为控制节点网络配置不对。。。不管了,反正创建实例完成,其他问题放在以后的文章中解决。