dtcms插件 extjs6.5 css multithreading go redux Component Pure CSS vue例子 广告投放系统源码 float占几个字节 winbox使用教程 eclipse显示左边目录 mysql或者条件 python正则匹配中文 oracle查看所有数据库 java微服务架构 python实例 windows安装python环境 java基础语言 java基础类型 java开发环境搭建 如何安装java环境 jdbc连接mysql java查看数据类型 java中接口的定义 php开发实例 python视频教程 心理学与生活txt 万能低格工具 通达信金融终端官网 oem修改器 big5 god2iso 高通cpu排行 深渊碎片 送货单管理系统 unity3d中文版 android应用开发入门 兽之祝福
当前位置: 首页 > 学习教程  > 编程语言

openstack的keystone组件

2021/1/28 23:56:09 文章标签:

keystone概述 Keystone (OpenStack ldentity Service)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证、令牌管理、提供访问资源的服务目录、以及基于用户角色的访问控制。 Keystone类似一个服务总线,或者说是…

keystone概述

Keystone (OpenStack ldentity Service)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证、令牌管理、提供访问资源的服务目录、以及基于用户角色的访问控制。
Keystone类似一个服务总线,或者说是整个Openstack框架的注册表,其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用,需要经过Keystone的身份验证,来获得目标服务的Endpoint来找到目标服务。

keystone主要功能

身份认证(Authentication) :令牌的发放和校验;
用户授权(Authorization):授予用户在一个服务中所拥有权限;
用户管理(Account):管理用户账户
服务目录(Service Catalog):提供可用服务的API端点;

keystone的管理对象及其相关概念

role:用于划分权限,通过给user指定role,使user获得role对应操作权限;
user:指使用openstack service的用户;
credertials:用于确认用户身份的凭证。用户的用户名和密码,或者是用户名和API密钥,或者身份管理服务提供的认证令牌;
authentication:确定用户身份的过程;
token:使一个字符串表示,作为访问资源的令牌,包含了在指定范围和有效时间内可以被访问的资源;
project(Tenant):可以理解为一个人或服务所拥有的资源集合;
service:openstack service ,即openstack中运行的组件服务,如nova、swift、glance、neutron、cinder等;
endpoint:一个可以通过网络来访问和定位某个openstack service的地址,通常是一个URL;

keystone认证流程图及其理解

在这里插入图片描述
我们以创建一台虚拟机的场景来进行理解。

  1. 用户已命令行或者控制台的方式登录到openstack内部时,keystone会对其进行认证,当认证通过后,会给用户一个token(权限范围,及权限时间)和一个endpoint(一个URL:控制台的控制页面或者nova的API地址);
  2. 用户拿着keystone给的token令牌和endpoint向nova的API发出申请创建虚拟机的请求,nova接到请求后,会拿着用户的token令牌和endpoint向keystone进行认证;
  3. 认证通过后,由于nova创建虚拟机需要使用镜像资源,所以也会拿着token令牌(调用资源的合法性和权限)和image(不是镜像本身而是所需镜像的规格,属性)向glance的AP发出I调用请求,glance收到请求后,会向keystone进行认证,认证通过后,glance会处理其请求,将nova所请求调用的镜像给与nova;
  4. 和第三步类似,由于nova创建虚拟机需要网络资源,所以会拿着token令牌(请求资源的合法性和权限)和network(不是网络资源本身而是所需网路的相关信息)向neutron的API发出调用请求,neutron接到请求后会向keystone进行认证,认证通过后会处理其请求,将其所请求的相关网络资源给与nova;
  5. nova在获得创建虚拟机所需的镜像资源和网络资源后,开始创建虚拟机,并在创建成功后,返回信息到用户

运维常规命令

配置文件和日志文件

配置文件和日志文件一般部署在控制节点上;

配置文件:
/etc/keystone/keystone.conf
/etc/httpd/conf.d/wsgi-keystone.conf

日志文件:
/var/log/keystone/keystone.log
/var/log/httpd/keystone-access.log
/var/log/httpd/keystone-error.log

进程和服务

keystone通过httpd对外提供服务;

查看keystqne服务状态:
systemctl is-active httpd
###期待返回结果如下: active

启动/关闭/重启keystone服务:
systemctl start/stop/restart httpd

