openstack-havana云平台实验
时间:2016-10-10 09:32 来源:潇湘夜雨 作者:华嵩阳 点击:次
	前提:本文档中涉及到的所有主机的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)  |