文章目錄
- 一:專案拓撲
- 1.1:環境介紹
- 二:系統環境配置
- 1:安裝、配置MariaDB
- 2:安裝RabbitMQ
- 3:安裝memcached
- 三:Keystone服務
- OpenStack組件安裝的順序
- 1:創建資料庫實體和資料庫用戶
- 2:安裝、配置keystone、資料庫、Apache
- 配置Apache HTTP服務器
- 創建OpenStack 域、專案、用戶和角色
一:專案拓撲

1.1:環境介紹
| 主機名 | 記憶體 | 硬碟 | 網卡 | 系統 |
|---|---|---|---|---|
| ct | 8G | 300G+300G | VM1:192.168.100.110 NAT:192.168.158.110 | Centos-7.6 |
| c1 | 8G | 300G+300G | VM1:192.168.100.120 NAT:192.168.158.120 | Centos-7.6 |
| c2 | 8G | 300G+300G | VM1:192.168.100.130 NAT:192.168.158.130 | Centos-7.6 |
yum -y install net-tools bash-completion vim gcc gcc-c++ make pcre pcre-devel expat-devel cmake bzip2
yum -y install centos-release-openstack-train python-openstackclient openstack-selinux openstack-utils
- 若安裝不上,下載阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum list
- 三臺節點做免密登錄
[root@ct ~]# ssh-keygen -t rsa
[root@ct ~]# ssh-copy-id ct
[root@ct ~]# ssh-copy-id c1
[root@ct ~]# ssh-copy-id c2
- 時間同步
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#并添加以下內容:(表示與本機同步時間)
server 192.168.100.110 iburst
#同樣在客戶端注釋掉其他server,并在客戶端(192.168.158.120/130)添加以下:
server 192.168.100.110 iburst
[root@ct ~]# systemctl enable chronyd
[root@ct ~]# systemctl restart chronyd
[root@localhost ~]# crontab -l
*/2 * * * * /usr/bin/chronyc sources >> /var/log/chronyc.log
二:系統環境配置
1:安裝、配置MariaDB
[root@ct ~]# yum -y install mariadb mariadb-server python2-PyMySQL
#此包用于openstack的控制端連接mysql所需要的模塊,如果不安裝,則無法連接資料庫;此包只安裝在控制端
[root@ct ~]# yum -y install libibverbs
- 添加MySQL子組態檔,增加如下內容
[root@ct ~]# vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 192.168.100.11 #控制節點局域網地址
default-storage-engine = innodb #默認存盤引擎
innodb_file_per_table = on #每張表獨立表空間檔案
max_connections = 4096 #最大連接數
collation-server = utf8_general_ci #默認字符集
character-set-server = utf8
[root@ct my.cnf.d]# systemctl enable mariadb
[root@ct my.cnf.d]# systemctl start mariadb
- 執行MariaDB 安全配置腳本
[root@ct my.cnf.d]# mysql_secure_installation
Enter current password for root (enter for none): #回車
OK, successfully used password, moving on...
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
... Success!
Disallow root login remotely? [Y/n] N
... skipping.
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
2:安裝RabbitMQ
- 所有創建虛擬機的指令,控制端都會發送到rabbitmq,node節點監聽rabbitmq
[root@ct ~]# yum -y install rabbitmq-server
#配置服務,啟動RabbitMQ服務,并設定其開機啟動,
[root@ct ~]# systemctl enable rabbitmq-server.service
[root@ct ~]# systemctl start rabbitmq-server.service
- 創建訊息佇列用戶,用于controler和node節點連接rabbitmq的認證
[root@ct ~]# rabbitmqctl add_user openstack RABBIT_PASS
Creating user "openstack"
- 配置openstack用戶的操作權限(正則,配置讀寫權限)
[root@ct ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"
可查看25672和5672 兩個埠(5672是Rabbitmq默認埠,25672是Rabbit的測驗工具CLI的埠)
- 查看rabbitmq插件串列
[root@ct ~]# rabbitmq-plugins list
- 開啟rabbitmq的web管理界面的插件,埠為15672
[root@ct ~]# rabbitmq-plugins list
- 開啟rabbitmq的web管理界面的插件,埠為15672
[root@ct ~]# rabbitmq-plugins enable rabbitmq_management
- 檢查埠(25672 5672 15672)
[root@localhost ~]# ss -natp | grep 5672
LISTEN 0 128 *:25672 *:* users:(("beam.smp",pid=31356,fd=46))
LISTEN 0 128 *:15672 *:* users:(("beam.smp",pid=31356,fd=57))
LISTEN 0 128 :::5672 :::* users:(("beam.smp",pid=31356,fd=55))


3:安裝memcached
作用
安裝memcached是用于存盤session資訊;服務身份驗證機制使用Memcached來快取令牌 在登錄openstack的dashboard時,會產生一些session資訊,這些session資訊會存放到memcached中
- 安裝Memcached
[root@ct ~]# yum install -y memcached python-memcached
#python-*模塊在OpenStack中起到連接資料庫的作用
- 修改Memcached組態檔
[root@ct ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1,::1,ct"
[root@ct ~]# systemctl enable memcached
[root@ct ~]# systemctl start memcached
[root@ct ~]# netstat -nautp | grep 11211
tcp 0 0 192.168.100.110:11211 0.0.0.0:* LISTEN 33070/memcached
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 33070/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 33070/memcached
- 安裝etcd
[root@ct ~]# yum -y install etcd
- 修改etcd組態檔
[root@ct ~]# cd /etc/etcd/
[root@ct etcd]# ls
etcd.conf
[root@ct etcd]# vim etcd.conf
- 修改etcd組態檔
[root@ct ~]# vi /etc/etcd/etcd.conf
3行 ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
5行 ETCD_LISTEN_PEER_URLS="http://192.168.100.11:2380"
6行 ETCD_LISTEN_CLIENT_URLS="http://192.168.100.11:2379"
9行 ETCD_NAME="ct"
20行 ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.100.11:2380"
21行 ETCD_ADVERTISE_CLIENT_URLS="http://192.168.100.11:2379
26行 ETCD_INITIAL_CLUSTER="ct=http://192.168.100.11:2380"
27行 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" #集群唯一標識
28行 ETCD_INITIAL_CLUSTER_STATE="new" #初始集群狀態,new為靜態,若為existing,則表示此ETCD服務將嘗試加入已有的集群
若為DNS,則表示此集群將作為被加入的物件
- 開機自啟動、開啟服務,檢測埠
[root@ct ~]# systemctl enable etcd.service
[root@ct ~]# systemctl start etcd.service
[root@ct ~]# netstat -anutp |grep 2379
tcp 0 0 192.168.100.110:2379 0.0.0.0:* LISTEN 33915/etcd
tcp 0 0 192.168.100.110:36888 192.168.100.110:2379 ESTABLISHED 33915/etcd
tcp 0 0 192.168.100.110:2379 192.168.100.110:36888 ESTABLISHED 33915/etcd
[root@ct ~]# netstat -anutp |grep 2380
tcp 0 0 192.168.100.110:2380 0.0.0.0:* LISTEN 33915/etcd
三:Keystone服務
Keystone 組件是作為OpenStack 集群中統一認證、授權的模塊,其核心功能就是針對于User(用戶)、Tenant(租戶)、Role(角色)、Token(令牌/憑證)的控制(手工編譯部署即圍繞此功能展開的)
User:使用 openstack 的用戶,
Tenant:租戶,可以理解為一個人、專案或者組織擁有的資源的合集,在一個租戶中可以擁有很多個用戶,這些用戶可以根據權限的劃分使用租戶中的資源,
Role:角色,用于分配操作的權限,角色可以被指定給用戶,使得該用戶獲得角色對應的操作權限,
Token:指的是一串位元值或者字串,用來作為訪問資源的記號,Token 中含有可訪問資源的范圍和有效時間,token 是用戶的一種憑證,需要使用正確的用戶名和密碼向 Keystone 服務申請才能得到 token,
OpenStack組件安裝的順序
1、Keystone(apache)
2、glance
3、nova
4、neutron
部署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節點接收訊息并創建虛擬機;
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:安裝、配置keystone、資料庫、Apache
安裝keystone、httpd、mod_wsgi
mod_wsgi包的作用是讓apache能夠代理python程式的組件;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:一種安全的訊息傳遞格式
#初始化認證服務資料庫
[root@ct ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
#初始化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
#配置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的控制端擴容虛擬機,所以需要一個管理網;
-
nternal-url是內部網路,進行資料傳輸,如虛擬機訪問存盤和資料庫、zookeeper等中間件,這個網路是不能被外網訪問的,只能用于企業內部訪問
-
public-url是共有網路,可以給用戶訪問的(如公有云) #但是此環境沒有這些網路,則公用同一個網路
-
5000埠是keystone提供認證的埠
-
需要在haproxy服務器上添加一條listen
-
各種網路的url需要指定controler節點的域名,一般是haproxy的vip的域名(高可用模式)
配置Apache HTTP服務器
[root@ct ~]# echo "ServerName controller" >> /etc/httpd/conf/httpd.conf
創建組態檔
#安裝完mod_wsgi包后,會生成 wsgi-keystone.conf 這個檔案,檔案中配置了虛擬主機及監聽了5000埠,mod_wsgi就是python的網關
[root@ct ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
開啟服務
[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
配置管理員賬戶的環境變數
#這些環境變數用于創建角色和專案使用,但是創建角色和專案需要有認證資訊,所以通過環境變數宣告用戶名和密碼等認證資訊,欺騙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命令進行一些操作,示例:
[root@ct ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| f749cca073744c05869d7f609f100447 | admin |
+----------------------------------+-------+
創建OpenStack 域、專案、用戶和角色
創建一個專案(project),創建在指定的domain(域)中,指定描述資訊,project名稱為service(可使用openstack domain list 查詢)
[root@ct ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | 90a0e48b200e486db3970555dbd18ab3 |
| is_domain | False |
| name | service |
| options | {} |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
創建角色(可使用openstack role list查看)
[root@ct ~]# openstack role create user
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | 7748ab248ac74fbebc46ee899b6506ff |
| name | user |
| options | {} |
+-------------+----------------------------------+
查看openstack 角色串列
[root@ct ~]# openstack role list
+----------------------------------+--------+
| ID | Name |
+----------------------------------+--------+
| 473c0181ebe74408b7845fba9ce36622 | member |
| 7748ab248ac74fbebc46ee899b6506ff | user |
| 7f1792c3583c4b328dc68f1869d36dd2 | admin |
| 94bd1ce5e69b40fe999118323683df71 | reader |
+----------------------------------+--------+
# admin為管理員
# member為 租戶
# user:用戶
查看是否可以不指定密碼就可以獲取到token資訊(驗證認證服務)
[root@ct ~]# openstack token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2020-12-15T13:02:07+0000 |
| id | gAAAAABf2KW__4pZumRxIbamAn4e3V63mY8Ik_pjW8mkN3y4ZbzA7PKBUQL7TCnqgRY2KN0noE0HH_ABsdPrdNkhZzTx4zA1B26_tEeAb8Z4UUfNC-N7nh2E5BKp8jpMyKEqDCLVLPxyUk56L9BU_dkVcBhGyn9DB8DZzvJudkTztbqfuYNoFgc |
| project_id | c30373f73a61489a87327d89d9f25b50 |
| user_id | 65c9a26e9d474cc98332fa882db61b94 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/235429.html
標籤:其他
