潇湘夜雨移动版

主页 > 系统 > 云计算与云原生 >

openstack-havana云平台实验

前提:本文档中涉及到的所有主机的OS均为RHEL 6.4 x86_64系统。
 
Control Node: 172.18.109.235     node1.test.com  
Object Storage Node: 172.18.109.237   node2.test.com
Compute Node: 172.18.109.239    node3.test.com
 
Swift是一个分布式存储系统,其架构比较复杂,这里采用其最简单的模型来演示其使用,即基于一个物理节点来实现其所有功能。
 
一、安装配置Keystone
 
OpenStack的Identify服务(即Keystone)有两个主要功能
用户管理:实现用户认证及授权;
服务目录(Service catalog):所有可用服务的信息库,包含所有可用服务及其API endpoint路径;
 
1、安装Keystone
 
1.1、安装并初始化MySQL服务器
 
# yum -y install mysql mysql-server
# service mysqld start
# mysqladmin -uroot  password '123456'
# chkconfig mysqld on
 
1.2、安装配置Identity服务
 
# yum install openstack-utils openstack-keystone python-keystoneclient
 
创建keystone数据库,其默认会创建一个keystone用户以访问此同名数据库,密码可以使用--pass选项指定。
# openstack-db --init --service keystone --pass keystone
Please enter the password for the 'root' MySQL user: 
Verified connectivity to MySQL.
Creating 'keystone' database.
Asking openstack-keystone to sync the database.
Complete!
 
如果本机尚未安装mysql-server,此脚本会自动安装之,并且会提醒用户为root用户设定密码。
 
如果不想使用默认的keystone用户访问其数据,也可以使用下面的命令为keystone服务创建访问数据库的用户。
# mysql -uroot -p
mysql> GRANT ALL ON keystone.* TO 'KS_USER'@'%' IDENTIFIED BY '[YOUR_KEYSTONEDB_PASSWORD]';
mysql> GRANT ALL ON keystone.* TO 'KS_USER'@'localhost' IDENTIFIED BY '[YOUR_KEYSTONEDB_PASSWORD]';
 
1.3、编辑keystone的主配置文件,使得其使用MySQL做为数据存储池,并配置其使用正确的参数。
# vim /etc/keystone/keystone.conf
在[sql]段中,确保与mysql相关的内容类似如下,注意其中的密码为keystone用户访问MySQL服务器所使用的密码:
connection = mysql://keystone:keystone@localhost/keystone
配置参数示例:
 
debug = true
verbose = true
log_file = /var/log/keystone/keystone.log
connection = mysql://keystone:keystone@172.18.109.235/keystone
 
上面的参数指定连接时,其语法格式为“mysql://[user]:[pass]@[primary IP]/[db name]”。
 
1.4、配置keystone的管理token
 
为了使用admin用户管理keystone,可以通过配置keystone的客户端使用SERVICE_TOKEN和SERVICE_ENDPOINT环境变量来连接至Keystone。
 
# export SERVICE_TOKEN=$(openssl rand -hex 10) #生成随机数赋值给token变量
# export SERVICE_ENDPOINT=http://172.18.109.237:35357/v2.0
# echo $SERVICE_TOKEN > ~/ks_admin_token
 
# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token 'YOUR_ADMIN_TOKEN'
其中的‘YOUR_ADMIN_TOKEN’为一个字符串,建议使用一串随机数据,这可以使用openssl命令生成。
比如,上面的使用可以使用如下形式:
# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token  $SERVICE_TOKEN
也可以手动更改:admin_token = bd05ff99e5ad38d6a32e
接着启动keystone服务:
# service openstack-keystone start
# chkconfig openstack-keystone on
 
查看进程启动的相关信息:
# ps auxf | grep -i keystone-all
root      3660  0.0  0.1 103236   872 pts/0    S+   16:47   0:00          \_ grep -i keystone-all
keystone  3612  0.0  7.0 270100 34984 ?        S    16:35   0:00 /usr/bin/python /usr/bin/keystone-all --config-file /etc/keystone/keystone.conf
 
检查日志文件中有无错误提示:
# grep ERROR /var/log/keystone/keystone.log
 
1.5、初始化新生成的keystone数据库
以管理员的身份初始化keystone数据库
[root@node2 ~]# keystone-manage db_sync
 
1.6、设定Keystone为API endpoint
在Openstack中,服务(service)指的是计算(nova)、对象存储(Swift)或映像(image)等,
而Horizon(web dashboard)依赖于Keystone registry中的API endpoint(某网络资源或
服务的访问路径,通常表现为URL)来访问这些服务,包括Keystone自身。因此,这
里需要将Keystone服务自身及访问路径(API endpoint)先加入到Keystone的registry中。
 
[root@node1 ~]# keystone service-create --name=keystone --type=identity --description="Keystone Identity Service"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |    Keystone Identity Service     |
|      id     | bfc764625a3e4ecab8f15c61c7d47b4d |
|     name    |             keystone             |
|     type    |             identity             |
+-------------+----------------------------------+
 
为上面新建的service添加endpoint。注意,其中的service_id的内容为上面service-create命令创建的service的id。
[root@node1 ~]# keystone endpoint-create \
  --service_id bfc764625a3e4ecab8f15c61c7d47b4d \
  --publicurl 'http://172.18.109.235:5000/v2.0' \
  --adminurl 'http://172.18.109.235:35357/v2.0' \
  --internalurl 'http://172.18.109.235:5000/v2.0'
  
 +-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  | http://172.18.109.235:35357/v2.0 |
|      id     | 084d23a9d9a64850b6f6f43e10510661 |
| internalurl | http://172.18.109.235:5000/v2.0  |
|  publicurl  | http://172.18.109.235:5000/v2.0  |
|    region   |            regionOne             |
|  service_id | bfc764625a3e4ecab8f15c61c7d47b4d |
+-------------+----------------------------------+
如果本机启用了iptables,还需要确保对tcp的5000和35357端口的请求能正常通过。
例如,为iptables添加如下规则,记得测试完成后要保存规则至配置文件中。
# iptables -A INPUT -p tcp -m multiport --dports 5000,35357 -j ACCEPT
 
2 创建user、role及tenant
tenant是OpenStack的Keystone中的一个重要的术语,它相当于一个特定项目(project)
或一个特定的组织(origaniztion)等,它实现了资源或identity对象的隔离。用户(user)在
认证通过后即能访问资源,其通常会被直接关联至某tenant,因此看起来就像用户是包
含于tenant中的。角色(role)是权限的窗口,其可用于快速为一组用户完成相同的授权操作。
 
keystone可通过两种方式完成用户认证,一种为token认证,一种为credential(如用户名和密码等信息)认证。
前面的配置中,为Keystone的管理用户admin提供了token的认证方式,并以之完成了如前所述的服务创建等工作。
事实上,Keystone的重要功能之一便是提供用户认证,但为了便于认证信息的管理,其通常基于credential的方式进行。
风格统一起见,这里让admin用户基于后一种认证方式完成认证并执行管理工作,事实上,这也是Keystone服务配置的基本要求。
 
2.1 创建用于keystone管理的tenant、角色和用户
创建管理tenant,其名称为admin,描述信息为“Admin Tenant”。 (责任编辑:liangzh)