[keystone_authtoken]
auth_uri = http://<keystone_service_ip>:5000
project_domain_id = default
project_name = service
user_domain_id = default
password = fanguiju
username = <new_service_name>
auth_url = http://<keystone_service_ip>:35357
auth_plugin = password
该配置项的意义:
Because most OpenStack services must access the Identity Service, you must configure the IP address of the keystone server to be able to access it. You must also configure the admin_tenant_name, admin_user, and admin_password options for each service to work.
简而言之, 就是让每个不同的 Openstack Service 都使用一个特定的注册在 Keystone 中的 User 去访问 Keystone Service 并请求获得验证服务. 并且该配置项还指定了该项目属于的 Project(资源), 也就是早期版本中的 Tenant. 这里设置的是: 该项目属于 Tenant service. 这个在之后我们会使用到.
fanguiju@fanguiju:~/devstack$ keystone user-create --name <new_service_name> --pass fanguiju --enabled true
fanguiju@fanguiju:~/devstack$ openstack user list
+----------------------------------+----------+
| ID | Name |
+----------------------------------+----------+
| 135b2cb86962401c82044fd4ca9daae4 | admin |
| 40d75aebc9c34978b23081f8c8ca9af5 | <new_service_name> |
| 626110b81b2b4509becafc1964121b7f | nova |
| 85c6b9fa9127439880276f070c60dad6 | demo |
| 887a5e92599847698c1f601d0f337421 | glance |
| 9dc44b1518184c2cacecb2d2f9f8b050 | alt_demo |
| b340851dd5a24eb39a2383bb3f1ff36c | cinder |
+----------------------------------+----------+
fanguiju@fanguiju:~/devstack$ openstack service create --name <new_service_name> --description "<new_service_name> Service" recovery
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | <new_service_name> Service |
| enabled | True |
| id | c22ebcb4cdd24114a2d581ce18cdd0ca |
| name | <new_service_name> |
| type | recovery |
+-------------+----------------------------------+
fanguiju@fanguiju:~/devstack$ openstack service list
+----------------------------------+-------------+----------------+
| ID | Name | Type |
+----------------------------------+-------------+----------------+
| 1cfc85bed3e84f2b93c5a9b9c293e1ed | cinder | volume |
| 348c1b372deb4c3fa817d340b439728b | ec2 | ec2 |
| 3fa397c2b5d647389edae03515c64583 | nova | compute |
| 41cfab784e6942189c8dc48fbda59c4e | glance | image |
| 7b534b13bd024a04b44f6eeee882208a | keystone | identity |
| 9b8de3d592054fc9b6b992be056ffd0a | nova_legacy | compute_legacy |
| aed90494567e4deababddd494fc33338 | cinderv2 | volumev2 |
| c22ebcb4cdd24114a2d581ce18cdd0ca | <new_service_name> | recovery |
+----------------------------------+-------------+----------------+
NOTE: Name 是用于显示的标识, 实际在 Servces 之间生效的是 Type .
fanguiju@fanguiju:~/devstack$ openstack endpoint create --region RegionOne <new_service_name> --publicurl ‘http://<new_service_ip>:8760/v1/$(tenant_id)s‘ --internalurl ‘http://<new_service_ip>:8760/v1/$(tenant_id)s‘ --adminurl ‘http://<new_service_ip>:8760/v1/$(tenant_id)s‘
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| adminurl | http://<new_service_ip>:8760/v1/$(tenant_id)s |
| id | 3c35ecc67e7444648dd079d5c0562f5b |
| internalurl | http://<new_service_ip>:8760/v1/$(tenant_id)s |
| publicurl | http://<new_service_ip>:8760/v1/$(tenant_id)s |
| region | RegionOne |
| service_id | 513308f8e46944ac8baf1c9758062660 |
| service_name | <new_service_name> |
| service_type | recovery |
+--------------+------------------------------------------+
到目前为止, 其实还没有完成新项目 Service 的添加, 因为现在为止在 Keystone 中新注册的 User 是没有权限访问这个 Tenant 的, 那么自然也无法获取 Tenant 中的 Services 列表. 所以无法为新项目完成验证的功能.
# 先获取 <new_service_id>/<service_id>/<member_id>
openstack user list # <new_service_id>
keystone tenant-list # <service_id>
openstack role list # <member_id>
# 将用户绑定到 Relo admin 和 Tenant service 中
keystone user-role-add --user <new_service_id> --role <member_id> --tenant <service_id>
keystone user-role-add --user <new_service_id> --role <admin_id> --tenant <service_id>
fanguiju@fanguiju:~/devstack$ source openrc <new_user> service
fanguiju@fanguiju:~/devstack$ keystone user-list
+----------------------------------+----------+---------+----------------------+
| id | name | enabled | email |
+----------------------------------+----------+---------+----------------------+
| 135b2cb86962401c82044fd4ca9daae4 | admin | True | |
| 9dc44b1518184c2cacecb2d2f9f8b050 | alt_demo | True | alt_demo@example.com |
| b340851dd5a24eb39a2383bb3f1ff36c | cinder | True | |
| 85c6b9fa9127439880276f070c60dad6 | demo | True | demo@example.com |
| 40d75aebc9c34978b23081f8c8ca9af5 | <new_service_user> | True | |
| 887a5e92599847698c1f601d0f337421 | glance | True | |
| 626110b81b2b4509becafc1964121b7f | nova | True | |
+----------------------------------+----------+---------+----------------------+
使用 <new_user>
也能够访问完全的 User list, 表示该 User 具有了 admin 的权限.
小结:
1. Openstack Service 需要一个注册在 Keystone 中的 User 来访问 Keystone service
2. Openstack Service 应该属于 Tenant service 中, 属于服务资源.
3. 这个 User 对 Tenant service 应该具有 admin 或者 member 权限, 所以需要将 User/ Tenant service/Role admin 绑定到一起.
4. 为了 Openstack services 之间可以相互访问, 需要在 service 的 URL 注册到 endpoint 中.
Openstack组件部署 — 将一个 New Service 添加到 Keystone
原文:http://blog.csdn.net/jmilk/article/details/53204536