前言
本文实验最终失败,失败,失败!重要的事情说三遍。
想要用openstack创建两台ubuntu16的虚拟机,于是上传了ubuntu-16.04.4-server-amd64.iso镜像,然后用它创建了实例,分配了浮动IP。理论上,应该可以访问了。但是,ping该IP会提示Destination Host Unreachable。
找到了制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)一文,发现作者使用的是cloud镜像。十有八九是镜像的原因了,那就尝试一下。
下载cloud镜像
最简单的方法是使用标准镜像。主流的Linux发行版都提供可以在OpenStack中直接使用的cloud镜像,下面有几个下载地址:
- CentOS6:http://cloud.centos.org/centos/6/images/
- CentOS7:http://cloud.centos.org/centos/7/images/
- Ubuntu14.04:http://cloud-images.ubuntu.com/trusty/current/
- Ubuntu16.04:http://cloud-images.ubuntu.com/xenial/current/
这里我们访问 http://cloud-images.ubuntu.com/xenial/current/ ,然后下载xenial-server-cloudimg-amd64-disk1.img。
导入镜像
1、在horizon控制台,项目,计算,镜像,创建镜像。
![p://upload-images.jianshu.io/upload_images/1529081-a25a738dfa6ea577?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2、镜像上传完成,即可看到新添加的镜像。
3、使用ubuntu16的镜像创建实例u16-n0。
[站外图片上传中...(image-6a9b7b-1545009544684)]
4、测试登录。
给实例分配浮动IP为172.24.4.10,在ccrfox105上可以ping通。然后,查看日志,想要找到用户名和密码。但是,不同于cirros,在ubuntu16日志中并没有找到。
参考openstack入门二十六:创建实例,发现大多数 cloud images支持公钥授权而不是传统的用户名密码授权。
使用密钥
dashboard方法
1、项目,计算,密钥对,创建密钥对。
2、输入密钥名ccrfox105-key,创建密钥对,然后公钥就会上传到openstack,显示在控制台。同时会自动下载私钥到本地,名为ccrfox105-key.pem。
3、重新创建实例u16-n0(这次不要忘记选择密钥对),然后分配浮动IP为172.24.4.10。
4、通过scp把ccrfox105-key.pem上传到ccrfox105
scp ccrfox105-key.pem test@ccrfox105:~
5、等待实例启动完全(5分钟左右),在ccrfox105测试登录
ssh ubuntu@172.24.4.10 -i ccrfox105-key.pem
报错:
修改了密钥权限为600,依然无法登录。
换成root用户,ssh root@172.24.4.10 -i ccrfox105-key.pem
,依然无法登录。
尴尬,这是什么鬼?
命令行方法
1、切换到stack用户
sudo su - stack
2、生成密钥对
ssh-keygen
,三次回车。
3、添加公钥到openstack环境
nova keypair-add --pub-key ~/.ssh/id_rsa.pub ccrfox105-stack-key
报错:
ERROR (CommandError): You must provide a username or user ID via --os-username, --os-user-id, env[OS_USERNAME] or env[OS_USER_ID]
参考[完整部署CentOS7.2+OpenStack+kvm 云平台环境(5)--问题解决],需要source admin-openrc.sh
,然而我的系统中并没有admin-openrc.sh
这个文件。
(1)新建admin-openrc.sh,内容如下:
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=secret
export OS_AUTH_URL=http://172.16.0.105:35357/v2.
(2)执行source admin-openrc.sh
(3)再次执行nova keypair-add --pub-key ~/.ssh/id_rsa.pub ccrfox105-stack-key
进行测试,错误变了
No handlers could be found for logger "keystoneauth.identity.generic.base"
ERROR (DiscoveryFailure): Could not determine a suitable URL for the plugin
(4)sudo netstat -antupo | egrep '(5000|35357)'
,发现35357端口服务没有启动。
(5)ps -ef | grep keystone
,查看keystone服务,已经启动。
(6)vim /etc/keystone/keystone.conf
,打开几处注释:
admin_bind_host = 0.0.0.0
admin_port = 35357
public_bind_host = 0.0.0.0
public_port = 5000
(6)重启keystone,sudo /etc/init.d/apache2 restart
然后,没有用。
dashboard与命令行结合
1、切换到stack用户
sudo su - stack
2、生成密钥对
ssh-keygen
,三次回车。
3、拷贝公钥到本地
4、在openstack的dashboard导入公钥。
5、创建实例,选择新导入的公钥。
6、再次测试登录。
ssh ubuntu@172.24.4.10 -i ~./ssh/id_rsa
ssh root@172.24.4.10 -i ~./ssh/id_rsa
和dashboad方法报同样的错误:Permission denied (publickey).
至此,三种方法全部失败,猜测openstack的keystone服务没有安装好,留个坑吧。
不使用密钥
参考如何在OpenStack上安装Ubuntu系统、Openstack使用官方ubuntu和Centos镜像和openstack中镜像的密码修改,配置过程如下:
创建实例,创建过程中不添加密钥对,而是配置脚本:
#!/bin/sh
sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
cp -f /home/ubuntu/.ssh/authorized_keys /root/.ssh/
service ssh restart
passwd ubuntu<<EOF
123456
123456
EOF
如下图:
然后,ssh ubuntu@172.24.4.10
,Permission denied (publickey).
如果是CentOS,那么输入:
#!/bin/sh
sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
cp -f /home/centos/.ssh/authorized_keys /root/.ssh/
service sshd restart
passwd centos<<EOF
123456
123456
EOF
后记
本次实验过程中,各种报错不断,大部分都没有找到解决方案。
最坑的是,除了cirros,其他镜像在实例创建成功后都无法登录,尝试了各种办法也没有解决,只能无奈放弃。
控制台也无法访问,参考OpenStack 控制台不能访问的问题进行配置,依然无法访问。
怀疑是因为openstack没有安装完整,毕竟安装完是有报错的,看来有必要重新安装一下openstack了。然后再写一篇《OpenStack添加镜像2.0》版本。