
OpenStack Yoga版安装笔记(三)keystone安装
例如,您可以仅安装和配置计算服务和网络服务以构建基本的虚拟化环境,或者安装所有服务以构建全功能的私有云解决方案。通过为不同的用户或服务配置对某个服务不同端点的访问权限,可以有效地控制对服务的访问,从而保护服务的安全。OpenStack的身份认证服务(Keystone)为每个OpenStack服务提供认证服务,通过domain、project、user、role相互结合使用来实现这种认证服务。计算服
1、官方文档
OpenStack Installation Guidehttps://docs.openstack.org/install-guide/index.html本次安装是在Ubuntu 22.04上进行,基本按照OpenStack Installation Guide顺序执行,主要内容包括:
- 环境安装 (已完成)
- OpenStack服务安装
- 启动一个实例
现在进行OpenStack服务安装:
2、服务最小化部署安装
OpenStack系统由多个核心服务组成,有计算服务、身份认证服务、网络服务、镜像服务、块存储服务、对象存储服务、监控服务、自动化编排服务以及数据库服务。OpenStack服务可以独立安装和配置,也可以根据特定的云需求进行组合和连接。例如,您可以仅安装和配置计算服务和网络服务以构建基本的虚拟化环境,或者安装所有服务以构建全功能的私有云解决方案。每个服务都有其特定的功能和用途,可以根据实际需求进行灵活选择和部署。
本次安装将进行OpenStack Yoga版最小化部署(Minimal deployment for Yoga),顺序安装必须的核心服务:
3、基于Ubuntu 22.04安装Keystone
OpenStack身份认证服务代码为keystone,为了提高可扩展性,OpenStack Keystone 可以配置使用 Fernet 令牌和 Apache HTTP 服务器来处理请求。Fernet 令牌提供了一个安全的方式来生成和验证令牌,它们是 OpenStack 认证系统中的关键部分。主要安装内容有:
4、Identity service overview
OpenStack身份认证服务提供了一个集成点,用于管理身份认证、授权和服务目录。
身份认证服务通常是用户首先接触的服务。一旦用户通过身份认证,他们就可以使用他们的身份访问其他OpenStack服务。同样,其他OpenStack服务也利用身份认证服务来确保用户身份的真实性,并发现OpenStack部署中其他服务的位置。身份认证服务还可以与一些外部用户管理系统(如LDAP)集成。
用户和服务可以通过使用身份认证服务管理的服务目录(Service Catalog)来查找其他服务。顾名思义,服务目录是OpenStack部署中可用服务的集合。每个服务可以有一个或多个端点(endpoint,可以理解为服务访问点),每个端点可以是三种类型之一:admin、internal或public。在生产环境中,不同类型的端点可能位于不同的网络上,暴露给不同类型的用户以提高安全性。例如,public API网络可能对互联网开放,以便客户可以管理他们的云;admin API网络可能仅限于管理云基础设施的组织内部的操作人员访问;internal API网络可能仅限于包含OpenStack服务的主机访问。
服务端点(endpoint,可以理解为服务访问点)实际上是指向服务的URL地址。通过为不同的用户或服务配置对某个服务不同端点的访问权限,可以有效地控制对服务的访问,从而保护服务的安全。
此外,OpenStack支持多个区域(Region)以实现可扩展性。
为简化起见,本次安装使用管理网络来处理所有端点类型,并使用默认的RegionOne区域。区域、服务和在身份认证服务中创建的端点共同构成了部署的服务目录。部署中的每个OpenStack服务都需要在身份认证服务中存储一个服务条目及其相应的端点。这一切可以在安装和配置身份认证服务后完成。
以下是建立和管理 OpenStack 服务目录的一般过程:
1、服务注册(Service Registration):
- 当一个新的服务(例如 Nova、Glance、Cinder 等)在 OpenStack 环境中部署时,需要向 Keystone 注册。
- 注册时,服务需要提供以下信息:
- 服务名称(Name)
- 服务类型(Type)
- 服务描述(Description)
- 注册命令示例:
openstack service create --name <service_name> --description "<service_description>" <service_type>
2、端点创建(Endpoint Creation):
- 每个服务通常有多个端点(Endpoint),用于处理 API 请求。这些端点可以包括公共端点(public)、内部端点(internal)和管理端点(admin)。
- 每个端点的 URL 需要在 Keystone 中注册。
- 端点创建命令示例:
openstack endpoint create --region <region> <service_type> public http://<public_endpoint_url>
openstack endpoint create --region <region> <service_type> internal http://<internal_endpoint_url>
openstack endpoint create --region <region> <service_type> admin http://<admin_endpoint_url>
3、服务目录查询(Service Catalog Query):
- 当用户或其他服务进行身份认证时,Keystone 会返回一个认证令牌(Token)和服务目录。
- 服务目录包含所有可用服务及其端点信息。
- 用户可以使用命令行或 API 查询服务目录:
openstack catalog list
4、身份认证和授权(Authentication and Authorization):
- 用户或服务通过向 Keystone 提供凭据(如用户名和密码)进行认证。
- Keystone 验证凭据并颁发令牌。
- 令牌包含服务目录,用户可以使用该目录与其他 OpenStack 服务进行交互。
- 如下图所示:
通过以上步骤,Keystone 服务能够建立和管理 OpenStack 的服务目录,使得各个组件之间的交互和服务发现更加简便和高效。
由于身份认证服务(代号keystone)在身份验证、授权以及管理服务目录及服务端点方面的重要作用,它是 OpenStack 部署过程中第一个安装的服务。
5、Install and configure
本节介绍如何在控制节点上安装和配置 OpenStack 身份服务(代号为 keystone)。为了实现可扩展性,此配置部署了 Fernet 令牌和 Apache HTTP 服务器来处理请求。
注意OpenStack Yoga keystone安装版本为21.0.1。
5.1 Prerequisites
1、进入数据库
root@controller:~# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.6.18-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
2、创建keystone数据库
MariaDB [(none)]> CREATE DATABASE keystone;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| keystone |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.001 sec)
3、授予对 keystone 数据库的适当访问权限:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
-> IDENTIFIED BY 'openstack';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
-> IDENTIFIED BY 'openstack';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]>
这两条命令的作用是确保用户 keystone
能够从本地主机和远程主机都能访问并操作 keystone
数据库,并为其分配了所有权限。
4、退出DB
MariaDB [(none)]> quit
Bye
root@controller:~#
5.2 Install and configure components
1、安装keystone软件包:
root@controller:~# apt install keystone
2、编辑 /etc/keystone/keystone.conf
。[database]
root@controller:~# vi /etc/keystone/keystone.conf
...
[database]
# connection = sqlite:var/lib/keystone/keystone.db
connection = mysql+pymysql://keystone:openstack@controller/keystone
...
。[token]
...
[token]
...
provider = fernet
...
3、填充数据库:
root@controller:~# su -s /bin/sh -c "keystone-manage db_sync" keystone
root@controller:~#
4、初始化Fernet密钥库
在OpenStack的身份认证服务Keystone中,Fernet密钥用于加密和解密令牌,确保令牌的安全性。
root@controller:~# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
root@controller:~# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
root@controller:~#
5、启动或初始化OpenStack的身份服务(Keystone)
root@controller:~# keystone-manage bootstrap --bootstrap-password openstack \
> --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
root@controller:~#
5.3 Configure the Apache HTTP server
1、编辑/etc/apache2/apache2.conf
root@controller:~# vi /etc/apache2/apache2.conf
(可以在末尾添加)
...
ServerName controller
...
5.4 Finalize the installation
1、 Restart Apache service
root@controller:~# service apache2 restart
root@controller:~#
查看版本:
root@controller:~# keystone-manage --version
21.0.1
root@controller:~# sudo dpkg -l | grep keystone
ii keystone 2:21.0.1-0ubuntu1 all OpenStack identity service - Daemons
ii keystone-common 2:21.0.1-0ubuntu1 all OpenStack identity service - Common files
ii python3-keystone 2:21.0.1-0ubuntu1 all OpenStack identity service - Python 3 library
ii python3-keystoneauth1 4.4.0-0ubuntu1 all authentication library for OpenStack Identity - Python 3.x
ii python3-keystoneclient 1:4.4.0-0ubuntu1 all client library for the OpenStack Keystone API - Python 3.x
ii python3-keystonemiddleware 9.4.0-0ubuntu1.1 all Middleware for OpenStack Identity (Keystone) - Python 3.x
2、设置OpenStack客户端的环境变量
root@controller:~# export OS_USERNAME=admin
root@controller:~# export OS_PASSWORD=openstack
root@controller:~# export OS_PROJECT_NAME=admin
root@controller:~# export OS_USER_DOMAIN_NAME=Default
root@controller:~# export OS_PROJECT_DOMAIN_NAME=Default
root@controller:~# export OS_AUTH_URL=http://controller:5000/v3
root@controller:~# export OS_IDENTITY_API_VERSION=3
root@controller:~# openstack project list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| ee65b6c3961747b988ab8bd1cc19fb93 | admin |
+----------------------------------+-------+
root@controller:~# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 2947c213547147979dce3c8f8b85697f | admin |
+----------------------------------+-------+
root@controller:~# openstack service list
+----------------------------------+----------+----------+
| ID | Name | Type |
+----------------------------------+----------+----------+
| 75fe01049ec648b69e48d200971bf601 | keystone | identity |
+----------------------------------+----------+----------+
root@controller:~#
这些命令通常在配置OpenStack客户端时执行,以便能够通过命令行工具(如openstack
命令)与OpenStack服务进行交互。设置这些环境变量后,用户可以执行如创建、查询、更新或删除OpenStack资源的操作。
这里的OpenStackClient是安装在controller node上的。
3、设置OpenStack客户端的环境变量(在10.0.20.100节点上)
之前单独增加了一台虚机,安装了OpenStackClient,在上面设置环境变量后,也能进行操作。
ubcode@osclient:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:ff:20:81 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 10.0.20.100/24 brd 10.0.20.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feff:2081/64 scope link
valid_lft forever preferred_lft forever
ubcode@osclient:~$
ubcode@osclient:~$ export OS_USERNAME=admin
ubcode@osclient:~$ export OS_PASSWORD=openstack
ubcode@osclient:~$ export OS_PROJECT_NAME=admin
ubcode@osclient:~$ export OS_USER_DOMAIN_NAME=Default
ubcode@osclient:~$ export OS_PROJECT_DOMAIN_NAME=Default
ubcode@osclient:~$ export OS_AUTH_URL=http://controller:5000/v3
ubcode@osclient:~$ export OS_IDENTITY_API_VERSION=3
ubcode@osclient:~$
ubcode@osclient:~$ openstack project list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| ee65b6c3961747b988ab8bd1cc19fb93 | admin |
+----------------------------------+-------+
ubcode@osclient:~$ openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 2947c213547147979dce3c8f8b85697f | admin |
+----------------------------------+-------+
ubcode@osclient:~$ openstack service list
+----------------------------------+----------+----------+
| ID | Name | Type |
+----------------------------------+----------+----------+
| 75fe01049ec648b69e48d200971bf601 | keystone | identity |
+----------------------------------+----------+----------+
ubcode@osclient:~$
4、后续可能任意选择这两个虚机上的OpenStackClient进行OpenStack命令行操作,不再单独说明。
6、Create a domain, projects, users, and roles
OpenStack的身份认证服务(Keystone)为每个OpenStack服务提供认证服务,通过domain、project、user、role相互结合使用来实现这种认证服务。
1、创建domain
ubcode@osclient:~$ openstack domain create --description "An Example Domain" example
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | An Example Domain |
| enabled | True |
| id | f2a209f9e83040c9a619ca05c41e952b |
| name | example |
| options | {} |
| tags | [] |
+-------------+----------------------------------+
ubcode@osclient:~$
2、创建service project
ubcode@osclient:~$ openstack project create --domain default \
> --description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | fe9220b4131041e4b551b42b64a8f9ca |
| is_domain | False |
| name | service |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
ubcode@osclient:~$
3、创建unprivileged project and user:
。创建myproject project
ubcode@osclient:~$ openstack project create --domain default \
> --description "Demo Project" myproject
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | f5e75a3f7cc347ad89d20dcfe70dae01 |
| is_domain | False |
| name | myproject |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
ubcode@osclient:~$
。创建myuser user
ubcode@osclient:~$ openstack user create --domain default \
> --password-prompt myuser
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 9382b59561c04dd1abf0a4cb7a8252ec |
| name | myuser |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
ubcode@osclient:~$
。创建myrole role
ubcode@osclient:~$ openstack role create myrole
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | 83144b48ff1b4c54bb21d1fcb15921b5 |
| name | myrole |
| options | {} |
+-------------+----------------------------------+
ubcode@osclient:~$
。Add the myrole
role to the myproject
project and myuser
user:
ubcode@osclient:~$ openstack role add --project myproject --user myuser myrole
ubcode@osclient:~$
7、Verify operation
在安装其他OpenStack服务之前验证身份服务(Keystone)的运行情况是一个重要的步骤,以确保后续服务能够顺利集成和运行。
1、删除临时环境变量
ubcode@osclient:~$ unset OS_AUTH_URL OS_PASSWORD
2、admin user请求认证令牌
ubcode@osclient:~$ openstack --os-auth-url http://controller:5000/v3 \
> --os-project-domain-name Default --os-user-domain-name Default \
> --os-project-name admin --os-username admin token issue
Password:
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2024-06-28T15:01:17+0000 |
| id | gAAAAABmfsItWBsns2wi8w5Rn9OcxyrRIIZg_bFQ81JACK-7k9EaPhRReSl1NlZJXEFBz_eKChVxcFUTwHrWuZfO4YoxKEk82ilcqeFqn5FwDxuPfePzqhuJ5_n74XkMqaaB_AeeMbyntCB9WOpDf_VdlntFpIWwf37fvmg-8I3xxHLMkykU6lY |
| project_id | ee65b6c3961747b988ab8bd1cc19fb93 |
| user_id | 2947c213547147979dce3c8f8b85697f |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
ubcode@osclient:~$
2、myuser user请求认证令牌
ubcode@osclient:~$ openstack --os-auth-url http://controller:5000/v3 \
> --os-project-domain-name Default --os-user-domain-name Default \
> --os-project-name myproject --os-username myuser token issue
Password:
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2024-06-28T15:03:11+0000 |
| id | gAAAAABmfsKf5raLnqXivi0JZTAjCQPczzncgBzCwQ9yqiMy3dqkE6XZmVkV2g0swEGTrci8fdv6SjsR9ZdrigGfP18tpDlRkiVRBcH80PEX15-f_9oBDYyuuHFrj8GW6CzMSNnrIB3ZYRUXQdeRHfnATInZRJnB8IGw7fRgWjd0s8_d8_VwjVc |
| project_id | f5e75a3f7cc347ad89d20dcfe70dae01 |
| user_id | 9382b59561c04dd1abf0a4cb7a8252ec |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
ubcode@osclient:~$
8、Create OpenStack client environment scripts
OpenStack的OpenRC文件是一种方便的工具,它允许用户通过一个脚本文件设置OpenStack命令行客户端所需的所有环境变量。这可以提高客户端操作的效率,因为用户可以一次性配置所有必要的认证信息,之后在命令行中执行OpenStack命令时就不需要重复输入这些信息。OpenRC是"OpenStack RC (Resource Configuration)"的缩写。
8.1 Creating the scripts
1、创建admin-openrc文件:
ubcode@osclient:~$ vi admin-openrc
ubcode@osclient:~$ cat 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=openstack
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='\u@\h \W(admin/amdin)\$ ' <--显示当前project/user信息
ubcode@osclient:~$
2、创建demo-openrc
ubcode@osclient:~$ vi demo-openrc
ubcode@osclient:~$ cat demo-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='\u@\h \W(myproject/myuser)\$ '
ubcode@osclient:~$
8.2 Using the scripts
1. 运行admin-openrc
ubcode@osclient:~$ . admin-openrc
ubcode@osclient ~(admin/amdin)$ openstack token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2024-06-28T15:19:32+0000 |
| id | gAAAAABmfsZ0pNM6gG75A1x-3FRbiHRP3MxxaVHFyZ5C-JB7EtYZYdoUYJ3Y4XUfy5TF7aZjIsrgNeL4ipHsPGub8cf2Ze-6VtNgVhOa_2Jun0DBrkFpXdfS0EiUA5cbyavk95T6ff3FjX6yrm42HSirT4z0nmNKpWJXqoLaWUmsJuSpiNdB4qI |
| project_id | ee65b6c3961747b988ab8bd1cc19fb93 |
| user_id | 2947c213547147979dce3c8f8b85697f |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
ubcode@osclient ~(admin/amdin)$ openstack user list
+----------------------------------+--------+
| ID | Name |
+----------------------------------+--------+
| 2947c213547147979dce3c8f8b85697f | admin |
| 9382b59561c04dd1abf0a4cb7a8252ec | myuser |
+----------------------------------+--------+
ubcode@osclient ~(admin/amdin)$ openstack project list
+----------------------------------+-----------+
| ID | Name |
+----------------------------------+-----------+
| ee65b6c3961747b988ab8bd1cc19fb93 | admin |
| f5e75a3f7cc347ad89d20dcfe70dae01 | myproject |
| fe9220b4131041e4b551b42b64a8f9ca | service |
+----------------------------------+-----------+
ubcode@osclient ~(admin/amdin)$
2、运行demo-openrc
ubcode@osclient:~$ . demo-openrc
ubcode@osclient ~(myproject/myuser)$
ubcode@osclient ~(myproject/myuser)$ openstack token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2024-06-28T15:20:54+0000 |
| id | gAAAAABmfsbGneXiF-yaM9awfKpfqRvxCbcMCkXF5_h2FKhBf2nwhosBVGRza0fA4vV1-HLsvtc9xBZtKHvLm7RMWIYBFo353I5X2bFrUkfyK0_QepY3DrgNZUgCzszXEXtu1UnBdty9fwOGMsGiDvXWeDCQ9ujAX5hs6WB4puPTMmBvboTD9tI |
| project_id | f5e75a3f7cc347ad89d20dcfe70dae01 |
| user_id | 9382b59561c04dd1abf0a4cb7a8252ec |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
ubcode@osclient ~(myproject/myuser)$ openstack user list
You are not authorized to perform the requested action: identity:list_users. (HTTP 403) (Request-ID: req-93d93c8d-6362-474c-8595-dffaa72ab181)
ubcode@osclient ~(myproject/myuser)$ openstack project list
+----------------------------------+-----------+
| ID | Name |
+----------------------------------+-----------+
| f5e75a3f7cc347ad89d20dcfe70dae01 | myproject |
+----------------------------------+-----------+
ubcode@osclient ~(myproject/myuser)$
9、关闭虚机,拍摄快照
更多推荐
所有评论(0)