Installazione e configurazione del servizio Identity (Keystone)
Installazione Keystone
Server designato per l'installazione: hostname1.domain.
- Installare Keystone tramite il gestore di pacchetti
yum
:
# yum install openstack-utils openstack-keystone python-keystoneclient
- Installare il server
mysql
:
# yum install mysql mysql-server MySQL-python
- Permettere che il servizio
mysqld
venga avviato di default al riavvio del server ed avviare il servizio:
# chkconfig mysqld on
# service mysqld start
- Inserire la password di
root
:
# mysqladmin -u root password *******
Configurazione keystone
- Rimuovere, se esiste, il file
/var/lib/keystone/keystone.db
(cioè il DB sqlite). Verrà utilizzato MySQL che permette a più Keystone di utilizzare lo stesso DB e al DB stesso di essere replicato utilizzando le feature di MySQL.
Creazione di tenant, utente e ruolo per l'amministratore e del tenant per i servizi
Per comodità in questa sezione si utilizzeranno delle variabili d'ambiente settate come segue:
# export ADMIN_TOKEN=<ADMIN_TOKEN_VALUE>
export OS_USERNAME=adminUser
export OS_PASSWORD=<PASSWORD>
export OS_TENANT_NAME=adminTenant
export ENDPOINT=http://openstack-01.cnaf.infn.it:35357/v2.0/
export OS_AUTH_URL=http://openstack-01.cnaf.infn.it:5000/v2.0/
Dove <ADMIN_TOKEN_VALUE> è il valore del parametro
admin_token
contenuto nel file
/etc/keystone/keystone.conf
.
Creazione del tenant "adminTenant"
Definizione di tenant:
Un tenant è un contenitore usato per raggruppare risorse o utenti.
Creazione dell'utente "adminUser"
- Creare l'utente lanciando il seguente comando:
# keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT user-create --tenant_id $ADMIN_TENANT_ID --name $OS_USERNAME --pass $OS_PASSWORD --enabled true
+----------+-------------------------------------------------------------------------------------------------------------------------+
| Property | Value |
+----------+-------------------------------------------------------------------------------------------------------------------------+
| email | None |
| enabled | True |
| id | 7d6a3a42c37948b88e2fa692b63587cd |
| name | adminUser |
| password | $6$rounds=40000$NxZyxUfO8VRj3gR.$zt9GJKwMDOUMDHCMhqAqJje3JAJmqqTXADZkXll.usGHEsEpAMgKsnZEfF0itF75ooyY1/tjxXBJq9MaQXnfo. |
| tenantId | db2cf825309c49989595fc2ff915dc7e |
+----------+-------------------------------------------------------------------------------------------------------------------------+
Dove <ADMIN_TENANT_ID> è l'ID del tenant appena creato, mentre <ADMIN_PASSWORD> è la password scelta per l'utente "adminUser".
Creazione dei ruoli admin e memberRole
- Creare il ruolo lanciando il seguente comando:
# keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT role-create --name admin
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| id | 2f196d11ff954c67befc3f190195f47c |
| name | admin |
+----------+----------------------------------+
# export ADMIN_ROLE_ID=2f196d11ff954c67befc3f190195f47c
# keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT role-create --name memberRole
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| id | d193b58e977d4c398b41c518f3629ea7 |
| name | memberRole |
+----------+----------------------------------+
Assegnazione del ruolo "admin" all'utente "AdminUser"
Dove <ADMIN_USER_ID> e <ADMIN_TENANT_ID> sono rispettivamente gli ID di user e tenant appena creati. $ADMIN_ROLE_ID è invece l'id del ruolo "admin" esportato nell'istruzione precedente.
Nota bene: non viene visualizzato nulla se il comando ha successo.
Creazione del tenant "service":
Questo tenant conterrà tutti gli utenti dei servizi che si desidera far conoscere al service catalog.
Creazione ed inserimento degli utenti associati ai servizi
Una volta creato il "Service Tenant", si andrà ad inserire al suo interno un utente per ogni servizio che si vuole aggiungere.
Creazione ed inserimento dell'utente associato a Glance
- Creare l'utente tramite il seguente comando:
keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT user-create --tenant_id $SERVICE_TENANT_ID --name glance --pass <GLANCE_PASSWORD> --enabled=true
+----------+-------------------------------------------------------------------------------------------------------------------------+
| Property | Value |
+----------+-------------------------------------------------------------------------------------------------------------------------+
| email | None |
| enabled | True |
| id | 90ee5ac051eb4d1eaa543243987968a6 |
| name | glance |
| password | $6$rounds=40000$LApm.pXGC43cDMhN$J1mDpXad5r2YYNoMKK/P5t0VwXQidKauP/oHaVH5Nm9E7zGQLYamwa1Xxvh0FRcjOvhDtTSZ97CToKV6pWFPA1 |
| tenantId | 73016aa2c9ca4aeba3736cf44cc8433b |
+----------+-------------------------------------------------------------------------------------------------------------------------+
export GLANCE_USER_ID=90ee5ac051eb4d1eaa543243987968a6
Dove <GLANCE_PASSWORD> è la password che si desidera associare all'utente del servizio Glance.
Nota bene: non viene visualizzato nulla se il comando ha successo.
Creazione ed inserimento dell'utente associato a Nova
Dove <NOVA_PASSWORD> è la password che si desidera associare all'utente del servizio Nova.
- Assegnare il ruolo tramite il seguente comando:
# keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT user-role-add --user $NOVA_USER_ID --tenant_id $SERVICE_TENANT_ID --role $ADMIN_ROLE_ID
Nota bene: non viene visualizzato nulla se il comando ha successo.
Creazione ed inserimento dell'utente associato a EC2
Nota bene: non viene visualizzato nulla se il comando ha successo.
Creazione ed inserimento dell'utente associato a Swift
Nota bene: non viene visualizzato nulla se il comando ha successo.
Definizione dei servizi
Keystone agisce anche come catalogo dei servizi per permettere alle altre componenti OpenStack di conoscere quali sono gli endpoint dei vari servizi OpenStack.
Definizione del servizio identity (Keystone)
Definizione del servizio compute (Nova)
Il servizio compute richiede un endpoint specifico per ogni tenant. La stringa
%(tenant_id)s
ed i singoli apici che racchiudono i valori di
publicurl
,
internalurl
e
adminurl
devono essere digitati esattamente come mostrato sia per l'endpoint
compute che per l'endpoint
volume e l'endpoint
object storage (paragrafi successivi).
Definizione del servizio volume (Volume)
Il servizio volume richiede un endpoint specifico per ogni tenant.
Definizione del servizio image (Glance)
Definizione del servizio compatibility (EC2)
- Creare il servizio "ec2":
# keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT service-create --name=ec2 --type=ec2 --description="EC2 Compatibility Service"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | EC2 Compatibility Service |
| id | 0f30dac463d242668e999955f7ee3d61 |
| name | ec2 |
| type | ec2 |
+-------------+----------------------------------+
export EC2_COMPATIBILITY_SERVICE_ID=0f30dac463d242668e999955f7ee3d61
- Creare l'endpoint per il servizio "ec2":
# keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT endpoint-create --region RegionOne --service_id=$EC2_COMPATIBILITY_SERVICE_ID --publicurl=http://<EC2_SERVER_HOSTNAME>:8773/services/Cloud --internalurl=http://<EC2_SERVER_HOSTNAME>:8773/services/Cloud --adminurl=http://<EC2_SERVER_HOSTNAME>:8773/services/Cloud
+-------------+------------------------------------------------------+
| Property | Value |
+-------------+------------------------------------------------------+
| adminurl | http://openstack-01.cnaf.infn.it:8773/services/Cloud |
| id | e927ee99f3b84894a11f9216118d677a |
| internalurl | http://openstack-01.cnaf.infn.it:8773/services/Cloud |
| publicurl | http://openstack-01.cnaf.infn.it:8773/services/Cloud |
| region | RegionOne |
| service_id | 0f30dac463d242668e999955f7ee3d61 |
+-------------+------------------------------------------------------+
Dove <EC2_SERVER_HOSTNAME> è l'hostname del server sui è installato il servizio EC2. Nel caso di questo prototipo EC2 non è stato installato.
Definizione del servizio object storage (Swift)
Il servizio object storage richiede un endpoint specifico per ogni tenant.
- Creare il servizio "swift":
# keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT service-create --name=swift --type=object-store --description="Object Storage Service"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Object Storage Service |
| id | 5b978ae3aeb1456a9d14c76f1d0c7956 |
| name | swift |
| type | object-store |
+-------------+----------------------------------+
export OBJECT_STORAGE_SERVICE_ID=5b978ae3aeb1456a9d14c76f1d0c7956
- Creare l'endpoint per il servizio "swift":
# keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT endpoint-create --region RegionOne --service_id=$OBJECT_STORAGE_SERVICE_ID --publicurl='<SWIFT_SERVER_HOSTNAME>:8080/v1/AUTH_%(tenant_id)s' --internalurl='<SWIFT_SERVER_HOSTNAME>:8080/v1/AUTH_%(tenant_id)s' --adminurl='<SWIFT_SERVER_HOSTNAME>:8080/v1/AUTH_%(tenant_id)s'
+-------------+-------------------------------------------------------------+
| Property | Value |
+-------------+-------------------------------------------------------------+
| adminurl | http://openstack-04.cnaf.infn.it:8080/v1/AUTH_%(tenant_id)s |
| id | ef01e39c5dde4757834aba9070132f34 |
| internalurl | http://openstack-04.cnaf.infn.it:8080/v1/AUTH_%(tenant_id)s |
| publicurl | http://openstack-04.cnaf.infn.it:8080/v1/AUTH_%(tenant_id)s |
| region | RegionOne |
| service_id | 5b978ae3aeb1456a9d14c76f1d0c7956 |
+-------------+-------------------------------------------------------------+
Dove <SWIFT_SERVER_HOSTNAME> è l'hostname del server sui è installato il servizio Swift. Nel nostro caso è "openstack-04.cnaf.infn.it".
Troubleshooting
- Per le principali operazioni di troubleshooting riferirsi alla guida
.
- Installare curl tramite il gestore di pacchetti
yum
e lanciare il seguente comando per listare le informazioni inserite in Keystone:
# yum install curl
# curl -d '{"auth": {"tenantName": "adminTenant", "passwordCredentials":{"username": "adminUser", "password": "************"}}}' -H "Content-type:application/json" http://hostname1.domain:35357/v2.0/tokens | python -mjson.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
106 2446 101 2446 0 120 27990 1373 --:--:-- --:--:-- --:--:-- 27046
{
"access": {
"serviceCatalog": [
{
"endpoints": [
{
"adminURL": "http://hostname1.domain:8774/v2/c8854bd3d15f4f479476d0cf58ef7db2",
"internalURL": "http://hostname1.domain:8774/v2/c8854bd3d15f4f479476d0cf58ef7db2",
"publicURL": "http://hostname1.domain:8774/v2/c8854bd3d15f4f479476d0cf58ef7db2",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "nova",
"type": "compute"
},
{
"endpoints": [
{
"adminURL": "http://hostname1.domain:9292/v1/",
"internalURL": "http://hostname1.domain:9292/v1/",
"publicURL": "http://hostname1.domain:9292/v1/",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "glance",
"type": "image"
},
{
"endpoints": [
{
"adminURL": "http://hostname1.domain:8776/v1/c8854bd3d15f4f479476d0cf58ef7db2",
"internalURL": "http://hostname1.domain:8776/v1/c8854bd3d15f4f479476d0cf58ef7db2",
"publicURL": "http://hostname1.domain:8776/v1/c8854bd3d15f4f479476d0cf58ef7db2",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "volume",
"type": "volume"
},
{
"endpoints": [
{
"adminURL": "http://hostname1.domain:8773/services/Admin",
"internalURL": "http://hostname1.domain:8773/services/Cloud",
"publicURL": "http://hostname1.domain:8773/services/Cloud",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "ec2",
"type": "ec2"
},
{
"endpoints": [
{
"adminURL": "http://hostname1.domain:8888/v1/AUTH_c8854bd3d15f4f479476d0cf58ef7db2",
"internalURL": "http://hostname1.domain:8888/v1/AUTH_c8854bd3d15f4f479476d0cf58ef7db2",
"publicURL": "http://hostname1.domain:8888/v1/AUTH_c8854bd3d15f4f479476d0cf58ef7db2",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "swift",
"type": "object-store"
},
{
"endpoints": [
{
"adminURL": "http://hostname1.domain:35357/v2.0/",
"internalURL": "http://hostname1.domain:5000/v2.0/",
"publicURL": "http://hostname1.domain:5000/v2.0/",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "keystone",
"type": "identity"
}
],
"token": {
"expires": "2012-10-11T09:49:27Z",
"id": "1d9c15ed60414a92bc39d3b989d5bcae",
"tenant": {
"description": "Admin Tenant Description",
"enabled": true,
"id": "c8854bd3d15f4f479476d0cf58ef7db2",
"name": "adminTenant"
}
},
"user": {
"id": "4b6da6bfa3634c819fc1abc022e88a22",
"name": "adminUser",
"roles": [
{
"id": "ad6dc79aa39c4249ab63840f9591f99d",
"name": "admin"
}
],
"roles_links": [],
"username": "adminUser"
}
}
}