Keystone
- 简介
- Keystone的功能
- Keystone基本概念
- Keystone部署
- 创建数据库实例和数据库用户
- 安装keystone、httpd、mod_wsgi
- 创建OpenStack 域、项目、用户和角色
简介
keystone是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证、令牌的发放和校验、服务列表、用户权限的定义等等。云环境中所有的服务之间的授权和认证都需要经过 keystone. 因此 keystone 是云平台中第一个即需要安装的服务。
Keystone的功能
Keystone 的主要功能如下:
- 管理用户及其权限;
- 维护 OpenStack 服务的 Endpoint;
- Authentication(认证)和 Authorization(鉴权)。
Keystone基本概念
- User
使用服务的用户,可以是人,服务或者系统,只要是使用了openstack服务的对象都可以称为用户。当User对OpenStack进行访问时,Keystone会对其身份进行验证。
- Project
租户,可以理解为一个人、项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源。
- Token
指的是一串比特值或者字符串,用来作为访问资源的令牌。Token中含有可访问资源的范围和有效时间。
- Role
角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。安全包含两部分:Authentication(认证)和 Authorization(鉴权)
- Service
Openstack Service,即Openstack中运行的组件服务。nova,glance都是属于一个服务,需要在keystone上进行创建,指定类型。
创建服务有一个服务,就创建一个endpoint,会根据服务类型去查找那个服务。Service 决定每个 Role 能做什么事情 ,Service 通过各自的 policy.json 文件对 Role 进行访问控制
- Endpoint
一个可以通过网络来访问和定位某个Openstack Service的地址,通常是一个URL。例如,Nova需要访问Glance服务去获取Image时,Nova通过访问Keystone拿到Glance的Endpoint,然后通过访问该Endpoint去获取Glance服务,我们可以通过Endpoint的region属性去定义多个region。Endpoint该使用对象分为三类:
1、 Admin URL:给admin用户使用,被从常规的访问中分离。
2、 Internal URL:Openstack内部服务使用来跟别的服务通信,只能被局域网访问。
3、 Public URL:其它用户可以访问的地址,可以被全局访问。
User 通过 Endpoint 访问资源和执行操作
- Credentials
用于确认用户身份的凭证。 - Authentication
确定用户身份的过程。
Keystone部署
在部署openstack组件时,需先行安装认证服务(keystone),而认证服务是使用Apache运行的,安装完成后才可以创建、管理账号,然后安装镜像服务(glance)、计算服务(nova)、网络服务(neutron)
创建数据库实例和数据库用户
[root@ct ~]# mysql -u root -p
MariaDB [(none)]> create database keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
安装keystone、httpd、mod_wsgi
[root@ct ~]# yum -y install openstack-keystone httpd mod_wsgi #mod_wsgi包的作用是让apache能够代理pythone程序的组件;openstack的各个组件,包括API都是用python写的,但访问的是apache,apache会把请求转发给python去处理,这些包只安装在controler节点
[root@ct ~]# cp -a /etc/keystone/keystone.conf{,.bak}
[root@ct ~]# grep -Ev "^$|#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf
#通过pymysql模块访问mysql,指定用户名密码、数据库的域名、数据库名
[root@ct ~]# openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:KEYSTONE_DBPASS@ct/keystone
#指定token的提供者;提供者就是keystone自己本身
[root@ct ~]# openstack-config --set /etc/keystone/keystone.conf token provider fernet
- 初始化认证数据库
[root@ct ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
- 初始化fernet 密钥存储库(以下命令会生成两个密钥,生成的密钥放于/etc/keystone/目录下,用于加密数据)
[root@ct ~]# cd /etc/keystone/
[root@ct keystone]# ll
总用量 124
-rw-r-----. 1 root keystone 2303 5月 12 2020 default_catalog.templates
-rw-r-----. 1 root keystone 685 12月 16 15:50 keystone.conf
-rw-r-----. 1 root keystone 104721 5月 12 2020 keystone.conf.bak
-rw-r-----. 1 root keystone 1046 5月 12 2020 logging.conf
-rw-r-----. 1 root keystone 3 5月 12 2020 policy.json
-rw-r-----. 1 keystone keystone 665 5月 12 2020 sso_callback_template.html
[root@ct keystone]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@ct keystone]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
- 配置bootstrap身份认证服务
[root@ct keystone]# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
> --bootstrap-admin-url http://ct:5000/v3/ \
> --bootstrap-internal-url http://ct:5000/v3/ \
> --bootstrap-public-url http://ct:5000/v3/ \
> --bootstrap-region-id RegionOne
- 配置Apache HTTP服务器
[root@ct ~]# echo "ServerName controller" >> /etc/httpd/conf/httpd.conf
- 优化配置文件并开启服务
[root@ct ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
[root@ct conf.d]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@ct conf.d]# systemctl start httpd
- 配置管理员账户的环境变量
[root@ct ~]# cat >> ~/.bashrc << EOF
export OS_USERNAME=admin #控制台登陆用户名
export OS_PASSWORD=ADMIN_PASS #控制台登陆密码
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://ct:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF
[root@ct ~]# source ~/.bashrc
- 通过配置环境变量,可以使用openstack命令进行一些操作
[root@ct keystone]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 004e37c5d44741448c92b7c6e36bd4d3 | admin |
+----------------------------------+-------+
创建OpenStack 域、项目、用户和角色
[root@ct keystone]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | f694e4065390404a82f064644c6fe731 |
| is_domain | False |
| name | service |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
- 创建角色
[root@ct ~]# openstack role create user
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | 9f4c15fc89d5457daca1c49926b1b6f1 |
| name | user |
| options | {} |
+-------------+----------------------------------+
#查看角色列表
[root@ct ~]# openstack role list
+----------------------------------+--------+
| ID | Name |
+----------------------------------+--------+
| 62c33b779274459ca40ba86ee26f2599 | reader |
| 9f4c15fc89d5457daca1c49926b1b6f1 | user |
| bcad902da111478da9180971d890f08d | member |
| fd88fb7f7b084ebea1ea23cf36079a42 | admin |
+----------------------------------+--------+