Openstack管理框架分析及创建(domain、project、service、role、user……)
By Eli·kang
elikang819@foxmail.com


openstack模块 openstack project_openstack

图:openstack管理框架




1、》》》

创建域(域是登陆的时候指定的):


Domains:表示一组projects和users的集合。


每一个project或user只能属于一个domain,但user可以属于多个projects。domain有命名空间的概念,即在一个命名空间内的名称是否是全局唯一。



openstack domain create --description

"Default Domain" default




2、》》》

创建project(基本等同G版之前的Teant,租户概念)


project是域名下子项,辅之以user(用户)、role(角色:管理权限),可以实现对管理范围的限制。



创建service项目:

openstack project create --domain default

\


--description "Service Project" service



创建admin项目:

openstack project create --domain default \

--description "Admin Project" admin



创建demo项目:

openstack project create --domain default

\


--description "Demo Project" demo



3、》》》创建role(角色)


openstack创建的角色没有其它参数限制,所以应该是全局通用的。

 



创建admin角色:

openstack role create admin



创建user角色:

openstack role create user



4、》》》

创建user(用户)



用户分为两大类:


一类是为openstack的部分组件创建的

访问用户,这一类用户的角色都是admin的;


另一类是管理员登陆用的

管理用户,这一类又可以分为两种,一种是具有所有权限的超级管理员,角色也是admin;另一种是只能管理分配的project,这一种用户只具有部分权限,角色是user。



admin角色的用户可以创建admin角色的其它用户,可见,admin的角色权限很大,轻易不能透露。


另外keystone不需要创建用户,因为它就是管理所有授权服务的啊,所以在创建以上项目的时候需要首先创建好keystone服务。

Keystone提供3A(Account, Authentication, Authorization)服务。除了3A之外,Keystone还对外提供服务目录(Service Catalog)服务,类似于UDDI服务的概念,用户(无论是Dashboard, API Client)都需要访问Keystone获取服务列表,以及每个服务的地址(Openstack中称为Endpoint)。


实际运行过程,当创建的用户向keystone申请权限时,keystone对用户鉴权完毕之后,会为用户颁发一个令牌,这样用户在请求其他服务的时候,只需要亮出自己的令牌即可,而不需要发送自己的密钥。当然为了防止仿冒令牌,令牌是有时限的。所有的用户都可以通过TOKEN来创建,所以TOKEN的安全也十分重要。




首次创建用户之前,需要先配置好环境变量


export OS_TOKEN=2a392914a9f6dade3f14;


export OS_URL=http://controller:35357/v3;


export OS_IDENTITY_API_VERSION=3;



创建admin用户:这里需要输入密码

openstack user create --domain default

\


--password-prompt admin


将admin角色添加到admin项目和admin用户中:

openstack role add --project admin --user admin admin



创建demo用户:

openstack user create --domain default

\


--password-prompt demo

将user角色添加到demo项目和demo用户中:

openstack role add --project demo --user demo user 



创建用户完成之后要去除环境变量:


unset OS_TOKEN OS_URL;



注意:


1、所有的用户都可以通过TOKEN来创建,所以TOKEN的安全也十分重要。


2、admin角色的用户可以创建admin角色的其它用户,所以要注意帐户的保护。


   user角色的用户没有权限创建新的用户,可以分配给普通管理人员使用。


3、一个用户可以关联多个项目,使用role add可以设定。



4、Openstack 中, 以租户作为云主机隔离的单位,project 等同于 tenant。在管理openstack时候, 需要添加独立的project, 然后每个project具有独立的用户、网络、云主机等。Keystone虽然存在keystone tenant-list 命令用于查看租户,但是由于Tenant概念在G版被废弃,新版本已经不支持这个命令了。




*********************************************************************



5、》》》创建service(服务:glance、nova、neutron等等)



需要创建的组件中,keystone组件要首先创建,而且上面的所有管理的规划要在创建keystone之后才可以进行,它是管理所有权限的服务嘛,而其它本身不需要创建用户。其它的服务组件都是需要创建访问用户的,并且需要分配admin的角色给帐户,这样就可以实通过访问用户和keystone进行交互,进而可以实现权限的管理。



再一个就是,每个服务组件都需要在openstack中注册,注册的endponit是由keystone来管理的。Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。因此,在keystone中包含一个endpoint模板(endpoint template,在安装keystone的时候我们可以在conf文件夹下看到这个文件),这个模板提供了所有存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。public url可以被全局访问(如http://compute.example.com),private url只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离。



keystone:



The Identity service provides authentication services for each OpenStack service.

The authentication service uses a combination of

domains

, projects

(tenants), users

, and roles

.



创建service:

openstack service create

\


--name keystone --description "OpenStack Identity" identity


创建endponit,public/internal/admin:

openstack endpoint create --region RegionOne

\


identity public http://controller:5000/v3

openstack endpoint create --region RegionOne

\


identity internal http://controller:5000/v3

openstack endpoint create --region RegionOne

\


identity admin http://controller:35357/v3





glance:



创建glance用户:

openstack user create --domain default --password-prompt glance;

将admin角色添加到service项目和glance用户中:

openstack role add --project service --user glance admin;



创建glance服务:

openstack service create --name glance

\


--description "OpenStack Image" image;


创建glance endponit:

openstack endpoint create --region RegionOne

\


image public http://controller:9292; \

openstack endpoint create --region RegionOne

\


image internal http://controller:9292; \

openstack endpoint create --region RegionOne

\


image admin http://controller:9292



nova:



创建nova用户:

openstack user create --domain default

\


--password-prompt nova;

将nova用户的角色设为admin:

openstack role add --project service --user nova admin; \




创建nova服务:

openstack service create --name nova \

--description "OpenStack Compute" compute;

创建nova endponit:

openstack endpoint create --region RegionOne \

compute public http://controller:8774/v2.1/%\(tenant_id\)s; \

openstack endpoint create --region RegionOne \

compute internal http://controller:8774/v2.1/%\(tenant_id\)s; \

openstack endpoint create --region RegionOne \

compute admin http://controller:8774/v2.1/%\(tenant_id\)s




neutron:


创建neutron用户:

openstack user create --domain default --password-prompt neutron;

将neutron用户的角色设为admin

openstack role add --project service --user neutron admin;




创建neutron服务:

openstack service create --name neutron

\


--description "OpenStack Networking" network;

创建neutron的endponit:

openstack endpoint create --region RegionOne

\


network public http://controller:9696; \

openstack endpoint create --region RegionOne

\


network internal http://controller:9696; \

openstack endpoint create --region RegionOne

\


network admin http://controller:9696



……


……


参考:http://www.2cto.com/kf/201302/187655.html


http://blog.sina.com.cn/s/blog_60f6c9680101bn75.html

本文由elikang整理,鉴于本人知识能力的不足,本文许多欠缺之处,欢迎指正。