openstack搭建--3--控制节点安装配置keystone

Keystone作用

用户与认证:用户权限与用户行为跟踪:

服务目录:提供一个服务目录,包括所有服务项与相关Api的端点,它是个注册中心

用户认证包括:User,Tenant,Token,Role
服务目录包括:Service,Endpoint


服务目录名字介绍

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

把13行admin_token配置成一个上面随机值,也可以自己定义。不要太简单即可
另外配置文件必须顶头写,在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

检查验证上述操作是否建表成功,使用keystone用户查看,还可以检查登录是否正确
[root@node1 ~]# mysql -ukeystone -pkeystone -e "use keystone;show tables;"
+------------------------+
| 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]#

5、memcache启动并更改配置
[root@node1 ~]# systemctl start memcached.service
[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"
memcached没监听在ipv4上,导致无法通过192.168.1.2这个地址连接,需要修改,否则后面通过密码认证会报500错误
[root@node1 ~]# telnet 192.168.1.2 11211
Trying 192.168.1.2...
telnet: connect to address 192.168.1.2: Connection refused
更改memcached监听地址,改为全部网络接口上
[root@node1 ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0"
重启memcached服务,这样11211就监听再了ipv4端口上了
[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

7、启动启动keystone服务
启动apache服务就相当于启动了keystone

[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
启动如果有问题可以打开debug
[root@node1 ~]# vi /etc/keystone/keystone.conf
[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.conf
13: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 |
+-------------+----------------------------------+




4、创建 admin 用户

生产环境密码一定要设置复杂,这里仅是测试,密码就设置为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                            |
+-----------+----------------------------------+

5、创建 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                             |
+-----------+----------------------------------+

9、创建 user 角色

[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 user
11、查看创建的而用户和项目
[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                           |
+-----------+----------------------------------+

3、把glance用户加入到service项目,同时给它admin角色
[root@node1 ~]# openstack role add --project service --user glance admin
4、创建nova用户,并加入service项目,同时给它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

5、创建neutron用户,并接入Service项目,同时给它admin角色
[root@linux-node1 ~]# openstack user create --domain default --password-prompt neutron
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      |


关于创建的对象的增删改查操作。 后面跟id,创建错了可以通过id删除
[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验证

不使用admin_token,需要取消环境变量里的设置
下面成功获取token信息,表示通过admin用户连接成功
[root@linux-node1 ~]# unset OS_TOKEN
[root@linux-node1 ~]# unset OS_URL
[root@linux-node1 ~]# openstack --os-auth-url http://192.168.1.2:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
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                                                                                                           |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------+

以后每次执行openstack相关命令都要执行source一次环境变量!!!


















































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨花石~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值