Change-Id: Ib8730874f1f70a69c9b843d28d0c052f1fcb7006
17 KiB
Install and configure
This section describes how to install and configure the OpenStack Identity service, code-named keystone, on the controller node. For performance, this configuration deploys the Apache HTTP server to handle requests and Memcached to store tokens instead of an SQL database.
To configure prerequisites
Before you configure the OpenStack Identity service, you must create a database and an administration token.
To create the database, complete these steps:
Use the database access client to connect to the database server as the
root
user:$ mysql -u root -p
Create the
keystone
database:CREATE DATABASE keystone;
Grant proper access to the
keystone
database:GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ IDENTIFIED BY 'KEYSTONE_DBPASS'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ IDENTIFIED BY 'KEYSTONE_DBPASS';
Replace
KEYSTONE_DBPASS
with a suitable password.Exit the database access client.
Generate a random value to use as the administration token during initial configuration:
$ openssl rand -hex 10
obs or rdo or ubuntu
To install and configure the Identity service components
Note
Default configuration files vary by distribution. You might need to add these sections and options rather than modifying existing sections and options. Also, an ellipsis (...) in the configuration snippets indicates potential default configuration options that you should retain.
Note
In Kilo, the keystone project deprecates Eventlet in favor of a WSGI
server. This guide uses the Apache HTTP server with
mod_wsgi
to serve keystone requests on ports 5000 and
35357. By default, the keystone service still listens on ports 5000 and
35357. Therefore, this guide disables the keystone service.
ubuntu
Disable the keystone service from starting automatically after installation:
# echo "manual" > /etc/init/keystone.override
Run the following command to install the packages:
ubuntu
# apt-get install keystone python-openstackclient apache2 libapache2-mod-wsgi memcached python-memcache
obs or rdo
Run the following command to install the packages:
rdo
# yum install openstack-keystone httpd mod_wsgi python-openstackclient memcached python-memcached
obs
# zypper install openstack-keystone python-openstackclient apache2-mod_wsgi memcached python-python-memcached
obs or rdo
Start the Memcached service and configure it to start when the system boots:
# systemctl enable memcached.service # systemctl start memcached.service
obs or rdo or ubuntu
- Edit the
/etc/keystone/keystone.conf
file and complete the following actions:In the
[DEFAULT]
section, define the value of the initial administration token:[DEFAULT] ... admin_token = ADMIN_TOKEN
Replace
ADMIN_TOKEN
with the random value that you generated in a previous step.In the
[database]
section, configure database access:[database] ... connection = mysql://keystone:KEYSTONE_DBPASS@controller/keystone
Replace
KEYSTONE_DBPASS
with the password you chose for the database.In the
[memcache]
section, configure the Memcache service:[memcache] ... servers = localhost:11211
In the
[token]
section, configure the UUID token provider and Memcached driver:[token] ... provider = keystone.token.providers.uuid.Provider driver = keystone.token.persistence.backends.memcache.Token
In the
[revoke]
section, configure the SQL revocation driver:[revoke] ... driver = keystone.contrib.revoke.backends.sql.Revoke
(Optional) To assist with troubleshooting, enable verbose logging in the
[DEFAULT]
section:[DEFAULT] ... verbose = True
obs or rdo or ubuntu
Populate the Identity service database:
# su -s /bin/sh -c "keystone-manage db_sync" keystone
debian
To install and configure the components
Run the following command to install the packages:
# apt-get install keystone
Note
python-keystoneclient will automatically be installed as it is a dependency of the keystone package.
Respond to prompts for
debconf/debconf-dbconfig-common
, which will fill the below database access directive.[database] ... connection = mysql://keystone:KEYSTONE_DBPASS@controller/keystone
If you decide to not use
dbconfig-common
, then you will have to create the database and manage its access rights yourself, and run the following by hand.# keystone-manage db_sync
Generate a random value to use as the administration token during initial configuration:
$ openssl rand -hex 10
Configure the initial administration token:
Use the random value that you generated in a previous step. If you install using non-interactive mode or you do not specify this token, the configuration tool generates a random value.
Later on, the package will configure the below directive with the value you entered:
[DEFAULT] ... admin_token = ADMIN_TOKEN
Create the
admin
tenant and user:During the final stage of the package installation, it is possible to automatically create an admin tenant and an admin user. This can later be used for other OpenStack services to contact the Identity service. This is the equivalent of running the below commands:
# openstack project create --description "Admin Tenant" admin # openstack user create --password ADMIN_PASS --email root@localhost admin # openstack role create admin # openstack role add --project demo --user demo user
In Debian, the Keystone package offers automatic registration of Keystone in the service catalogue. This is equivalent of running the below commands:
# openstack service create --name keystone --description "OpenStack Identity" identity # keystone endpoint-create \ --publicurl http://controller:5000/v2.0 \ --internalurl http://controller:5000/v2.0 \ --adminurl http://controller:35357/v2.0 \ --region RegionOne \ identity
obs or rdo or ubuntu
To configure the Apache HTTP server
rdo
Edit the
/etc/httpd/conf/httpd.conf
file and configure theServerName
option to reference the controller node:controller ServerName
Create the
/etc/httpd/conf.d/wsgi-keystone.conf
file with the following content:5000 Listen 35357 Listen <VirtualHost *:5000> =keystone group=keystone display-name=%{GROUP} WSGIDaemonProcess keystone-public processes=5 threads=1 user WSGIProcessGroup keystone-public WSGIScriptAlias / /var/www/cgi-bin/keystone/main WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization OnLogLevel info ErrorLogFormat "%{cu}t %M" /var/log/httpd/keystone-error.log ErrorLog /var/log/httpd/keystone-access.log combined CustomLog</VirtualHost> <VirtualHost *:35357> =keystone group=keystone display-name=%{GROUP} WSGIDaemonProcess keystone-admin processes=5 threads=1 user WSGIProcessGroup keystone-admin WSGIScriptAlias / /var/www/cgi-bin/keystone/admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization OnLogLevel info ErrorLogFormat "%{cu}t %M" /var/log/httpd/keystone-error.log ErrorLog /var/log/httpd/keystone-access.log combined CustomLog</VirtualHost>
ubuntu
Edit the
/etc/apache2/apache2.conf
file and configure theServerName
option to reference the controller node:controller ServerName
Create the
/etc/apache2/sites-available/wsgi-keystone.conf
file with the following content:5000 Listen 35357 Listen <VirtualHost *:5000> =keystone display-name=%{GROUP} WSGIDaemonProcess keystone-public processes=5 threads=1 user WSGIProcessGroup keystone-public WSGIScriptAlias / /var/www/cgi-bin/keystone/main WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On<IfVersion >= 2.4> ErrorLogFormat "%{cu}t %M"</IfVersion> LogLevel info /var/log/apache2/keystone-error.log ErrorLog /var/log/apache2/keystone-access.log combined CustomLog</VirtualHost> <VirtualHost *:35357> =keystone display-name=%{GROUP} WSGIDaemonProcess keystone-admin processes=5 threads=1 user WSGIProcessGroup keystone-admin WSGIScriptAlias / /var/www/cgi-bin/keystone/admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On<IfVersion >= 2.4> ErrorLogFormat "%{cu}t %M"</IfVersion> LogLevel info /var/log/apache2/keystone-error.log ErrorLog /var/log/apache2/keystone-access.log combined CustomLog</VirtualHost>
Enable the Identity service virtual hosts:
# ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled
obs
Edit the
/etc/sysconfig/apache2
file and configure theAPACHE_SERVERNAME
option to reference the controller node:APACHE_SERVERNAME="controller"
Create the
/etc/apache2/conf.d/wsgi-keystone.conf
file with the following content:5000 Listen 35357 Listen <VirtualHost *:5000> =keystone display-name=%{GROUP} WSGIDaemonProcess keystone-public processes=5 threads=1 user WSGIProcessGroup keystone-public WSGIScriptAlias / /srv/www/cgi-bin/keystone/main WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat "%{cu}t %M"LogLevel info /var/log/apache2/keystone-error.log ErrorLog /var/log/apache2/keystone-access.log combined CustomLog</VirtualHost> <VirtualHost *:35357> =keystone display-name=%{GROUP} WSGIDaemonProcess keystone-admin processes=5 threads=1 user WSGIProcessGroup keystone-admin WSGIScriptAlias / /srv/www/cgi-bin/keystone/admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat "%{cu}t %M"LogLevel info /var/log/apache2/keystone-error.log ErrorLog /var/log/apache2/keystone-access.log combined CustomLog</VirtualHost>
ubuntu
Create the directory structure for the WSGI components:
# mkdir -p /var/www/cgi-bin/keystone
Copy the WSGI components from the upstream repository into this directory:
# curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/kilo \ | tee /var/www/cgi-bin/keystone/main /var/www/cgi-bin/keystone/admin
Adjust ownership and permissions on this directory and the files in it:
# chown -R keystone:keystone /var/www/cgi-bin/keystone # chmod 755 /var/www/cgi-bin/keystone/*
obs or rdo
Create the directory structure for the WSGI components:
rdo
# mkdir -p /var/www/cgi-bin/keystone
obs
# mkdir -p /srv/www/cgi-bin/keystone
Copy the WSGI components from the upstream repository into this directory:
rdo
# curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/kilo \ | tee /var/www/cgi-bin/keystone/main /var/www/cgi-bin/keystone/admin
obs
# curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/kilo \ | tee /srv/www/cgi-bin/keystone/main /srv/www/cgi-bin/keystone/admin
obs or rdo
Adjust ownership and permissions on this directory and the files in it:
rdo
# chown -R keystone:keystone /var/www/cgi-bin/keystone # chmod 755 /var/www/cgi-bin/keystone/*
obs
# chown -R keystone:keystone /srv/www/cgi-bin/keystone # chmod 755 /srv/www/cgi-bin/keystone/*
obs
Change the ownership of
/etc/keystone
to give thekeystone
system access to it:# chown -R keystone:keystone /etc/keystone
To finalize the installation
ubuntu
Restart the Apache HTTP server:
# service apache2 restart
By default, the Ubuntu packages create an SQLite database.
Because this configuration uses an SQL database server, you can remove the SQLite database file:
# rm -f /var/lib/keystone/keystone.db
rdo
Restart the Apache HTTP server:
# systemctl enable httpd.service # systemctl start httpd.service
obs
Restart the Apache HTTP server:
# systemctl enable apache2.service # systemctl start apache2.service
By default, the Identity service stores expired tokens in the SQL database indefinitely. The accumulation of expired tokens considerably increases the database size and degrades performance over time, particularly in environments with limited resources.
The packages already contain a cron job under
/etc/cron.hourly/keystone
, so it is not necessary to manually configure a periodic task that purges expired tokens.
debian
By default, the Identity service stores expired tokens in the SQL database indefinitely. The accumulation of expired tokens considerably increases the database size and degrades performance over time, particularly in environments with limited resources.
The packages already contain a cron job under
/etc/cron.hourly/keystone
, so it is not necessary to manually configure a periodic task that purges expired tokens.