OpenStack部署(三) 安装配置Keystone
1 | 作者:李晓辉 |
前言
在云计算环境中,身份认证和授权是确保系统安全性和可靠性的关键环节。OpenStack作为一个强大的开源云平台,提供了灵活的资源管理和高效的虚拟化能力。而Keystone服务作为OpenStack的身份认证和授权核心组件,负责管理用户身份、角色和权限,确保只有经过授权的用户才能访问云资源。本文将详细介绍如何在OpenStack环境中安装和配置Keystone服务,帮助读者顺利搭建一个安全可靠的云平台。
Keystone服务概述
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进行身份验证。
Keystone的架构
Keystone服务由以下几个主要组件构成:
keystone服务:这是Keystone的核心服务,负责处理身份认证和授权请求。
keystone.conf配置文件:这是Keystone的主要配置文件,包含了数据库连接信息、身份认证驱动配置、Token管理配置等。
数据库:Keystone使用关系型数据库(如MariaDB)存储用户信息、角色信息、服务目录等数据。
API端点:Keystone提供RESTful API接口,供其他OpenStack服务和客户端调用,进行身份认证和授权操作。
工作原理
Keystone的工作原理可以概括为以下几个步骤:
用户认证:用户通过客户端(如OpenStack命令行工具、Horizon仪表板等)向Keystone发送身份认证请求,提供用户名和密码等凭证。
生成Token:Keystone验证用户凭证,如果验证通过,则生成一个Token,并将其返回给用户。
Token验证:用户在后续的API请求中携带Token,其他OpenStack服务通过调用Keystone的API验证Token的有效性。
授权检查:在验证Token有效后,Keystone根据用户的角色和策略进行授权检查,确定用户是否有权限访问请求的资源。
服务调用:如果授权检查通过,用户可以访问相应的OpenStack资源,其他服务通过服务目录获取目标服务的端点信息,并进行调用。
通过以上机制,Keystone确保了OpenStack环境中的身份认证和授权的安全性和灵活性。接下来我将详细介绍如何安装和配置Keystone服务,以确保你的OpenStack环境能够安全地管理用户身份和资源访问。
准备keystone数据库
根据先决条件文章中的信息得知,我的数据库管理员密码是: LiXiaohui
1 | mysql -uroot -pLiXiaohui |
创建数据库
1 | CREATE DATABASE keystone; |
分配权限
1 | GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'LiXiaohui'; |
安装配置 keystone组件
安装keystone
1 | yum install openstack-keystone httpd python3-mod_wsgi -y |
安装CRUDINI编辑器(可选)
这一步是为了防止手工vim修改配置文件改错,如果你熟练掌握vim搜索和输入,这一步并不是必须的
1 | yum install crudini -y |
准备keystone配置文件
在/etc/keystone/keystone.conf
中[database]和[token]
修改正确的值,注意密码要正确,controller名称需要能解析
1 | crudini --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:LiXiaohui@controller/keystone |
或者手工编辑以下选项
1 | [database] |
准备keystone数据库
keystone-manage db_sync 会创建所有必要的表和初始数据结构
1 | su -s /bin/sh -c "keystone-manage db_sync" keystone |
初始化Fernet密钥库
keystone-manage fernet_setup
命令用于初始化和管理Fernet密钥库。Fernet是一种对称加密机制,用于加密和解密身份认证令牌(Tokens)。Keystone使用Fernet密钥库来生成和验证Tokens,确保身份认证的安全性。
keystone-manage credential_setup
命令用于初始化和管理凭据加密密钥。Keystone使用这些密钥来加密和解密用户的凭据信息,如密码、API密钥等。这确保了用户凭据的安全性。
1 | keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone |
完成上述命令后,可以通过以下步骤验证设置是否成功:
1 | ls /etc/keystone/fernet-keys/ |
构建Keystone服务
1 | keystone-manage bootstrap --bootstrap-password LiXiaohui \ |
keystone-manage bootstrap
命令用于:
创建初始的管理员用户。
配置Keystone服务的API端点。
设置服务目录中的初始服务和端点。
初始化默认的域和项目。
配置HTTPD服务
既然工作在http上,我们就需要为keystone服务准备httpd服务
1 | sed -i '/^ServerRoot/a\ServerName controller:80' /etc/httpd/conf/httpd.conf |
链接wsgi-keystone.conf,准备好配置文件
下面命令的作用是将/usr/share/keystone/wsgi-keystone.conf文件链接到/etc/httpd/conf.d/目录下。这样做的目的是让Apache HTTP服务器能够加载Keystone的WSGI配置文件,从而正确地运行Keystone服务。
1 | ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ |
启动httpd服务
1 | systemctl enable httpd.service --now |
导出环境变量
设置环境变量,以便在命令行中使用OpenStack客户端工具(如openstack命令)时,能够自动使用管理员用户进行身份认证。这些环境变量定义了访问OpenStack服务所需的身份认证信息和其他配置参数。
1 | # 设置环境变量 |
测试keystone功能
创建domain、project、user、roles,这些步骤是用于测试keystone是否工作正常的,不报错就行了
1 | [root@controller ~]# openstack domain create --description "An Example Domain" example |
1 | [root@controller ~]# openstack project create --domain default --description "Service Project" service |
1 | [root@controller ~]# openstack project create --domain default --description "Demo Project" myproject |
1 | [root@controller ~]# openstack user create --domain default --password LiXiaohui myuser |
1 | [root@controller ~]# openstack role create myrole |
现在发现都不报错,可以创建自己的环境变量文件了
1 | cat > adminrc.sh <<'EOF' |
创建好之后,以后再执行任何openstack命令,就只需要source adminrc.sh
就可以了