OpenStack添加镜像

文章目录
  1. 1. 前言
  2. 2. 下载cloud镜像
  3. 3. 导入镜像
  4. 4. 使用密钥
    1. 4.1. dashboard方法
    2. 4.2. 命令行方法
    3. 4.3. dashboard与命令行结合
  5. 5. 不使用密钥
  6. 6. 后记

前言

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

想要用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镜像,下面有几个下载地址:

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

导入镜像

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

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

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

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

报错:

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

然后,没有用。

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中镜像的密码修改,配置过程如下:

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

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

后记

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

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

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

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