keystone组件
一、数据库
1.安装软件
[root@controller ~]# yum install -y openstack-keystone httpd mod_wsgi python2-openstackclient
2.创建keystone数据库
[root@controller ~]# mysql -uroot -p
MariaDB [(none)]> create database keystone;
Query OK, 1 row affected (0.00 sec)
3.建两个授权用户
MariaDB [(none)]> grant all on keystone.* to 'keystone'@'localhost' identified by 'redhat';Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all on keystone.* to 'keystone'@'%' identified by 'redhat';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
二、keystone配置文件
1.指定数据库的连接
[root@controller ~]# vim /etc/keystone/keystone.conf
[database]
connection = mysql+pymysql://keystone:redhat@controller/keystone
#数据库类型+数据库的驱动://数据库:密码@主机名/数据库
[token]
provider = fernet
#令牌生成的方法
2.生成认证服务需要的表
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
3.验证是否有表
[root@controller ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.3.20-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use keystone;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
MariaDB [keystone]> show tables;
+------------------------------------+
| Tables_in_keystone |
+------------------------------------+
| access_rule |
| access_token |
| application_credential |
| application_credential_access_rule |
| application_credential_role |
| assignment |
| config_register |
| consumer |
| credential |
| endpoint |
| endpoint_group |
| federated_user |
| federation_protocol |
| group |
| id_mapping |
| identity_provider |
| idp_remote_ids |
| implied_role |
| limit |
| local_user |
| mapping |
| migrate_version |
| nonlocal_user |
| password |
| policy |
| policy_association |
| project |
| project_endpoint |
| project_endpoint_group |
| project_option |
| project_tag |
| region |
| registered_limit |
| request_token |
| revocation_event |
| role |
| role_option |
| sensitive_config |
| service |
| service_provider |
| system_assignment |
| token |
| trust |
| trust_role |
| user |
| user_group_membership |
| user_option |
| whitelisted_config |
+------------------------------------+
48 rows in set (0.000 sec)
三、初始化fernet
[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
四、定义访问地址、区域名称、admin用户的密码
[root@controller ~]# keystone-manage bootstrap --bootstrap-password redhat \
--bootstrap-admin-url http://controller:5000/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
public 公共地址 面向用户
internal 内部地址 用于云平台的组件的相互通信
admin 管理地址 用户管理员后台管理
设置地区
五、让apache在controller启动服务
1.修改配置文件
[root@controller ~]# vim /etc/httpd/conf/httpd.conf
ServerName controller
2.keystone所带的虚拟主机配置文件与httpd的子配置文件建立软件链接
在启动httpd的时候会自动读取这个虚拟主机的配置文件
[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
3.启动httpd
[root@controller ~]# systemctl start httpd
[root@controller ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@controller ~]# netstat -antp | grep http
tcp6 0 0 :::5000 :::* LISTEN 7588/httpd
tcp6 0 0 :::80 :::* LISTEN 7588/httpd
六、keystone相关名词解释
用户user
角色role:普通角色、管理角色
项目project:每个用户必须依托一个项目
域domain:项目需要工作在域中
七、环境变量
[root@controller ~]# export OS_USERNAME=admin
[root@controller ~]# export OS_PASSWORD=redhat
[root@controller ~]# export OS_PROJECT_NAME=admin
[root@controller ~]# export OS_USER_DOMAIN_NAME=Default
[root@controller ~]# export OS_PROJECT_DOMAIN_NAME=Default
[root@controller ~]# export OS_AUTH_URL=http://controller:5000/v3
[root@controller ~]# export OS_IDENTITY_API_VERSION=3
[root@controller ~]# export OS_IMAGE_API_VERSION=2
八、创建域
创建一个叫example的域,–description “An Example Domain”是这个域的描述信息
[root@controller ~]# openstack domain create --description "An Example Domain" example
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | An Example Domain |
| enabled | True |
| id | df9cb673851b4588aa1125c64fd66558 |
| name | example |
| options | {} |
| tags | [] |
+-------------+----------------------------------+
每个域在创建好后会有一个唯一的id
列出所有的域
[root@controller ~]# openstack domain list
+----------------------------------+---------+---------+--------------------+
| ID | Name | Enabled | Description |
+----------------------------------+---------+---------+--------------------+
| default | Default | True | The default domain |
| df9cb673851b4588aa1125c64fd66558 | example | True | An Example Domain |
+----------------------------------+---------+---------+--------------------+
系统默认有个default的域
九、创建项目
–domain default 指定所在域为default
–description “Service project” 和”Demo Project” 是描述信息
service和myproject 是项目名称
[root@controller ~]# openstack project create --domain default --description "Service project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service project |
| domain_id | default |
| enabled | True |
| id | 29d43980ca534e1b9f239c13ba24c7d1 |
| is_domain | False |
| name | service |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
[root@controller ~]# openstack project create --domain default --description "Demo Project" myproject
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | 63868136773b449c8802d08b091e910e |
| is_domain | False |
| name | myproject |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
十、创建用户
–domain default指定域
–password-prompt 设置密码
myuser 创建的用户的名字
[root@controller ~]# openstack user create --domain default --password-prompt myuser
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 0df0a4daa52b4911bb36ef5c5735250a |
| name | myuser |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
十一、关联角色
创建角色
[root@controller ~]# openstack role create myrole
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | 4592ab03696946a9a55ff93056d8951a |
| name | myrole |
| options | {} |
+-------------+----------------------------------+
关联角色
[root@controller ~]# openstack role add --project myproject --user myuser myrole
这是现在的结构
十二、验证
管理员角色验证令牌成功
[root@controller ~]# openstack --os-auth-url http://controller:5000/v3 \
> --os-project-domain-name Default --os-user-domain-name Default \
> --os-project-name admin --os-username admin token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2024-10-09T03:07:16+0000 |
| id | gAAAAABnBeVUumzoDfSjMfX6DNC_CyV_atF3UjAN_xH00zMNZgQ0LTZ3mmt8PbNvI1BdeNw4XbCT1pxXjBXX-OgVcTF09pSih825hpFvzZ2fUI8Y7nu7HlZN5ocTUa0oW5b1bjjebUQP7WYqArM048OfvWpXwH-Z4N0-lnn4XJNdFDJvYlL6oVw |
| project_id | c0dc4cf8eda54d6584997ecbf8c7d1b8 |
| user_id | 8b501de8f7404fb4ba3d4ca043f6e85e |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
如果普通用户想想验证令牌
需要重新输入环境变量,为了方便可以将环境变量写入脚本中
例如:
[root@controller ~]# vim adminexport
OS_USERNAME=adminexport OS_PASSWORD=redhatexport
OS_PROJECT_NAME=adminexport
OS_USER_DOMAIN_NAME=Defaultexport
OS_PROJECT_DOMAIN_NAME=Defaultexport
OS_AUTH_URL=http://controller:5000/v3export
OS_IDENTITY_API_VERSION=3export OS_IMAGE_API_VERSION=2
然后使用命令使其生效
[root@controller ~]# source admin
再次验证只需输入
[root@controller ~]# openstack token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2024-10-09T03:14:28+0000 |
| id | gAAAAABnBecEr4o-zk_Pu5KhIttBa3SEwriQw9U_4SmekyTAo4sbsgKTZ6jzBJaTzXRMrJ3Ru2O9pzH6-ZfKgvUd9QcdvnUHvL-8vKa6kP-WAiy-Br5azpJaQJooqAMMKybodwHeWGx2NmG01JR3TkFh2hN6BRHRVL_2js5LD--COMLzykj_hUM |
| project_id | c0dc4cf8eda54d6584997ecbf8c7d1b8 |
| user_id | 8b501de8f7404fb4ba3d4ca043f6e85e |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
4fb4ba3d4ca043f6e85e |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+