标簽(空測試用例格分隔):OpenStack Train 系列
一:keystone 元件
1.1. keystone 概述
keystone 是 OpenStack 的身份認證服務(Identity Service),OpenStack 中的認證、鑒權、角色管理都是由 keystone 來完成,同時還提供服務目錄注冊功
能。keystone 是一個關鍵服務,同時也是安裝 Openstack 時第一個要安裝的服務。
配置 keystone 時,需要為使用者建立合适的角色、服務、租戶、使用者賬号和服務 API 端點。
keystone 裡有相關概念需要了解。比如,租戶、角色、使用者。
1、租戶對應項目,它有一些資源,包括使用者、鏡像、執行個體,還有僅對該項目可見的網絡(如果建立網絡時沒有勾選“共享”)
2、一個使用者可隸屬于一個或多個項目(租戶),并且可以在這些項目間進行切換,部署 Openstack 至少要建立 admin 和 service 二個項目。
3、service 項目是一個特殊的項目,Openstack 自身服務都配置在 service 項目中,這樣做的目的是提高安全性。
4、一個使用者可以被指定成多種角色,即一個使用者可能會有多個項目,在不同項目中角色不同。例如,user1 同時在 project1 和 project2 中,在 project1
的角色是 admin,在 project2 的角色是 user。
5、openstack 中預設隻有 4 種角色,包括 admin(管理雲環境)、member(雲環境普通使用者角色)、reader、user
6、OpenStack keystone 服務托管在 httpd 上,修改配置後需要重新開機 httpd
1.2 安裝keystone
1、登入資料庫建立 keystone 資料庫
MariaDB [(none)]> CREATE DATABASE keystone default character set utf8;
建立并授予 keystone 使用者完全操作 keystone 權限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'openstack';
/*
說明:
openstack 的賬戶密碼設定中,不支援部分特殊符号,如“#”;openstack 本身對密碼的複雜度也沒有要求,可以設定為不帶特殊字元的密碼;若在設定
密碼時,一定要包含特殊符号,openstack 僅支援如下如下特殊字元:& = $ - _ . + ! * ( )
也可以對照官方文檔做實驗驗證,https://docs.openstack.org/install-guide/environment-security.html
*/
2、安裝 Keystone 軟體包并修改配置檔案
# yum -y install openstack-keystone httpd mod_wsgi
/*
說明:
配置檔案中能寫成主機名的就改成主機名,增強配置檔案通用性,便于快速部署。
*/
# cd /etc/keystone/ && mv keystone.conf keystone.conf.source && cat keystone.conf.source |grep -Ev "^#|^$" > keystone.conf && chown root:keystone keystone.conf
# vim /etc/keystone/keystone.conf
在[database]部分添加如下内容:
connection = mysql+pymysql://keystone:openstack@controller/keystone
在[token]部分添加如下内容:
expiration = 86400
# 令牌提供者為 fernet,即生成令牌方式
provider = fernet
配置可直接參考 keystone.conf
3、同步 Identity 服務的初始資料到 keystone 庫
# su -s /bin/sh -c "keystone-manage db_sync" keystone
4、初始化 Fernet 密鑰存儲庫
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
5、執行身份引導服務(會建立 endpoint)。
# keystone-manage bootstrap --bootstrap-password openstack2022 \
--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
/*
說明:
i、OpenStack 中每一個服務都運作在一個特定的 URL 和端口上,即有一個 API 位址,通常稱之為 API 服務端點,當一個用戶端通路 openstack 時,keystone
身份認證服務負責向其傳回 openstack 環境中各個服務的 API 位址,以便用戶端使用這些服務。是以配置每一個服務時都需要向 keystone 注冊其 API 地
址。Openstack 中可以定義多個區域,可以把不同的區域了解成不同的資料中心,它們有各自同不的 URL 或 IP 位址,在 Openstack 身份認證服務裡,可
以為每一個區域分别定義 API。預設隻有一個區域,且辨別為 RegionOne。
ii、修改--bootstrap-password 後為使用者 admin 的密碼,此處設定為 openstack2022
iii、執行身份引導服務後,就不需要再手功建立 identity 的 API,即以下 3 條指令不需要執行
openstack endpoint create --region RegionOne identity public http://controller:5000/v3
openstack endpoint create --region RegionOne identity internal http://controller:5000/v3
openstack endpoint create --region RegionOne identity admin http://controller:5000/v3
每個服務的 API 都會有 3 個 API 位址,公共(面向終端使用者)、内部(僅在本地區域網路内)、管理者(可以被有管理者權限的使用者使用),通過配置在
不同的 IP 段上來實作适當隔離。
*/

1.3 修改httpd 服務的主機名
1、修改 apache 配置檔案
# vi /etc/httpd/conf/httpd.conf
在 96 行增加如下内容
ServerName controller:80
2、建立軟連結。
# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
3、啟動 Apache HTTP 服務并配置其随系統啟動。
# systemctl enable httpd.service
# systemctl restart httpd.service
# netstat -nultp |grep 5000
4、配置管理者帳戶,并建立項目、域、使用者、角色
cat > /etc/keystone/admin-openrc.sh <<EOF
export OS_USERNAME=admin
export OS_PASSWORD=openstack2022
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
說明:admin-openrc.sh 用來定義相關環境變量
# source admin-openrc.sh
5、建立 service 項目、user 角色、域,default 域預設已經存在
openstack domain list
/*
建立新域 example,(僅用于測試,可以不建立)。
# openstack domain create --description "An Example Domain" example
# openstack domain list
建立普通項目 myproject(僅用于測試,可以不建立)。
# openstack project create --domain default --description "Demo Project" myproject
建立普通使用者 myuser(僅用于測試,可以不建立),密碼為 myuser。 # openstack user create --domain default --password-prompt myuser
建立角色(僅用于測試,可以不建立)
# openstack role create myrole
将 myrole 角色添加到 myproject 項目和 myuser 使用者(僅用于測試,可以不建立)。
# openstack role add --project myproject --user myuser myrole
# openstack role list
*/
一個租戶在 OpenStack 裡就是一個項目,建立使用者時必須先要有租戶(項目),同時還需要一個能配置設定給該使用者的角色,這樣建立的使用者才有意義。
建立 service 項目(租戶),service 項目将作為 OpenStack 的系統項目,所有系統服務都要加入到 service 項目中。
# openstack project create --domain default --description "Service Project" service
# openstack project list
建立 user 角色
# openstack role create user
# openstack role list
6、驗證 Keystone
# source /etc/keystone/admin-openrc.sh
# openstack token issue
取消環境變量,驗證
# unset OS_AUTH_URL OS_PASSWORD
使用 admin 使用者,請求身份驗證令牌。
# 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
輸入 admin 的密碼:openstack2022