确认keystone后台进程是否存在:
ps -aux I grep keystone
keystone 1100 26269 0 Jul29 ? 00:48:26 (wsgi:keystone–DFOREGROUND
keystone 1101 26269 0 Jul29 ? 00:48:21 (wsgi:keystone–DFOREGROUND
keystone 1102 26269 0 Jul29 ? 00:48:47 (wsgi:keystone–DFOREGROUND

openstack-keystone组件部署

一、创建数据库实例和数据库用户

mysql -uroot -p123456
create database keystone;
grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'keystone_dbpass';
 grant all privileges on keystone.* to 'keystone'@'%' identified by 'keystone_dbpasss';
flush privileges;
exit

二、安装、配置keystone、数据库、Apache

安装keystone、httpd、mod_wsgi

小贴士:
mod_wsgi包的作用是让apache能够代理pythone程序的组件;openstack的各个组件,包括API都是用python写的,但访问的是apache,apache会把请求转发给python去处理,这些包只安装在controler节点

yum -y install openstack-keystone httpd mod_wsgi
cp -a /etc/keystone/keystone.conf{,.bak}
grep -Ev "^$|#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf

小贴士:
通过pymysql模块访问mysql,指定用户名密码、数据库的域名、数据库名

openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:keystone_dbpass@controller/keystone

小贴士:
指定token的提供者;提供者就是keystone自己本身

openstack-config --set /etc/keystone/keystone.conf token provider fernet
## Fernet:一种安全的消息传递格式

初始化认证服务数据库

su -s /bin/sh -c "keystone-manage db_sync" keystone

初始化fernet 密钥存储库(以下命令会生成两个密钥,生成的密钥放于/etc/keystone/目录下,用于加密数据)

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

配置bootstrap身份认证服务

 keystone-manage bootstrap --bootstrap-password ADMIN_PASS --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
##bootstrap-region-id RegionOne	指定一个区域名称

小贴士:
此步骤是初始化openstack,会把openstack的admin用户的信息写入到mysql的user表中,以及url等其他信息写入到mysql的相关表中;
admin-url是管理网(如公有云内部openstack管理网络),用于管理虚拟机的扩容或删除;如果共有网络和管理网是一个网络,则当业务量大时,会造成无法通过openstack的控制端扩容虚拟机,所以需要一个管理网;
internal-url是内部网络,进行数据传输,如虚拟机访问存储和数据库、zookeeper等中间件,这个网络是不能被外网访问的,只能用于企业内部访问
public-url是共有网络,可以给用户访问的(如公有云) #但是此环境没有这些网络,则公用同一个网络
5000端口是keystone提供认证的端口
需要在haproxy服务器上添加一条listen
各种网络的url需要指定controler节点的域名,一般是haproxy的vip的域名(高可用模式)

配置Apache HTTP服务器

echo "ServerName controller" >> /etc/httpd/conf/httpd.conf

创建配置文件

小贴士:
安装完mod_wsgi包后,会生成 wsgi-keystone.conf 这个文件,文件中配置了虚拟主机及监听了5000端口,mod_wsgi就是python的网关

ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

开启服务

systemctl enable httpd
systemctl start httpd

配置管理员账户的环境变量

小贴士:
这些环境变量用于创建角色和项目使用,但是创建角色和项目需要有认证信息,所以通过环境变量声明用户名和密码等认证信息,欺骗openstack已经登录且通过认证,这样就可以创建项目和角色;也就是把admin用户的验证信息通过声明环境变量的方式传递给openstack进行验证,实现针对openstack的非交互式操作

 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://controller:5000/v3
> export OS_IDENTITY_API_VERSION=3
> export OS_IMAGE_API_VERSION=2
> EOF
source ~/.bashrc

通过配置环境变量,可以使用openstack命令进行一些操作

openstack user list

在这里插入图片描述

三、创建OpenStack 域、项目、用户和角色

创建一个项目(project),创建在指定的domain(域)中,指定描述信息,project名称为service(可使用openstack domain list 查询)

openstack project create --domain default --description "Service Project" service 

在这里插入图片描述

创建角色(可使用openstack role list查看)

openstack role create user

在这里插入图片描述

查看openstack 角色列表

openstack role list

在这里插入图片描述
小贴士:
admin为管理员
member为 租户
user:用户

查看是否可以不指定密码就可以获取到token信息(验证认证服务)

openstack token issue

在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_650327.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?