一、Keystone介紹:
-
管理用戶及其權限
-
維護 OpenStack Services 的 Endpoint
-
Authentication(認證)和 Authorization(鑒權)

User


除了 admin 和 demo,OpenStack 也為 nova、cinder、glance、neutron 服務創建了相應的 User。 admin 也可以管理這些 User。

Credentials(資格證明)

Authentication(身份認證)

Token

-
Token 用做訪問 Service 的 Credential
-
Service 會通過 Keystone 驗證 Token 的有效性
-
Token 的有效期默認是 24 小時
Project

-
資源的所有權是屬於 Project 的,而不是 User。
-
在 OpenStack 的界面和文檔中,Tenant / Project / Account 這幾個術語是通用的,但長期看會傾向使用 Project
-
每個 User(包括 admin)必須掛在 Project 里才能訪問該 Project 的資源。 一個User可以屬於多個 Project。
-
admin 相當於 root 用戶,具有最高權限



Service

Endpoint

# source devstack/openrc admin admin# openstack catalog list

Role
-
Keystone定義Role
-
可以為 User 分配一個或多個 Role,Horizon 的菜單為:Identity->Project->ManageMembers

-
Service 決定每個 Role 能做什么事情 Service 通過各自的 policy.json 文件對 Role 進行訪問控制。 下面是 Nova 服務 /etc/nova/policy.json 中的示例:

一個是管理員admin
一個是租戶_member_
二、Keystone基本架構:

三、通過例子認識Keystone:
我們通過“查詢可用 image”這個實際操作讓大家對這些概念建立更加感性的認識。User admin 要查看 Project 中的 image













keystone環境部署

