文章目录
一、认证服务
1.概述
- 其它所用服务的调用都需要通过认证服务的认证来完成,并且它提供了目录服务,它存储了所有其它组件的API连接端点,即它提供了整个openstack集群的用户认证授权,每个组件在连接的时候需要申请什么样的资源都需要经过认证服务(keystone)的认证,获取token后去连接,连接的时候这个连接信息,就是要访问资源的location就在keystone的目录服务中,一旦认证通过,目录服务就会把这个连接端点传送过去
- 认证服务包含这些组件:
- 服务器:一个中心化的服务器使用RESTful 接口来提供认证和授权服务。
- 驱动: 驱动或服务后端被整合进集中式服务器中。它们被用来访问OpenStack外部仓库的身份信息, 并且它们可能已经存在于OpenStack被部署在的基础设施(例如,SQL数据库或LDAP服务器)中。
- 模块:中间件模块运行于使用身份认证服务的OpenStack组件的地址空间中。这些模块拦截服务请求,取出用户凭据,并将它们送入中央是服务器寻求授权。中间件模块和OpenStack组件间的整合使用Python Web服务器网关接口。
2.安装和配置
1) 先决条件
[root@controller ~]# mysql -u root -p ##用数据库连接客户端以 root 用户连接到数据库服务器
Enter password:
MariaDB [(none)]> CREATE DATABASE keystone; ##创建 keystone 数据库
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone'; #对keystone数据库授予权限
[root@controller ~]# mysql -u keystone -p
2) 安全并配置组件
[root@controller ~]# yum install openstack-keystone httpd mod_wsgi -y #安装相关包,认证服务将会通过apache的wsgi模块来启动
[root@controller ~]# openssl rand -hex 10 ##生成一个随机值在初始的配置中作为管理员的令牌
c6ad1e2b4e05df0aea27
[root@controller ~]# vim /etc/keystone/keystone.conf
[DEFAULT]
admin_token = c6ad1e2b4e05df0aea27 ##定义初始管理令牌的值
[database] ##配置数据库访问
connection = mysql+pymysql://keystone:keystone@controller/keystone
[token] ##配置Fernet UUID令牌的提供者
provider = fernet
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone ##初始化身份认证服务的数据库
[root@controller ~]# mysql -pwestos
MariaDB [(none)]> use keystone
MariaDB [keystone]> show tables;
[root@controller ~]# id keystone
uid=163(keystone) gid=163(keystone) groups=163(keystone)
[root@controller keystone]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone ##初始化Fernet keys
3) 配置 Apache HTTP 服务器
##认证服务使用带有mod_wsgi的Apache HTTP服务器来服务认证服务请求,端口为5000和35357。缺省情况下,Kestone服务仍然监听这些端口
[root@controller keystone]# vim /etc/httpd/conf/httpd.conf
ServerName controller ##配置``ServerName`` 选项为控制节点
[root@controller keystone]# vim /etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000
Listen 35357
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
<Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
<Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost>
##完成安装
[root@controller keystone]# systemctl enable --now httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@controller keystone]# netstat -antlp
3. 创建服务实体和API端点
身份认证服务提供服务的目录和他们的位置。每个你添加到OpenStack环境中的服务在目录中需要一个service实体和一些API endpoints。
默认情况下,身份认证服务数据库不包含支持传统认证和目录服务的信息。因此我们需要使用“先决条件”章节中为身份认证服务创建的临时身份验证令牌用来初始化的服务实体和API端点。
1) 先决条件
[root@controller keystone]# head /etc/keystone/keystone.conf
[DEFAULT]
admin_token = c6ad1e2b4e05df0aea27
[root@controller keystone]# export OS_TOKEN=c6ad1e2b4e05df0aea27 ##配置认证令牌
[root@controller keystone]# export OS_URL=http://controller:35357/v3 ##配置端点URL
[root@controller keystone]# export OS_IDENTITY_API_VERSION=3 ##配置认证 API 版本
2) 创建服务实体和API端点¶
[root@controller keystone]# openstack service create --name keystone --description "OpenStack Identity" identity ##创建服务实体和身份认证服务
[root@controller keystone]# openstack service list
##创建认证服务的 API 端点
[root@controller keystone]# openstack endpoint create --region RegionOne identity public http://controller:5000/v3
[root@controller keystone]# openstack endpoint create --region RegionOne identity internal http://controller:5000/v3
[root@controller keystone]# openstack endpoint create --region RegionOne identity admin http://controller:35357/v3
3. 创建域、项目、用户和角色
身份认证服务为每个OpenStack服务提供认证服务。
##1. 创建域``default``:
[root@controller keystone]# openstack domain create --description "Default Domain" default
##2. 为进行管理操作,创建管理的项目、用户和角色:
##创建 admin 项目:
[root@controller keystone]# openstack project create --domain default --description "Admin Project" admin
##创建 admin 用户:
[root@controller keystone]# openstack user create --domain default --password admin admin
##创建 admin 角色:
[root@controller keystone]# openstack role create admin
##添加``admin`` 角色到 admin 项目和用户上:
[root@controller keystone]# openstack role add --project admin --user admin admin
## 3. 本指南使用一个你添加到你的环境中每个服务包含独有用户的service 项目。创建``service``项目:
[root@controller keystone]# openstack project create --domain default --description "Service Project" service
##4. 常规(非管理)任务应该使用无特权的项目和用户。作为例子,本指南创建 demo 项目和用户。
##创建``demo`` 项目:
[root@controller keystone]# openstack project create --domain default --description "Demo Project" demo
##创建``demo`` 用户:
[root@controller keystone]# openstack user create --domain default --password demo demo
## 创建 user 角色:
[root@controller keystone]# openstack role create user
##添加 user``角色到 ``demo 项目和用户:
[root@controller keystone]# openstack role add --project demo --user demo user
4. 验证操作
在控制节点上执行这些命令。
##1. 重置``OS_TOKEN``和``OS_URL`` 环境变量:
[root@controller keystone]# unset OS_TOKEN OS_URL
##2. 作为 admin 用户,请求认证令牌:
[root@controller keystone]# openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
password:admin
## 3. 作为``demo`` 用户,请求认证令牌:
[root@controller keystone]# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue
password:demo
5.创建 OpenStack 客户端环境脚本
前一节中使用环境变量和命令选项的组合通过openstack客户端与身份认证服务交互。为了提升客户端操作的效率,OpenStack支持简单的客户端环境变量脚本即OpenRC 文件。这些脚本通常包含客户端所有常见的选项,当然也支持独特的选项。
## 为admin和demo项目和用户创建客户端环境变量脚本。
[root@controller ~]# vim admin-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
[root@controller ~]# vim demo-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
[root@controller ~]# source admin-openrc ##使用脚本
[root@controller ~]# openstack token issue ##请求认证令牌
[root@controller ~]# openstack user list
[root@controller ~]# openstack project list
[root@controller ~]# openstack endpoint list
[root@controller ~]# source demo-openrc ##切换到demo用户后将不能查看相关信息
编辑文件 admin-openrc 并添加如下内容:
编辑文件 demo-openrc 并添加如下内容:
二、镜像服务
1. 概述
OpenStack镜像服务包括以下组件:
- glance-api: 接收镜像API的调用,诸如镜像发现、恢复、存储。
- glance-registry: 存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型。
- 数据库: 存放镜像元数据,用户是可以依据个人喜好选择数据库的,多数的部署使用MySQL或SQLite。
- 镜像文件的存储仓库: 支持多种类型的仓库,它们有普通文件系统、对象存储、RADOS块设备、HTTP、以及亚马逊S3。记住,其中一些仓库仅支持只读方式使用。
- 元数据定义服务: 通用的API,是用于为厂商,管理员,服务,以及用户自定义元数据。这种元数据可用于不同的资源,例如镜像,工件,卷,配额以及集合。一个定义包括了新属性的键,描述,约束以及可以与之关联的资源的类型。
2. 先决条件
安装和配置镜像服务之前,你必须创建创建一个数据库、服务凭证和API端点。
## 1. 完成下面的步骤以创建数据库:
[root@controller ~]# mysql -pwestos ####用数据库连接客户端以 root 用户连接到数据库服务器
MariaDB [(none)]> CREATE DATABASE glance; ##创建 glance 数据库:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance'; ##对``glance``数据库授予恰当的权限
##2. 创建服务证书
##创建 glance 用户:
[root@controller ~]# openstack user create --domain default --password glance glance
####添加 admin 角色到 glance 用户和 service 项目上
[root@controller ~]# openstack role add --project service --user glance admin
##创建``glance``服务实体:
[root@controller ~]# openstack service create --name glance --description "OpenStack Image" image
##3. 创建镜像服务的 API 端点:
[root@controller ~]# openstack endpoint create --region RegionOne image public http://controller:9292
[root@controller ~]# openstack endpoint create --region RegionOne image internal http://controller:9292
[root@controller ~]# openstack endpoint create --region RegionOne image admin http://controller:9292
3. 安全并配置组件
[root@controller ~]# yum install openstack-glance -y ##安装软件包
[root@controller ~]# vim /etc/glance/glance-api.conf
[database] ##配置数据库访问
connection = mysql+pymysql://glance:glance@controller/glance
[keystone_authtoken] ##配置认证服务访问
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance
[paste_deploy] ##配置认证服务访问
flavor = keystone
[glance_store] ##配置本地文件系统存储和镜像文件位置
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
[root@controller ~]# vim /etc/glance/glance-registry.conf
[database] ##配置数据库访问
connection = mysql+pymysql://glance:glance@controller/glance
[keystone_authtoken] ##配置认证服务访问
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance
[paste_deploy] ##配置认证服务访问
flavor = keystone
##写入镜像服务数据库 注意:忽略输出中任何不推荐使用的信息。
[root@controller ~]# su -s /bin/sh -c "glance-manage db_sync" glance
##完成安装 启动镜像服务
[root@controller ~]# systemctl enable openstack-glance-api.service openstack-glance-registry.service
[root@controller ~]# systemctl start openstack-glance-api.service openstack-glance-registry.service
4. 验证操作
使用 CirrOS对镜像服务进行验证,CirrOS是一个小型的Linux镜像可以用来帮助你进行 OpenStack部署测试。
[root@controller ~]# ls
admin-openrc cirros-0.4.0-x86_64-disk.img demo-openrc
[root@controller ~]# ll /var/lib/glance/images/
total 0
## 下载源镜像:
$ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
##使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它
[root@controller ~]# openstack image create "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --public
[root@controller ~]# openstack image list ##确认镜像的上传并验证属性
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| 056000b1-4411-44bf-af4a-ca06064d68cf | cirros | active |
+--------------------------------------+--------+--------+
[root@controller ~]# ll /var/lib/glance/images/
total 12420
-rw-r----- 1 glance glance 12716032 May 24 19:31 056000b1-4411-44bf-af4a-ca06064d68cf