踏入OpenStack大門,Keystone元件部署

糖球溜溜發表於2020-12-18

一、Keystone元件概述

  • 部署openstack元件時,需先行安裝認證服務(keystone),而認證服務是使用Apache執行的,安裝完成後才可以建立、管理賬號,然後安裝映象服務(glance)、計算服務(nova)、網路服務(neutron)
  • 其中計算服務和網路服務分為管理端和客戶端,所以需要在openstack的管理端安裝計算服務和網路服務的管理端,在建立虛擬機器的node節點上安裝計算服務和網路服務的客戶端,最後安裝dashboard服務,openstack各種元件的API都是通過apache執行的;
  • openstack的管理端負責建立虛擬機器過程的排程
    通過openstack管理端建立虛擬機器的相關資料最終都會記錄到mysql(mariadb)中;node節點沒有許可權往資料庫中寫資料,只有控制端有許可權,並且node節點與控制端通訊是通過rabbitmq間接通訊,node節點會監聽rabbitmq,控制端也會監聽rabbitmq,控制端把建立虛擬機器的指令傳送到rabbitmq,由監聽rabbitmq指定佇列的node節點接收訊息並建立虛擬機器;

二、Keystone元件部署

  • 在完成OpenStack環境配置的基礎上進行Keystone元件的部署

2.1 建立資料庫例項和資料庫使用者

[root@ct ~]# mysql -u root -p
MariaDB [(none)]> create database keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit

2.2 安裝keystone、httpd、mod_wsgi

#mod_wsgi包的作用是讓apache能夠代理pythone程式的元件;openstack的各個元件,包括API都是用python寫的,但訪問的是apache,apache會把請求轉發給python去處理,這些包只安裝在controler節點
[root@ct ~]# yum -y install openstack-keystone httpd mod_wsgi
[root@ct ~]# cp -a /etc/keystone/keystone.conf{,.bak}
[root@ct ~]# grep -Ev "^$|#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf

#通過pymysql模組訪問mysql,指定使用者名稱密碼、資料庫的域名、資料庫名
[root@ct ~]# openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:KEYSTONE_DBPASS@ct/keystone

#指定token的提供者;提供者就是keystone自己本身
[root@ct ~]# openstack-config --set /etc/keystone/keystone.conf token provider fernet
#Fernet:一種安全的訊息傳遞格式

2.3 初始化認證服務資料庫

[root@ct ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone

2.4 初始化fernet 金鑰儲存庫

  • 以下命令會生成兩個金鑰,生成的金鑰放於/etc/keystone/目錄下,用於加密資料
[root@ct keystone]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@ct keystone]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

2.5 配置bootstrap身份認證服務

[root@ct ~]# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://ct:5000/v3/ \
--bootstrap-internal-url http://ct:5000/v3/ \
--bootstrap-public-url http://ct: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的域名(高可用模式)

2.6 配置Apache HTTP伺服器

[root@ct ~]# echo "ServerName controller" >> /etc/httpd/conf/httpd.conf

2.7 建立配置檔案

  • 安裝完mod_wsgi包後,會生成 wsgi-keystone.conf 這個檔案,檔案中配置了虛擬主機及監聽了5000埠,mod_wsgi就是python的閘道器
[root@ct ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

2.8 開啟服務

[root@ct conf.d]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@ct conf.d]# systemctl start httpd

2.9 配置管理員賬戶的環境變數

  • 這些環境變數用於建立角色和專案使用,但是建立角色和專案需要有認證資訊,所以通過環境變數宣告使用者名稱和密碼等認證資訊,欺騙openstack已經登入且通過認證,這樣就可以建立專案和角色;也就是把admin使用者的驗證資訊通過宣告環境變數的方式傳遞給openstack進行驗證,實現針對openstack的非互動式操作
[root@ct ~]# 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://ct:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF
[root@ct ~]# source ~/.bashrc

三、建立OpenStack 域、專案、使用者和角色

3.1 檢視user列表

[root@ct ~]# openstack user list

在這裡插入圖片描述

3.2 建立一個專案

  • 建立在指定的domain(域)中,指定描述資訊,project名稱為service(可使用openstack domain list 查詢)
[root@ct ~]# openstack project create --domain default --description "Service Project" service 

在這裡插入圖片描述

3.3 建立角色(可使用openstack role list檢視)

[root@ct ~]# openstack role create user

在這裡插入圖片描述

3.4 檢視openstack 角色列表

[root@ct ~]# openstack role list

在這裡插入圖片描述

  • admin為管理員;
  • member為 租戶;
  • user為使用者

3.5 檢視是否可以不指定密碼就可以獲取到token資訊(驗證認證服務)

[root@ct ~]#  openstack token issue

在這裡插入圖片描述

四、小結

  • Keystone 元件是作為OpenStack 叢集中統一認證、授權的模組,其核心功能就是針對於User(使用者)、Tenant(租戶)、Role(角色)、Token(令牌/憑證)的控制(手工編譯部署即圍繞此功能展開的)
    User:使用 openstack 的使用者。
    Tenant:租戶,可以理解為一個人、專案或者組織擁有的資源的合集。在一個租戶中可以擁有很多個使用者,這些使用者可以根據許可權的劃分使用租戶中的資源。
    Role:角色,用於分配操作的許可權。角色可以被指定給使用者,使得該使用者獲得角色對應的操作許可權。
    Token:指的是一串位元值或者字串,用來作為訪問資源的記號。Token 中含有可訪問資源的範圍和有效時間,token 是使用者的一種憑證,需要使用正確的使用者名稱和密碼向 Keystone 服務申請才能得到 token。
  • 使用手動部署的模式搭建OpenStack的思路:
    • 分模組部署
    • 部署keystone模組的基礎環境(下載依賴包、元件包、第三方工具/外掛)
    • 建立、開啟此模組的功能(以keystone為例,建立並初始化認證資料庫、修改配置檔案、初始化金鑰-fernet格式、配置身份認證服務)
    • 驗證

相關文章