03-keystone组件

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                                                                                                                                                        |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值