第一步:安装openstack-keystone服务

安装Identity认证服务

简介

安装openstack时,必须先安装认证服务;
认证服务代号为keystone;
身份服务通常是用户与之交互的第一项服务。身份验证后,最终用户可以使用其身份访问其他OpenStack服务。同样,其他OpenStack服务利用身份服务来确保用户是他们所说的人(登录openstack后,想要对其他服务进行调用,其他服务也会到keystone去验证用户身份是否有权限,keystone会到mysql中查询用户的相关信息),并发现其他服务在部署中的位置。身份服务还可以与某些外部用户管理系统(例如LDAP)集成

Keystone 中主要涉及到如下几个概念:User、Tenant、Role、Token:
User:使用 openstack 的用户。
Tenant:租户,可以理解为一个人、项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源。
Role:角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。
Token:指的是一串比特值或者字符串,用来作为访问资源的记号。Token 中含有可访问资源的范围和有效时间,token 是用户的一种凭证,需要使用正确的用户名和密码向 Keystone 服务申请才能得到 token。(02)
1、用户想要访问openstack中的资源,需要先通过keystone做认证,keystone会到mysql中进行查询密码是否正确,如果正确keystone会给用户返还一个token;
2、拿到token后,用户会携带token去创建虚拟机等操作,创建虚拟机会携带token到nova中创建虚拟机,nova服务会向keystone发起请求,验证token是否有效,如果无误nova会携带token到glance服务请求创建虚拟机的镜像;
3、glance服务也会向keystone验证token的有效性,无误后就会把镜像返回给nova(glance会先到数据库查询镜像的元数据,如镜像id等,然后找到元数据后才会把镜像返还给nova);
4、nova会给虚拟机分配一个地址,所以nova会携带token向Neutron服务请求一个地址,Neutron会向keystone验证token的有效性,无误后会给nova返回一个虚拟机地址;
5、nova这样就拿到镜像和地址,就可以把虚拟机创建起来,创建成功后会给用户一个成功的返回;

需要到mysql中创建所需的数据库及账号

https://docs.openstack.org/keystone/train/install/keystone-install-rdo.html #参考文档

1、MariaDB [(none)]> CREATE DATABASE keystone;

2、MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone123';

3、mysql -ukeystone -pkeystone123 -h172.31.7.24   #在控制端通过VIP查看是否能够通过该账号密码连接

controller节点安装keystone服务

https://docs.openstack.org/keystone/train/install/keystone-install-rdo.html #参考文档

1、yum install openstack-keystone httpd mod_wsgi -y    
#mod_wsgi包的作用是让apache能够代理pythone程序的组件;openstack的各个组件,包括API都是用python写的,但访问的是apache,apache会把请求转发给python去处理;这些包只安装在controler节点

2、vim /etc/keystone/keystone.conf
[database]    #配置数据库访问
connection = mysql+pymysql://keystone:keystone123@openstack-vip.linux.local/keystone
#通过pymysql模块访问mysql,指定用户名密码、数据库的域名、数据库名

[token]       #配置Fernet令牌提供者
#expiration = 3600   #token有效期、
provider = fernet    #指定token的提供者;提供者就是keystone自己本身

3、vim /etc/hosts
172.31.7.248 openstack-vip.linux.local

4、su -s /bin/sh -c "keystone-manage db_sync" keystone  #初始化数据库,生成keystone相关表

5、keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
   keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
#初始化Fernet密钥存储库;使用的是fernet作为token的提供,需要生成两个秘钥;生成的秘钥会存放在 /etc/keystone/ 目录下生成两个目录,里面存放了加密的key,用于加密数据

6、keystone-manage bootstrap --bootstrap-password admin \ #指定admin用户的密码为admin
  --bootstrap-admin-url http://openstack-vip.linux.local:5000/v3/ \
  --bootstrap-internal-url http://openstack-vip.linux.local:5000/v3/ \
  --bootstrap-public-url http://openstack-vip.linux.local:5000/v3/ \
  --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的域名

7、vim /etc/httpd/conf/httpd.conf
ServerName 172.31.7.101:80   #指定controler的地址;只需要监听contoler地址即可
#在没有启动apache之前,是没有监听5000端口的,所以需要开启apache监听5000端口,作为controler的访问入口

