一个计算机技术爱好者与学习者

0%

好好学OpenStack:OpenStack添加镜像

1. 前言

本文实验最终失败,失败,失败!重要的事情说三遍。

想要用openstack创建两台ubuntu16的虚拟机,于是上传了ubuntu-16.04.4-server-amd64.iso镜像,然后用它创建了实例,分配了浮动IP。理论上,应该可以访问了。但是,ping该IP会提示Destination Host Unreachable。

找到了制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)一文,发现作者使用的是cloud镜像。十有八九是镜像的原因了,那就尝试一下。

2. 下载cloud镜像

最简单的方法是使用标准镜像。主流的Linux发行版都提供可以在OpenStack中直接使用的cloud镜像,下面有几个下载地址:

这里我们访问 http://cloud-images.ubuntu.com/xenial/current/ ,然后下载xenial-server-cloudimg-amd64-disk1.img。

3. 导入镜像

1、在horizon控制台,项目,计算,镜像,创建镜像。

2、镜像上传完成,即可看到新添加的镜像。

3、使用ubuntu16的镜像创建实例u16-n0。

4、测试登录。
给实例分配浮动IP为172.24.4.10,在ccrfox105上可以ping通。然后,查看日志,想要找到用户名和密码。但是,不同于cirros,在ubuntu16日志中并没有找到。

参考openstack入门二十六:创建实例,发现大多数 cloud images支持公钥授权而不是传统的用户名密码授权。

4. 使用密钥

4.1. 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,依然无法登录。

尴尬,这是什么鬼?

4.2. 命令行方法

1、切换到stack用户
sudo su - stack

2、生成密钥对
ssh-keygen,三次回车。

3、添加公钥到openstack环境
nova keypair-add --pub-key ~/.ssh/id_rsa.pub ccrfox105-stack-key

报错:

1
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,内容如下:

1
2
3
4
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进行测试,错误变了

1
2
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,打开几处注释:

1
2
3
4
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

然后,没有用。

4.3. 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服务没有安装好,留个坑吧。

5. 不使用密钥

参考如何在OpenStack上安装Ubuntu系统Openstack使用官方ubuntu和Centos镜像openstack中镜像的密码修改,配置过程如下:

创建实例,创建过程中不添加密钥对,而是配置脚本:

1
2
3
4
5
6
7
8
9
#!/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,那么输入:

1
2
3
4
5
6
7
8
9
#!/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

6. 后记

本次实验过程中,各种报错不断,大部分都没有找到解决方案。

最坑的是,除了cirros,其他镜像在实例创建成功后都无法登录,尝试了各种办法也没有解决,只能无奈放弃。

控制台也无法访问,参考OpenStack 控制台不能访问的问题进行配置,依然无法访问。

怀疑是因为openstack没有安装完整,毕竟安装完是有报错的,看来有必要重新安装一下openstack了。然后再写一篇《OpenStack添加镜像2.0》版本。