機器:3台
1:controller:3塊網卡(集群網,租戶網,外網)
2:compute:2塊網卡(集群網,租戶網)
3:storage:1塊網卡(集群網)
1)設置主機名,彼此域名解析,無密鑰登陸
vim /etc/hosts 192.168.253.135 controller 192.168.253.194 compute 192.168.253.15 storage ssh-keygen ssh-copy-id
2)點進openstack packages
在controller節點上:
安裝openstack客戶端軟件包
yum -y install python-openstackclient
安裝openstack-selinux軟件包
yum -y install openstack-selinux
3)點進SQL database
安裝數據庫
yum -y install mariadb mariadb-server python2-pymysql
並創建openstack的配置文件(注意連接數)
vim /etc/my.cnf.d/openstack.cnf
[mysqld] bind-address = 192.168.253.135(主節點集群ip) default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8
重啟自啟mariadb.server
systemctl restart(enable) mariadb.service
初始化mysql
mysql_secure_installation
4)點進Message queue
安裝rabbitmq並啟動自啟,創建openstack的用戶
yum -y install rabbitmq-server rabbitmqctl add_user openstack admin(密碼) #添加openstack用戶 rabbitmqctl set_permissions openstack ".*" ".*" ".*" #給予所有虛擬機的所有交換機的所有消息隊列的權限 rabbitmqctl set_user_tags mama administrator #設為管理員
systemctl restart rabbitmq-server.service
systemctl enable rabbitmq-server.service #開機自啟
5)點進Memcached
安裝memcache
yum -y install memcached python-memcached
修改配置文件寫入主機名
vim /etc/sysconfig/memecached
[root@controller ~]# cat /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 127.0.0.1,::1,controller"
重啟自啟memcached.service
systenctl restart memcached.service
systemctl enable memcached.service
6)點擊identity service——install and configure
登陸數據庫,創建keystone的用戶和數據庫以及密碼
create database keystone; grant all on keystone.* to keystone@'localhost' identified by 'KEYSTONE_DBPASS'; grant all on keystone.* to keystone@'%' identified by 'KEYSTONE_DBPASS';
安裝keystone服務,清空配置文件並導入
yum -y install openstack-keystone httpd mod_wsgi
Vim /etc/keystone/keystone.conf
數據庫的參數 [database] connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone Token的參數 [token] provider = fernet
導入keystone數據庫中的表
su -s /bin/sh -c "keystone-manage db_sync" keystone
創建keystone用戶和keystone組
# 創建keystone用戶與組
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# 身份信息認證
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
創建admin用戶的密碼,並宣告keystone服務端點(密碼,三個服務端點)
keystone-manage bootstrap --bootstrap-password admin \ --bootstrap-admin-url http://controller:35357/v3/ \ --bootstrap-internal-url http://controller:5000/v3/ \ --bootstrap-public-url http://controller:5000/v3/ \ --bootstrap-region-id RegionOne
修改apache服務的配置文件
ServerName controller
創建keystone服務調用httpd的模塊配置文件的軟連接
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
啟動httpd(注意apache端口不要被占用)
systemctl restart httpd
編輯環境變量的配置文件
vim openrc
export OS_USERNAME=admin export OS_PASSWORD=admin export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http://controller:35357/v3 export OS_IDENTITY_API_VERSION=3
7)點擊identity Create a domain, projects, users, and roles
宣告環境變量
source openrc
創建service 、 demo 的項目
在domain區域內創建一個名為server的服務項目
openstack project create --domain default \ --description "Service Project" service openstack project create --domain default \ --description "Demo Project" demo
創建demo的用戶
openstack user create --domain default \ --password-prompt demo
創建user的角色
openstack role create user
2.18、把demo用戶設置為user角色
openstack role add --project demo --user demo user
查看項目 user 角色等
openstack project list
openstack user list
openstack role list
openstack endpoint list
openstack catalog list
一些報錯:
1、
[root@controller conf.d]# openstack project create --domain default \ > --description "Service Project" service Failed to discover available identity versions when contacting http://controller:35357/v3. Attempting to parse version from URL. Unable to establish connection to http://controller:35357/v3/auth/tokens: HTTPConnectionPool(host='controller', port=35357): Max retries exceeded with url: /v3/auth/tokens (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x4ff8250>: Failed to establish a new connection: [Errno 111] \xe6\x8b\x92\xe7\xbb\x9d\xe8\xbf\x9e\xe6\x8e\xa5',))
原因:35357端口無法啟動
而造成35357端口無法啟動的原因有兩方面:
1)apache服務出現問題
解決方法:查看80端口是否有其他服務占用
[root@controller ~]# lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 20375 root 4u IPv6 85035 0t0 TCP *:http (LISTEN) httpd 20389 apache 4u IPv6 85035 0t0 TCP *:http (LISTEN) httpd 20393 apache 4u IPv6 85035 0t0 TCP *:http (LISTEN) httpd 20409 apache 4u IPv6 85035 0t0 TCP *:http (LISTEN) httpd 20410 apache 4u IPv6 85035 0t0 TCP *:http (LISTEN) httpd 20411 apache 4u IPv6 85035 0t0 TCP *:http (LISTEN) httpd 20603 apache 4u IPv6 85035 0t0 TCP *:http (LISTEN)
如果有就停掉其他服務或kill掉
2)wsgi配置文件出錯或者軟連接沒起作用
[root@controller ~]# cd /etc/httpd/conf.d/ [root@controller conf.d]# ls autoindex.conf README userdir.conf welcome.conf wsgi-keystone.conf [root@controller conf.d]# vim wsgi-keystone.conf [root@controller conf.d]# cat wsgi-keystone.conf Listen 5000 Listen 35357
2、
[root@controller ~]# openstack project create --domain default --description "Service Project" service
-bash: openstack: 未找到命令
這是因為keystoneclient客戶端安裝出了問題,嘗試重新安裝。
OpenStack排錯常用步驟和命令
1.查看日志
OpenStack的日志系統設計的非常棒。大多數的問題都能從日志中找到原因。
日志路徑通常在/var/log/下。
哪里有問題就去哪里找:去相應的日志文件夾查看日志。
比如上傳鏡像報錯,就去/var/log/glance/
如果實例啟動失敗,就去/var/log/nova下查看。注意nova的日志分布於controller節點和compute節點
Devstack 環境中的日志,不同版本是不一樣的。P版本之前采用screen命令查看, 而P版本開始用jounalctl 命令查看
2.端口被占用
比如keystone集成到apache里了,使用80端口。如果80端口被其他服務占用,那就完蛋了。
3.查看租戶/工程
租戶tenant和工程project在openstack中本質是一樣的。新版本已經不再區分這2個概念
openstack project list
4.檢查服務狀態
ps -aux | grep keystone 或者ps -ef | grep keystone
5.查看openstack發行版本
nova-manage --version 14.0.2 對應着N版本
查看所有的組件狀態:
openstack-status