8、ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
#安装完mod_wsgi包后,会生成 wsgi-keystone.conf 这个文件,文件中配置了虚拟主机及监听了5000端口,mod_wsgi就是python的网关

9、systemctl restart httpd

10、systemctl enable httpd

11、curl openstack-vip.linux.local:5000    #查看API是否能够返回json格式数据

12、vim admin.sh    #配置admin用户访问的环境变量;通过设置适当的环境变量来配置管理帐户
#!/bin/bash
export OS_USERNAME=admin
export OS_PASSWORD=admin       #这些信息在初始化openstack时都已经写入到数据库,有些可以保持默认
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://openstack-vip.linux.local:5000/v3
export OS_IDENTITY_API_VERSION=3
#这些环境变量用于创建角色和项目使用,但是创建角色和项目需要有认证信息,所以通过环境变量声明用户名和密码等认证信息,欺骗openstack已经登录且通过认证,这样就可以创建项目和角色;也就是把admin用户的验证信息通过声明环境变量的方式传递给openstack进行验证,实现针对openstack的非交互式操作

13、source admin.sh   #让环境变量生效

14、openstack user list  #通过声明的环境变量通过验证,就可以到openstack中执行某些操作


####测试
#身份服务为每个OpenStack服务提供身份验证服务。身份验证服务使用域,项目,用户和角色的组合。
region:地区、区域;一个region等于多个domain
domain:域,相当于机房级别;通过domain隔离不同的project;
project:项目,相当于公司内的一个业务;通过project隔离不同业务的服务
1、openstack domain create --description "An Example Domain" example  
#创建一个测试的domain,名称为example

2、openstack project create --domain default --description "Service Project" service
#创建一个项目,创建在指定的domain中,指定描述信息,project名称为service

3、openstack domain list   #查询创建的domain
 
4、openstack project create --domain default \  #创建一个project
  --description "Demo Project" myproject
  
  openstack user create --domain default \   #创建一个用户
  --password-prompt myuser  
  
5、openstack role create myrole   #创建一个role;role用于后期授权;此role是openstack内置的

6、openstack role add --project myproject --user myuser myrole
#给myproject项目添加一个用户myuser,并且把myuser用户与myrole进行绑定;即给项目内的myuser用户添加myrole的权限


###验证操作
1、unset OS_AUTH_URL OS_PASSWORD  #取消设置的两个临时环境变量

2、openstack --os-auth-url http://openstack-vip.linux.local:5000/v3 \
  --os-project-domain-name Default --os-user-domain-name Default \
  --os-project-name admin --os-username admin token issue  
#指定url,查询admin用户的token信息,数据是从mysql中查询的

3、openstack --os-auth-url http://openstack-vip.linux.local:5000/v3 \
  --os-project-domain-name Default --os-user-domain-name Default \
  --os-project-name myproject --os-username myuser token issue
#查询myuser用户的token信息

4、vim admin-openrc.sh
#!/bin/bash
export OS_PROJECT_DOMAIN_NAME=Default  #指定project,即admin用户拥有管理default这个project权限
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://openstack-vip.linux.local:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

5、source admin-openrc.sh   #让环境变量生效

6、openstack token issue    #查看是否可以不指定密码就可以获取到token信息

7、vim demo-openrc.sh       #测试myuser用户
#!/bin/bash
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=myuser
export OS_AUTH_URL=http://openstack-vip.linux.local:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

8、source demo-openrc.sh

9、openstack token issue    #测试myuser用户

https://docs.openstack.org/keystone/train/install/keystone-verify-rdo.html #验证的参考文档1

https://docs.openstack.org/keystone/train/install/keystone-openrc-rdo.html #验证的参考文档2

haproxy服务器配置

1、vim /etc/haproxy/haproxy.cfg
listen openstack-keystone-5000
 mode tcp
 bind 172.31.7.248:5000
 server 172.31.7.101 172.31.7.101:5000 check inter 3s fall 3 rise 5
 
2、systemctl restart haproxy.service 
posted on 2020-07-14 16:33  An.amazing.rookie  阅读(752)  评论(0编辑  收藏  举报