IabSDocker4小时前更新关注私信 Keystone服务概述 1、Keystone的作用 Keystone是OpenStack的身份认证和授权服务,它在OpenStack架构中扮演着至关重要的角色。以下是Keystone的主要功能: 身份认证:Keystone负责验证用户的身份信息,确保用户在访问OpenStack资源时提供有效的凭证(如用户名和密码、Token等)。它支持多种身份认证方式,包括本地用户认证、LDAP认证等。 授权:Keystone管理用户的权限和角色,控制用户对OpenStack资源的访问。通过定义角色和策略,管理员可以灵活地分配用户权限,确保用户只能访问他们被授权的资源。 服务目录:Keystone维护一个服务目录,记录了OpenStack环境中所有服务的端点信息。其他OpenStack服务(如Nova、Neutron、Cinder等)通过服务目录发现和调用彼此的服务。 Token管理:Keystone生成和管理Token,用于在OpenStack服务之间进行身份验证。Token是一种临时凭证,用户在通过身份认证后获得Token,并在后续的API请求中使用Token进行身份验证。 2、Keystone的架构 Keystone服务由以下几个主要组件构成: keystone服务:这是Keystone的核心服务,负责处理身份认证和授权请求。 keystone.conf配置文件:这是Keystone的主要配置文件,包含了数据库连接信息、身份认证驱动配置、Token管理配置等。 数据库:Keystone使用关系型数据库(如MariaDB)存储用户信息、角色信息、服务目录等数据。 API端点:Keystone提供RESTful API接口,供其他OpenStack服务和客户端调用,进行身份认证和授权操作。 3、工作原理 Keystone的工作原理可以概括为以下几个步骤: 用户认证:用户通过客户端(如OpenStack命令行工具、Horizon仪表板等)向Keystone发送身份认证请求,提供用户名和密码等凭证。 生成Token:Keystone验证用户凭证,如果验证通过,则生成一个Token,并将其返回给用户。 Token验证:用户在后续的API请求中携带Token,其他OpenStack服务通过调用Keystone的API验证Token的有效性。 授权检查:在验证Token有效后,Keystone根据用户的角色和策略进行授权检查,确定用户是否有权限访问请求的资源。 服务调用:如果授权检查通过,用户可以访问相应的OpenStack资源,其他服务通过服务目录获取目标服务的端点信息,并进行调用。 通过以上机制,Keystone确保了OpenStack环境中的身份认证和授权的安全性和灵活性。接下来我将详细介绍如何安装和配置Keystone服务,以确保你的OpenStack环境能够安全地管理用户身份和资源访问。 一、准备keystone数据库 CREATE DATABASE keystone; # GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone'; CREATE USER 'keystone'@'%' IDENTIFIED BY 'keystone'; # 如果用户存在使用ALTER ALTER USER 'keystone'@'%' IDENTIFIED BY 'keystone'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'; FLUSH PRIVILEGES; 二、安装配置 keystone组件 1、安装keystone ⎈[root@luckly ~]# apt-get install keystone apache2 libapache2-mod-wsgi-py3 2、安装CRUDINI编辑器(可选) ⎈[root@luckly ~]# apt-get install crudini -y 3、准备keystone配置文件 修改 /etc/keystone/keystone.conf中[database]和[token]的值 ⎈[root@luckly ~]# crudini --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:keystone@10.0.0.80/keystone ⎈[root@luckly ~]# crudini --set /etc/keystone/keystone.conf token provider fernet ⎈[root@luckly ~]# grep -A2 "\[database\]" /etc/keystone/keystone.conf [database] connection = mysql+pymysql://keystone:keystone@10.0.0.80/keystone ⎈[root@luckly ~]# ⎈[root@luckly ~]# egrep -v "^(#|$)" /etc/keystone/keystone.conf | grep -A1 "\[token\]" [token] provider = fernet ⎈[root@luckly ~]# 三、初始化认证服务数据库 keystone-manage db_sync会创建所有必要的表和初始数据结构 ⎈[root@luckly ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone # 查看Mysql中keystone库是否生成若干张表 四、初始化Fernet keys密钥库 keystone-manage fernet_setup命令用于初始化和管理Fernet密钥库。Fernet是一种对称加密机制,用于加密和解密身份认证令牌(Tokens)。Keystone使用Fernet密钥库来生成和验证Tokens,确保身份认证的安全性。 keystone-manage credential_setup命令用于初始化和管理凭据加密密钥。Keystone使用这些密钥来加密和解密用户的凭据信息,如密码、API密钥等。这确保了用户凭据的安全性。 ⎈[root@luckly ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone ⎈[root@luckly ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone ⎈[root@luckly ~]# 1、检查是否初始化成功 ⎈[root@luckly ~]# ll /etc/keystone/fernet-keys/ total 8 -rw------- 1 keystone keystone 44 Dec 12 12:20 0 -rw------- 1 keystone keystone 44 Dec 12 12:20 1 ⎈[root@luckly ~]# ll /etc/keystone/credential-keys/ total 8 -rw------- 1 keystone keystone 44 Dec 12 12:21 0 -rw------- 1 keystone keystone 44 Dec 12 12:21 1 ⎈[root@luckly ~]# 五、配置bootstrap身份认证服务 ⎈[root@luckly ~]# keystone-manage bootstrap --bootstrap-password 123456 --bootstrap-admin-url http://10.0.0.80:35357/v3/ --bootstrap-internal-url http://10.0.0.80:5000/v3/ --bootstrap-public-url http://10.0.0.80:5000/v3/ --bootstrap-region-id RegionOne ⎈[root@luckly ~]# keystone-manage bootstrap 命令用于: 创建初始的管理员用户。 配置Keystone服务的API端点。 设置服务目录中的初始服务和端点。 初始化默认的域和项目。 六、配置Apache HTTP服务器 ⎈[root@luckly ~]# cat /etc/apache2/sites-available/keystone.conf Listen 5000 Listen 35357 <VirtualHost *:5000> WSGIScriptAlias / /usr/bin/keystone-wsgi-public WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-public WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On LimitRequestBody 114688 <IfVersion >= 2.4> ErrorLogFormat "%{cu}t %M" </IfVersion> ErrorLog /var/log/apache2/keystone.log CustomLog /var/log/apache2/keystone_access.log combined <Directory /usr/bin> <IfVersion >= 2.4> Require all granted </IfVersion> <IfVersion < 2.4> Order allow,deny Allow from all </IfVersion> </Directory> </VirtualHost> Alias /identity /usr/bin/keystone-wsgi-public <Location /identity> SetHandler wsgi-script Options +ExecCGI WSGIProcessGroup keystone-public WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On </Location> # Admin API - 35357 <VirtualHost *:35357> WSGIScriptAlias / /usr/bin/keystone-wsgi-admin WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On LimitRequestBody 114688 <IfVersion >= 2.4> ErrorLogFormat "%{cu}t %M" </IfVersion> ErrorLog /var/log/apache2/keystone-admin.log CustomLog /var/log/apache2/keystone-admin_access.log combined <Directory /usr/bin> <IfVersion >= 2.4> Require all granted </IfVersion> <IfVersion < 2.4> Order allow,deny Allow from all </IfVersion> </Directory> </VirtualHost> Alias /admin /usr/bin/keystone-wsgi-admin <Location /admin> SetHandler wsgi-script Options +ExecCGI WSGIProcessGroup keystone-admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On </Location> ⎈[root@luckly ~]# ⎈[root@luckly ~]# systemctl reload apache2.service 七、导出环境变量 ⎈[root@luckly ~]# export OS_USERNAME=admin ⎈[root@luckly ~]# export OS_PASSWORD=123456 ⎈[root@luckly ~]# export OS_PROJECT_NAME=admin ⎈[root@luckly ~]# export OS_USER_DOMAIN_NAME=Default ⎈[root@luckly ~]# export OS_PROJECT_DOMAIN_NAME=Default ⎈[root@luckly ~]# export OS_AUTH_URL=http://10.0.0.80:5000/v3 # Public API ⎈[root@luckly ~]# export OS_AUTH_URL=http://10.0.0.80:35357/v3 # Admin API ⎈[root@luckly ~]# export OS_IDENTITY_API_VERSION=3 八、测试keystone功能 创建domain、project、user、roles,这些步骤是用于测试keystone是否工作正常的,不报错就行了 ⎈[root@luckly ~]# openstack domain create --description "An Example Domain" example +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | An Example Domain | | enabled | True | | id | 5653d114443b410aaff84f7caa0cdacb | | name | example | | options | {} | | tags | [] | +-------------+----------------------------------+ ⎈[root@luckly ~]# # 创建service项目 ⎈[root@luckly ~]# openstack project create --domain default --description "Service Project" service +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Service Project | | domain_id | default | | enabled | True | | id | 770577bba57c4a4ab8fb6d9b3d1f3527 | | is_domain | False | | name | service | | options | {} | | parent_id | default | | tags | [] | +-------------+----------------------------------+ ⎈[root@luckly ~]# # 创建demo用户 ⎈[root@luckly ~]# openstack user create --domain default --password-prompt demo User Password: # 输入密码demo Repeat User Password: # 输入密码demo +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | b655787b75b94076855cf7feef0d5937 | | name | demo | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+ ⎈[root@luckly ~]# # 创建user角色 ⎈[root@luckly ~]# openstack role create user +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | None | | domain_id | None | | id | 25e6e71fbfde40529a963a43971a1895 | | name | user | | options | {} | +-------------+----------------------------------+ # 添加demo用户到demo项目和user角色 ⎈[root@luckly ~]# openstack role add --project demo --user demo user ⎈[root@luckly ~]# 现在发现都不报错,可以创建环境变量文件了 cat > openstack-admin <<'EOF' export OS_USERNAME=admin export OS_PASSWORD=123456 export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http://10.0.0.80:35357/v3 # export OS_AUTH_URL=http://10.0.0.80:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 EOF 创建好之后,以后再执行任何openstack命令,就只需要source openstack-admin就可以了 © 版权声明文章版权归作者所有,未经允许请勿转载。THE ENDOpenStack 喜欢就支持一下吧点赞15赞赏 分享QQ空间微博QQ好友海报分享复制链接收藏