Keystone作用
用户与认证:用户权限与用户行为跟踪:
服务目录:提供一个服务目录,包括所有服务项与相关Api的端点,它是个注册中心
服务目录名字介绍
Service
Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务可以确认当前用户是否具有访问其资源的权限。
但是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里通常使用一些不同的名称表示不同的服务。
Endpoint
Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。
因此,在keystone中包含一个endpoint模板,这个模板提供了所有存在的服务endpoints信息。
一个endpointtemplate包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。
public url可以被全局访问;private url只能被局域网访问;admin url被从常规的访问中分离。
用户认证名字介绍
Token
Token是访问资源的钥匙。它是通过Keystone验证后的返回值,在之后的与其他服务交互中只需要携带Token值即可。
每个Token都有一个有效期,Token只在有效期内是有效的。
Role
Role即角色,Roles代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。
Users可以被添加到任意一个全局的或租户的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;
在租户内的role中,用户仅能在当前租户内执行role规定的权限。
Tenant
Tenant即租户,现在改成了项目。它是各个服务中的一些可以访问的资源集合。例如,在Nova中一个tenant可以是一些机器,
在Swift和Glance中一个tenant可以是一些镜像存储,在Neutron中一个tenant可以是一些网络资源。Users默认的总是绑定到某些tenant上。
User
User即用户,他们代表可以通过keystone进行访问的人或程序。Users通过认证信息(credentials,如密码、API Keys等)进行验证。
一个项目可以有多个用户
一个用户可以属于一个或多个项目
用户对项目和操作权限由用户在项目中的角色决定
KeyStone安装和配置
1、安装keystone包
以前版本,把token放在了数据库里,keystone 的token表会越来越大,几千万行,后面就响应很慢了,你可以truncate这个表,但是不要在创建虚拟机的时候截断表现在改成了可以把token放在memcache里面,读的更快,同时memcached里也可以设置过期时间
python-memcached是使用python连接memcached的,因为连接过去,keystone会返回一个token。
httpd这个包用来运行keystone的服务,mod_wsgi 它是python的一个模块,有了它,就可以让keystone在apache运行为什么现在用到了memcached呢
[root@node1 ~]# yum install -y openstack-keystone httpd mod_wsgi memcached python-memcached
2、更改keystone配置文件
keystone是管理认证的,我想在里面创建用户,如果像rabbitmq有个默认用户也行
现在是没有用户,怎么连上去创建用户呢,这里就用到了admin_token
使用admin_token不用任何用户就可以连接上keystone,先配置下admin_token
我们使用一个随机的值替换默认的admin,手动随机一个字符串
[root@node1 ~]# openssl rand -hex 10
8b25b7333279fa64a831
1)更改keystone配置文件/etc/keystone/keystone.conf
另外配置文件必须顶头写,在admin_token前面不要有空格
2)[database]模块下,更改数据库连接,如下:
connection = mysql+pymysql://keystone:keystone@192.168.1.2/keystone
3)配置memcached连接配置
keystone中memcache的作用
把用户名密码验证之后生成token,放在memcache里面的,来提高性能
其实你的memcache也可以安装在任意一台机器上,如下:
servers = 192.168.1.2:11211
4)[token]模块下,配置令牌提供者,fernet方式比uuid更安全,配置driver为memcache,表示把另外放在memcache空间里
provider = fernet
driver = memcache
如上配置具体如下:
[root@node1 ~]# cat /etc/keystone/keystone.conf|grep -v "^#"|grep -v "^$"
[DEFAULT]
admin_token = 8b25b7333279fa64a831
[assignment]
[auth]
[cache]
[catalog]
[cors]
[cors.subdomain]
[credential]
[database]
connection = mysql+pymysql://keystone:keystone@192.168.1.2/keystone
[domain_config]
[endpoint_filter]
[endpoint_policy]
[eventlet_server]
[eventlet_server_ssl]
[federation]
[fernet_tokens]
[identity]
[identity_mapping]
[kvs]
[ldap]
[matchmaker_redis]
[memcache]
servers = 192.168.1.2:11211
[oauth1]
[os_inherit]
[oslo_messaging_amqp]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[paste_deploy]
[policy]
[resource]
[revoke]
[role]
[saml]
[shadow_users]
[signing]
[ssl]
[token]
provider = fernet
driver = memcache
[tokenless_auth]
[trust]
[root@node1 ~]#
3、同步数据库执行建表操作
初始化身份认证服务的数据库
[root@node1 ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
为什么要切换到keystone用户下执行这个命令呢
如果你上面不切换到keystone用户执行,也能执行成功,但是这个log文件属主就是root了
后面启动keystone服务,它要写这个日志文件,root属主的文件它无法写入,就启动不成功了
上面命令执行完毕,日志属主都是keystone用户下的了。
[root@node1 ~]# ll /var/log/keystone/keystone.log
-rw-r--r--. 1 keystone keystone 4402 Jul 30 12:44 /var/log/keystone/keystone.log
+------------------------+
| Tables_in_keystone |
+------------------------+
| access_token |
| assignment |
| config_register |
| consumer |
| credential |
| domain |
| endpoint |
| endpoint_group |
| federated_user |
| federation_protocol |
| group |
| id_mapping |
| identity_provider |
| idp_remote_ids |
| implied_role |
| local_user |
| mapping |
| migrate_version |
| password |
| policy |
| policy_association |
| project |
| project_endpoint |
| project_endpoint_group |
| region |
| request_token |
| revocation_event |
| role |
| sensitive_config |
| service |
| service_provider |
| token |
| trust |
| trust_role |
| user |
| user_group_membership |
| whitelisted_config |
+------------------------
4、初始化Fernet keys,创建证书
[root@node1 ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
上述命令执行完,它会创建下面这个目录fernet-keys,同时注意keyston.conf的文件权限
[root@node1 ~]# cd /etc/keystone/
[root@node1 keystone]# ls -l
total 100
-rw-r-----. 1 root keystone 2303 Feb 1 22:54 default_catalog.templates
drwx------. 2 keystone keystone 24 Jul 30 12:46 fernet-keys
-rw-r-----. 1 root keystone 73244 Jul 30 12:34 keystone.conf
-rw-r-----. 1 root keystone 2400 Feb 1 22:54 keystone-paste.ini
-rw-r-----. 1 root keystone 1046 Feb 1 22:54 logging.conf
-rw-r-----. 1 keystone keystone 9699 Feb 1 22:54 policy.json
-rw-r-----. 1 keystone keystone 665 Feb 1 22:54 sso_callback_template.html
[root@node1 keystone]#
[root@node1 ~]# systemctl enable memcached
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.
[root@node1 ~]# netstat -antp|grep 11211
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 16746/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 16746/memcached
[root@node1 ~]# ps aux |grep memcached
memcach+ 16746 0.2 0.0 333840 1208 ? Ssl 12:48 0:00 /usr/bin/memcached -p 11211 -u memcached -m 64 -c 1024 -l 127.0.0.1,::1
root 16790 0.0 0.0 112648 956 pts/0 R+ 12:49 0:00 grep --color=auto memcached
找它的配置文件
[root@node1 ~]# rpm -ql memcached
/etc/sysconfig/memcached
/usr/bin/memcached
/usr/bin/memcached-tool
/usr/lib/systemd/system/memcached.service
/usr/share/doc/memcached-1.4.33
/usr/share/doc/memcached-1.4.33/AUTHORS
/usr/share/doc/memcached-1.4.33/CONTRIBUTORS
/usr/share/doc/memcached-1.4.33/COPYING
/usr/share/doc/memcached-1.4.33/ChangeLog
/usr/share/doc/memcached-1.4.33/NEWS
/usr/share/doc/memcached-1.4.33/README.md
/usr/share/doc/memcached-1.4.33/new_lru.txt
/usr/share/doc/memcached-1.4.33/protocol.txt
/usr/share/doc/memcached-1.4.33/readme.txt
/usr/share/doc/memcached-1.4.33/threads.txt
/usr/share/man/man1/memcached-tool.1.gz
/usr/share/man/man1/memcached.1.gz
[root@node1 ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1,::1"
[root@node1 ~]# telnet 192.168.1.2 11211
Trying 192.168.1.2...
telnet: connect to address 192.168.1.2: Connection refused
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0"
[root@node1 ~]# systemctl restart memcached.service
[root@linux-node1 ~]# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1874/mysqld
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 910/memcached
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 912/httpd
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 997/sshd
tcp 0 0 0.0.0.0:35357 0.0.0.0:* LISTEN 912/httpd
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 898/beam
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 912/httpd
tcp 0 0 127.0.0.1:34262 127.0.0.1:4369 ESTABLISHED 898/beam
tcp 0 0 192.168.1.2:22 192.168.1.138:51076 ESTABLISHED 2020/sshd: root@pts
tcp 0 0 127.0.0.1:4369 127.0.0.1:34262 ESTABLISHED 1946/epmd
tcp 0 0 192.168.1.2:22 192.168.1.138:51071 ESTABLISHED 1925/sshd: root@pts
tcp 0 0 192.168.1.2:22 192.168.1.138:51072 ESTABLISHED 1973/sshd: root@pts
tcp 0 0 192.168.1.2:4369 192.168.1.2:46162 TIME_WAIT -
tcp 0 0 127.0.0.1:34231 127.0.0.1:4369 TIME_WAIT -
tcp6 0 0 :::22 :::* LISTEN 997/sshd
可以通过IPv4地址访问了
[root@node1 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
为了防止后期一些服务监听再IPv6上的干扰,可以禁用掉系统默认的IPv6
[root@node1 ~]# cat /etc/sysctl.conf# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
[root@linux-node1 ~]# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
6、配置apache
早期keystone自己单独可以启动,但是性能不好。后面就使用apache运行keystone服务了
使用apache代理keystone,这里面有2个虚拟主机的配置
5000 正常的api来访问 35357 admin用户管理访问的端口
[root@node1 ~]# cp /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
[root@node1 ~]# cat /etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000
Listen 35357
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
LimitRequestBody 114688
<IfVersion >= 2.4>
ErrorLogFormat "%{cu}t %M"
</IfVersion>
ErrorLog /var/log/httpd/keystone.log
CustomLog /var/log/httpd/keystone_access.log combined
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
</VirtualHost>
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
LimitRequestBody 114688
<IfVersion >= 2.4>
ErrorLogFormat "%{cu}t %M"
</IfVersion>
ErrorLog /var/log/httpd/keystone.log
CustomLog /var/log/httpd/keystone_access.log combined
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
</VirtualHost>
Alias /identity /usr/bin/keystone-wsgi-public
<Location /identity>
SetHandler wsgi-script
Options +ExecCGI
WSGIProcessGroup keystone-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
</Location>
Alias /identity_admin /usr/bin/keystone-wsgi-admin
<Location /identity_admin>
SetHandler wsgi-script
Options +ExecCGI
WSGIProcessGroup keystone-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
</Location>
修改主配置文件,95行改成如下内容
必须要配置httpd的ServerName,不配置的话apache能启动,但是keystone服务不能起来
[root@node1 ~]# grep -n "^ServerName" /etc/httpd/conf/httpd.conf
95:ServerName 192.168.1.2:80
[root@node1 ~]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@node1 ~]# systemctl start httpd.service
查看监听情况,5000和35357端口已经起来了
[root@linux-node1 ~]# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1874/mysqld
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 910/memcached
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 912/httpd
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 997/sshd
tcp 0 0 0.0.0.0:35357 0.0.0.0:* LISTEN 912/httpd
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 898/beam
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 912/httpd
tcp 0 0 127.0.0.1:34262 127.0.0.1:4369 ESTABLISHED 898/beam
tcp 0 0 192.168.1.2:22 192.168.1.138:51076 ESTABLISHED 2020/sshd: root@pts
tcp 0 0 127.0.0.1:4369 127.0.0.1:34262 ESTABLISHED 1946/epmd
tcp 0 0 192.168.1.2:22 192.168.1.138:51071 ESTABLISHED 1925/sshd: root@pts
tcp 0 0 192.168.1.2:22 192.168.1.138:51072 ESTABLISHED 1973/sshd: root@pts
tcp 0 0 192.168.1.2:4369 192.168.1.2:46162 TIME_WAIT -
tcp 0 0 127.0.0.1:34231 127.0.0.1:4369 TIME_WAIT -
tcp6 0 0 :::22 :::* LISTEN 997/sshd
[root@node1 ~]# tail -f /var/log/keystone/keystone.log
2017-07-30 12:44:06.432 16666 INFO migrate.versioning.api [-] done
2017-07-30 12:44:06.433 16666 INFO migrate.versioning.api [-] 96 -> 97...
2017-07-30 12:44:06.482 16666 INFO migrate.versioning.api [-] done
2017-07-30 12:46:52.057 16714 INFO keystone.token.providers.fernet.utils [-] [fernet_tokens] key_repository does not appear to exist; attempting to create it
2017-07-30 12:46:52.061 16714 INFO keystone.token.providers.fernet.utils [-] Created a new key: /etc/keystone/fernet-keys/0
2017-07-30 12:46:52.062 16714 INFO keystone.token.providers.fernet.utils [-] Starting key rotation with 1 key files: ['/etc/keystone/fernet-keys/0']
2017-07-30 12:46:52.064 16714 INFO keystone.token.providers.fernet.utils [-] Current primary key is: 0
2017-07-30 12:46:52.066 16714 INFO keystone.token.providers.fernet.utils [-] Next primary key will be: 1
2017-07-30 12:46:52.069 16714 INFO keystone.token.providers.fernet.utils [-] Promoted key 0 to be the primary: 1
2017-07-30 12:46:52.072 16714 INFO keystone.token.providers.fernet.utils [-] Created a new key: /etc/keystone/fernet-keys/0
[root@node1 ~]# grep -n "#debug" /etc/keystone/keystone.conf
118:#debug = false
403:#debug_cache_backend = false
1008:#debug_level = <None>
在keystone创建域、项目、用户和角色
先查看之前配置文件里配置的admin_token
[root@node1 ~]# grep -n "^admin_token" /etc/keystone/keystone.conf13:admin_token = 8b25b7333279fa64a831
1、添加环境变量
你在当前窗口设置了环境变量,也一定要在当前窗口操作5000端口是给消费者调用的,35357是给管理者用的,管理链接
v3是v3版本,这里写这个非常有出处,以后升级便于找出问题,对于一些版本依赖的服务很友好
前面连接v3版本的资源。如果你升级,新建个目录v4,这样既保存了v3版本的东西,就有新的v4
便于找出问题,也是架构设计的优点
[root@node1 ~]# export OS_TOKEN=8b25b7333279fa64a831
[root@node1 ~]# export OS_URL=http://192.168.1.2:35357/v3
[root@node1 ~]# export OS_IDENTITY_API_VERSION=3
2.、创建域default
[root@linux-node1 ~]# openstack domain create --description "Default Domain" default
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Default Domain |
| enabled | True |
| id | 0d27d98f16694ae1b1dac62c27da14ab |
| name | default |
+-------------+----------------------------------+
3、创建 admin 项目
这个admin的项目可以管理所有的云主机
[root@linux-node1 ~]# openstack project create --domain default --description "Admin Project" admin+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Admin Project |
| domain_id | 0d27d98f16694ae1b1dac62c27da14ab |
| enabled | True |
| id | 883e2da5c2444e238e7ca1f02328b6b8 |
| is_domain | False |
| name | admin |
| parent_id | 0d27d98f16694ae1b1dac62c27da14ab |
+-------------+----------------------------------+
生产环境密码一定要设置复杂,这里仅是测试,密码就设置为admin
[root@linux-node1 ~]# openstack user create --domain default --password-prompt admin
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | 0d27d98f16694ae1b1dac62c27da14ab |
| enabled | True |
| id | 05af05319f2a43d391db2caa06fe1c76 |
| name | admin |
+-----------+----------------------------------+
[root@linux-node1 ~]# openstack role create admin
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 4e5bba61149e4adc952cdde24c56e687 |
| name | admin |
+-----------+----------------------------------
6、添加admin角色到 admin 项目和用户上
[root@node1 ~]# openstack role add --project admin --user admin admin
继续创建一个普通用户,后面使用普通用户进行虚拟机的创建
一般情况下我们应该使用无特权的项目和用户。作为例子,本指南创建 demo 项目和用户
7、创建demo 项目
[root@linux-node1 ~]# openstack project create --domain default --description "Demo Project" demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | 0d27d98f16694ae1b1dac62c27da14ab |
| enabled | True |
| id | 9a0195b44d1640a9b400309f783b151d |
| is_domain | False |
| name | demo |
| parent_id | 0d27d98f16694ae1b1dac62c27da14ab |
+-------------+----------------------------------+
8、创建demo 用户
[root@linux-node1 ~]# openstack user create --domain default --password-prompt demo
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | 0d27d98f16694ae1b1dac62c27da14ab |
| enabled | True |
| id | a3a5a0db849046cd94ad9181beea074f |
| name | demo |
+-----------+----------------------------------+
[root@linux-node1 ~]# openstack role create user
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 98a24011c9f24443935955322d09a9bc |
| name | user |
+-----------+----------------------------------+
10、添加 user角色到 demo 项目和用户
[root@node1 ~]# openstack role add --project demo --user demo user11、查看创建的而用户和项目
[root@linux-node1 ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 05af05319f2a43d391db2caa06fe1c76 | admin |
| a3a5a0db849046cd94ad9181beea074f | demo |
+----------------------------------+-------+
[root@linux-node1 ~]# openstack project list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 883e2da5c2444e238e7ca1f02328b6b8 | admin |
| 9a0195b44d1640a9b400309f783b151d | demo |
+----------------------------------+-------+
keystone服务创建服务目录相关
keystone除了服务认证的作用,还有服务目录的作用keystone本身也要在上面注册
1、创建service项目,里面可以包含服务
[root@linux-node1 ~]# openstack project create --domain default --description "Service Project" service+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | 0d27d98f16694ae1b1dac62c27da14ab |
| enabled | True |
| id | dd92a023ddad44d39d57d185a4c5e30f |
| is_domain | False |
| name | service |
| parent_id | 0d27d98f16694ae1b1dac62c27da14ab |
+-------------+----------------------------------+
提前为每个服务创建用户,密码都是和本服务用户名一致
2、创建glance用户
[root@linux-node1 ~]# openstack user create --domain default --password-prompt glance
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | 0d27d98f16694ae1b1dac62c27da14ab |
| enabled | True |
| id | 3bf59733430645d0910439d31ec17e96 |
| name | glance |
+-----------+----------------------------------+
[root@node1 ~]# openstack role add --project service --user glance admin
[root@linux-node1 ~]# openstack user create --domain default --password-prompt nova
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | 0d27d98f16694ae1b1dac62c27da14ab |
| enabled | True |
| id | a3b895f60aab49cb981cd09048aaf59a |
| name | nova |
+-----------+----------------------------------+
[root@linux-node1 ~]# openstack role add --project service --user nova admin
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | 0d27d98f16694ae1b1dac62c27da14ab |
| enabled | True |
| id | 6107a1e695fe4bb28fc8bb6000d179ca |
| name | neutron |
+-----------+----------------------------------+
[root@linux-node1 ~]# openstack role add --project service --user neutron admin
创建服务实体和API端点
在你的Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定您的环境中可用的服务。
创建服务实体和身份认证服务:
6、创建keystone服务,类型是identify
[root@linux-node1 ~]# openstack service create --name keystone --description "OpenStack Identity" identity
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Identity |
| enabled | True |
| id | 38d49b6c833f4abab7b9dd84c6c3e849 |
| name | keystone |
| type | identity |
+-------------+----------------------------------+
7、创建认证服务的 API 端点,公共的,内部的,管理的
只有这个keystone比较特殊,其它的服务端口都是一样的
public url可以被全局访问
[root@linux-node1 ~]# openstack endpoint create --region RegionOne identity public http://192.168.1.2:5000/v3+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 3af23be4c2094e6fae19f343b97c6aa0 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 38d49b6c833f4abab7b9dd84c6c3e849 |
| service_name | keystone |
| service_type | identity |
| url | http://192.168.1.2:5000/v3 |
+--------------+----------------------------------+
private url只能被局域网访问
[root@linux-node1 ~]# openstack endpoint create --region RegionOne identity internal http://192.168.1.2:5000/v3
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 409b938576d9429fb10944c17548a364 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 38d49b6c833f4abab7b9dd84c6c3e849 |
| service_name | keystone |
| service_type | identity |
| url | http://192.168.1.2:5000/v3 |
+--------------+----------------------------------+
管理员使用的
[root@linux-node1 ~]# openstack endpoint create --region RegionOne identity admin http://192.168.1.2:35357/v3
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | ef58534b6e6a413e97ddd558a6dd54cd |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 38d49b6c833f4abab7b9dd84c6c3e849 |
| service_name | keystone |
| service_type | identity |
| url | http://192.168.1.2:35357/v3 |
[root@node1 ~]# openstack user --help
Command "user" matches:
user create
user delete
user list
user password set
user set
user show
[root@node1 ~]# openstack endpoint --help
Command "endpoint" matches:
endpoint create
endpoint delete
endpoint list
endpoint set
endpoint show
例如:
[root@node1 ~]# openstack endpoint delete ID #使用这个命令删除
8、 检查上面创建结果
[root@linux-node1 ~]# openstack service list+----------------------------------+----------+----------+
| ID | Name | Type |
+----------------------------------+----------+----------+
| 38d49b6c833f4abab7b9dd84c6c3e849 | keystone | identity |
+----------------------------------+----------+----------+
[root@linux-node1 ~]# openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------+
| 3af23be4c2094e6fae19f343b97c6aa0 | RegionOne | keystone | identity | True | public | http://192.168.1.2:5000/v3 |
| 409b938576d9429fb10944c17548a364 | RegionOne | keystone | identity | True | internal | http://192.168.1.2:5000/v3 |
| ef58534b6e6a413e97ddd558a6dd54cd | RegionOne | keystone | identity | True | admin | http://192.168.1.2:35357/v3 |
+----------------------------------+-----------+--------------+--------------+---------+-----------+-----------------------------+
[root@linux-node1 ~]# mysql -ukeystone -pkeystone
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 5.5.52-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> select * from keystone.endpoint;
+----------------------------------+--------------------+-----------+----------------------------------+-----------------------------+-------+---------+-----------+
| id | legacy_endpoint_id | interface | service_id | url | extra | enabled | region_id |
+----------------------------------+--------------------+-----------+----------------------------------+-----------------------------+-------+---------+-----------+
| 3af23be4c2094e6fae19f343b97c6aa0 | NULL | public | 38d49b6c833f4abab7b9dd84c6c3e849 | http://192.168.1.2:5000/v3 | {} | 1 | RegionOne |
| 409b938576d9429fb10944c17548a364 | NULL | internal | 38d49b6c833f4abab7b9dd84c6c3e849 | http://192.168.1.2:5000/v3 | {} | 1 | RegionOne |
| ef58534b6e6a413e97ddd558a6dd54cd | NULL | admin | 38d49b6c833f4abab7b9dd84c6c3e849 | http://192.168.1.2:35357/v3 | {} | 1 | RegionOne |
+----------------------------------+--------------------+-----------+----------------------------------+-----------------------------+-------+---------+---
MariaDB [(none)]> select * from keystone.user;
+----------------------------------+-------+---------+--------------------+
| id | extra | enabled | default_project_id |
+----------------------------------+-------+---------+--------------------+
| 05af05319f2a43d391db2caa06fe1c76 | {} | 1 | NULL |
| 3bf59733430645d0910439d31ec17e96 | {} | 1 | NULL |
| 6107a1e695fe4bb28fc8bb6000d179ca | {} | 1 | NULL |
| a3a5a0db849046cd94ad9181beea074f | {} | 1 | NULL |
| a3b895f60aab49cb981cd09048aaf59a | {} | 1 | NULL |
+----------------------------------+-------+---------+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> select * from keystone.service;
+----------------------------------+----------+---------+-----------------------------------------------------------+
| id | type | enabled | extra |
+----------------------------------+----------+---------+-----------------------------------------------------------+
| 38d49b6c833f4abab7b9dd84c6c3e849 | identity | 1 | {"description": "OpenStack Identity", "name": "keystone"} |
+----------------------------------+----------+---------+-----------------------------------------------------------+
1 row in set (0.00 sec)
9、使用用户连接keystone验证
[root@linux-node1 ~]# unset OS_TOKEN
[root@linux-node1 ~]# unset OS_URL
Password:
+------------+--------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2017-08-02T07:04:21.000000Z |
| id | gAAAAABZgWtm6IKknutRwRte8MzKZ_9AQxKM6b9-M-6Qej9LcSenKreAn3RmIdH2NKSaxkO2SqEGXhJLl2RZ_e5C1Tv5YdmqLpnlL50zLmqdsyjQcLxzRF- |
| | EM3dJySeHCxkkfuEhcV6iD0sR1qXu2d2Faw35yWiVJshmLCsn_VUKdGUiBDyFqcM |
| project_id | 883e2da5c2444e238e7ca1f02328b6b8 |
| user_id | 05af05319f2a43d391db2caa06fe1c76 |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------+
测试demo 用户,请求认证令牌,也成功
[root@linux-node1 ~]# openstack --os-auth-url http://192.168.1.2:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue
Password:
+------------+--------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2017-08-02T07:07:56.000000Z |
| id | gAAAAABZgWw92PKvNBL69I44sAmWYH3n_ShlFfc3QV3BssEdJtFoIkoNuhHwp258ZvR6kvYppCYWDtD_Hd16V9YMCpOU4pi8Ujt2uzmM1FjQD1u2QcqFATp5iS3s_ezsyd9fhrhyc_ |
| | npFRYPXTgOQtEIxnD2iMr9uPXSWkIfbo8CYWhGD1t7wAQ |
| project_id | 9a0195b44d1640a9b400309f783b151d |
| user_id | a3a5a0db849046cd94ad9181beea074f |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------
10、创建 OpenStack 客户端环境脚本
[root@linux-node1 ~]# cat admin-openstack.sh
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://192.168.1.2:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
[root@linux-node1 ~]# cat demo-openstack.sh
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://192.168.1.2:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
通过脚本加载环境变量,获取token
[root@linux-node1 ~]# source admin-openstack.sh[root@linux-node1 ~]# openstack token issue
+------------+--------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2017-08-02T07:10:52.000000Z |
| id | gAAAAABZgWzs6uXSjNkPJZJqQGCvra0MxFZjfVqAwqRTxFnu7xmE2ExU8KI8q8PhIUQDBnBfUSrV4bhjpZE7wosVnqacr8YCrfodizU4U20rqeGFHNhFE8O5QF6tkX5CLstycAQp10 |
| | ZE0vBDdRUeEisO7E0Nidy7D8lr5LnDk5WO4edVw_5zYkI |
| project_id | 883e2da5c2444e238e7ca1f02328b6b8 |
| user_id | 05af05319f2a43d391db2caa06fe1c76 |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------+