Table des matières
- 2026:
- 2025:
4 billet(s) pour septembre 2026
| Notes HTTP Strict Transport Security - HSTS | 2026/09/18 11:04 | Jean-Baptiste |
| Notes GNU Linux GPU carte graphiques | 2026/09/08 15:49 | Jean-Baptiste |
| Notes GNU Linux graphique | 2026/09/08 15:42 | Jean-Baptiste |
| Notes urlencoding - passer des mots de passe en HTTPS | 2026/09/03 17:58 | Jean-Baptiste |
Notes OpenStack Keystone
Voir :
Install
Prérequis :
- NTP
RedHat
yum install centos-release-openstack-rocky.noarch yum install openstack-keystone-doc python-keystoneclient-doc yum install openstack-keystone httpd mod_wsgi yum install python-openstackclient # yum install python-PROJETclient # yum install python-keystoneclient # MySQL / MariaDB yum install MySQL-python # Postgress #yum install postgresql #yum install postgresql-server yum install @postgresql yum install python-sqlalchemy python-psycopg2 # RabbitMQ yum install rabbitmq-server
sudo postgresql-setup initdb systemctl start postgresql.service systemctl enable postgresql.service
Configurer
/var/lib/pgsql/data/pg_hba.conf
#host all all 127.0.0.1/32 ident host all all 127.0.0.1/32 md5
su - postgres
psql
CREATE ROLE keystoneUser WITH LOGIN PASSWORD 'toor'; CREATE DATABASE keystone OWNER keystoneuser ;
/etc/keystone/keystone.conf
[DEFAULT] #verbose = True debug = true [database] #connection = mysql://keystoneUser:toor@127.0.0.1/keystone #connection = mysql+pymysql://keystoneUser:toor@127.0.0.1/keystone?charset=utf8 connection = postgresql://keystoneuser:toor@127.0.0.1/keystone [token] provider = fernet
systemctl restart httpd su keystone -s /bin/sh -c "keystone-manage db_sync"
Les logs sont ici /var/log/keystone/keystone.log ou
journalctl -f -u devstack@keystone.service
Configuration
Renommer un endpoint
Kestone a été initié avec les paramètres suivants
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
keystone-manage bootstrap --bootstrap-password toor \ --bootstrap-admin-url http://srv-openstack-controller:35357/v3/ \ --bootstrap-internal-url http://srv-openstack-controller:5000/v3/ \ --bootstrap-public-url http://srv-openstack-controller:5000/v3/ \ --bootstrap-region-id RegionOne
Solution : faire un update en base.
UPDATE endpoint SET url='http://srv-openstack-controller:5000/v3/' WHERE interface='admin';
Puis rédemarrer le service Apache ou le service SystemD
systemctl restart httpd # ou systemctl restart devstack@keystone.service
Test
openrc
export OS_USERNAME=admin export OS_PASSWORD=toor export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http://srv-openstack-controller:5000/v3 export OS_IDENTITY_API_VERSION=3
source openrc openstack token issue --debug openstack service list openstack user list
Configuration d'un domaine AD/LDAP
Exemple de conf /etc/keystone/domains/keystone.domain.conf
[identity] domain_configurations_from_database = False driver = ldap [ldap] query_scope = sub group_name_attribute = sAMAccountName group_objectclass = group user_mail_attribute = mail user_enabled_attribute = userAccountControl group_tree_dn = CN=Openstack,OU=Groupes,DC=acme,DC=local chase_referrals = false user_id_attribute = sAMAccountName group_members_are_ids = true group_member_attribute = memberUid page_size = 500 use_tls = false url = ldaps://ldap.acme.local:636 user_name_attribute = sAMAccountName user = Admin user_objectclass = organizationalPerson group_id_attribute = cn user_filter = (memberOf=CN=Openstack,OU=Groupes,DC=acme,DC=local) group_desc_attribute = description user_tree_dn = DC=acme,DC=local user_pass_attribute = userPassword password = UEBzc3cwcmQhISEK
Pb
Pb utilisateur manquant
L’utilisateur n'apparait pas
openstack user list | grep jean
Mais il apparait bien avec
openstack user show jean
Solution
Augmenter le page_size /etc/keystone/domains/keystone.acme.conf
[ldap] page_size = 500
Puis restart d'Apache ou du service keystone.
Autres
Note : iptables est remplacé maintenant par nftables
iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
OpenStack Keystone - Role & Policy
Voir :
Exemple de conf : https://github.com/openstack/keystone/blob/master/etc/policy.v3cloudsample.json
/etc/keystone/keystone.conf
[oslo_policy] policy_file = /etc/keystone/policy.yaml
/etc/cinder/cinder.conf:policy_file = /etc/cinder/policy.yaml /etc/nova/nova.conf:policy_file = /etc/nova/policy.yaml
/etc/openstack-dashboard/local_settings.py
# Path to directory containing policy files POLICY_FILES_PATH = '/etc' POLICY_FILES = { 'identity': 'keystone/policy.yaml', 'compute': 'nova/policy.yaml', 'volume': 'cinder/policy.yaml', 'image': 'glance/policy.json', 'orchestration': 'heat/policy.yaml', 'network': 'neutron/policy.json', # 'clustering': 'senlin/policy.json', }
python -c 'import sys, yaml, json; yaml.safe_dump(json.load(sys.stdin), sys.stdout, default_flow_style=False)' < /opt/stack/keystone/etc/policy.v3cloudsample.json > /etc/keystone/policy.yaml
Logs
journalctl -f -u devstack@keystone.service | grep -i warning
Fichier policy.json / policy.yaml
oslopolicy-sample-generator --namespace keystone --format yaml --output-file /etc/keystone/policy.yaml #oslopolicy-sample-generator --namespace neutron --format yaml | sed -e '/^#"\(remove\|update\|delete\|create\|add\)_/,/"/s/rule:.*/rule:admin_only"/' |sed -e '/^#"\(remove\|update\|delete\|create\|add\)_/, /"/s/^#\(.*rule:.*\)/\1/' > /etc/neutron/policy2.yaml #oslopolicy-sample-generator --namespace neutron --format json | sed -e '/"\(remove\|update\|delete\|create\|add\)_/,/s/rule:.*/rule:admin_only\"/' > /etc/neutron/policy.json #oslopolicy-sample-generator --namespace neutron --format yaml | sed -e '/^#"\(remove\|update\|delete\|create\|add\)_/,/"/s/rule:.*/rule:admin_only"/' |sed -e '/^#"\(remove\|update\|delete\|create\|add\)_/,/"/s/^#\(.*rule:.*\)/\1/' > /etc/neutron/policy2.yaml
Ou
# cp -p /opt/stack/keystone/etc/policy.v3cloudsample.json /etc/keystone/policy.json curl https://raw.githubusercontent.com/openstack/keystone/master/etc/policy.v3cloudsample.json > /etc/keystone/policy.json
roles implicites (sauf pour admin)
/etc/keystone/keystone.conf
[assignment] prohibited_implied_role = admin [token] infer_roles = true
Domain Admin
Voir :
Création d'un nouveau domaine et d'un groupe admin du domaine (domain admin)
openstack domain create acme openstack group create --domain acme acme_admins openstack user create --domain acme --password toor acmeadm openstack group add user acme_admins acmeadm openstack role add --group acme_admins --domain acme admin
Voir https://dstanek.com/keystone-domain-admins/
Ajout d'un utilisateur au nouveau domaine
openstack role add --user jean --user-domain acme --project jbprj member #openstack role add admin --domain acme --user 8f20dc8ae49141c3bdc1f59927bf79eb --inherited openstack role add --user jean --user-domain acme --project jbprj member --inherited
Correction fichier
journalctl -f -u devstack@keystone.service 2>/dev/null | grep -i warning | grep -i deprecated | grep -v 'service nova' | sed -e 's/^.*in favor of //' | sed -e 's/\. Reason:.*//' | grep '^\"' | tee plop cat plop | sort -u | tr -d '"' | sed -e 's/$/& or role:cloudadmin/' >> /etc/keystone/policy.yaml >> /etc/keystone/policy.yaml vim !$
Autre
cp -p /opt/stack/keystone/keystone/tests/unit/config_files/access_rules.json /etc/keystone/access_rules.json
openstack implied role list openstack role assignment list --user jean --name --effective openstack role assignment list --user dom1_user --name --effective --user-domain dom1
Test
openstack domain create dom1 openstack user create dom1_admin --password toor --domain dom1 openstack role add admin --user dom1_admin --domain dom1 --inherited --user-domain dom1 ## Ne pas faire, sinon droit même sur les autres domaines ! #openstack role add admin --user dom1_admin --domain dom1 --user-domain dom1 # Pour autoriser l'utilisateur à se connecter sur le Web UI (Horizon) il faut qu'il puisse accèder au moins à un projet. openstack project create dom1_prj1 --domain dom1 openstack role add admin --project-domain dom1 --project dom1_prj1 --user dom1_admin --user-domain dom1 # Création utilisateur du domain openstack user create dom1_user --password toor --domain dom1 openstack role add member --user dom1_user --domain dom1 --inherited --user-domain dom1 # Création d'un projet pour l'utilisateur dom1_user openstack project create dom1_user_prj1 --domain dom1 openstack role add admin --project-domain dom1 --project dom1_user_prj1 --user dom1_user --user-domain dom1 # Création de d'administrateur du projet projet1 openstack project create prj1 --domain dom1 openstack user create dom1_projet1_admin --password toor --domain dom1 --project prj1 --project-domain dom1 # # PB DROIT ADMIN #openstack role add admin --user dom1_projet1_admin --domain dom1 --user-domain dom1 # Création de l'utilsateur du projet projet1 openstack user create dom1_projet1_user --password toor --domain dom1 --project prj1 --project-domain dom1 openstack role add member --user dom1_projet1_user --user-domain dom1 --project prj1 --project-domain dom1 ## A quoi sert le --inherited sur un projet ? #openstack role add member --user dom1_projet1_user --user-domain dom1 --project prj1 --project-domain dom1 --inherited
Reset
openstack domain set --disable dom1 openstack domain delete dom1
Notes OpenStack Glance (images)
Install de Glance (Pour gérer les images)
Voir :
sudo yum install openstack-glance penstack-glance-doc
sudo su - postgres
CREATE ROLE glanceuser WITH LOGIN PASSWORD 'toor'; CREATE DATABASE glance OWNER glanceuser ;
source openrc openstack project create service openstack user create --domain default --password-prompt glance openstack role add --project service --user glance admin openstack service create image --name glance --description "Glance Image Service" openstack endpoint create --region RegionOne glance public http://srv-openstack-controller:9292
Conf
- /etc/glance/glance-api.conf
- /etc/glance/glance-registry.conf
/etc/glance/glance-api.conf
[DEFAULT] debug = true [database] connection = postgresql://glanceuser:toor@127.0.0.1/glance [glance_store] stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images [keystone_authtoken] www_authenticate_uri = http://srv-openstack-controller:5000/v3: auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = glance password = toor [paste_deploy] flavor = keystone
Idem pour /etc/glance/glance-registry.conf
su -s /bin/sh -c 'glance-manage db_sync' glance mkdir /var/lib/glance/images chown glance:nobody /var/lib/glance/images/ systemctl start openstack-glance-api.service systemctl start openstack-glance-registry.service systemctl enable openstack-glance-api.service systemctl enable openstack-glance-registry.service
Test
openstack image list wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img openstack image create cirros --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public
API CLI
openstack.rc
unset $(set | grep _ENDPOINT_ | cut -d= -f1) unset $(set | grep ^OS_ | cut -d= -f1) export LC_ALL=C # LC_ALL=C.UTF-8 export OS_NO_CACHE='true' export OS_CACERT=/etc/ssl/certs/ export OS_IDENTITY_API_VERSION='3' export OS_AUTH_URL='https://192.168.21.53:5000/v3' export OS_USERNAME=admin export OS_PASSWORD='P@ssw0rd' export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default
glance image-list glance image-create --name plop --file plop.vmdk --disk-format vmdk --container-format bare --visibility private
Policy
Voir
OpenStack Glance: allow user to create public images
Notes OpenStack - Nova - console VNC NOVNC spice serial
/opt/stack/horizon/openstack_dashboard/dashboards/project/instances/templates/instances/_detail_console.html /usr/share/qemu/keymaps/
/etc/nova/nova-cpu.conf
[vnc] # Keymap is depecated keymap = fr
/etc/libvirt/qemu/instance-00000023.xml
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' keymap='fr'> <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' keymap='fr'> <graphics type='spice' autoport='yes' listen='0.0.0.0' keymap='fr'>
apt-get install spice-vdagent
/opt/stack/noVNC/vnc_auto.html
Slice à la place de VNC
Voir :
/etc/nova/nova-cpu.conf
[vnc] server_proxyclient_address = 0.0.0.0 server_listen = 0.0.0.0 xvpvncproxy_base_url = http://192.168.56.11:6081/console novncproxy_base_url = http://192.168.56.11:6080/vnc_auto.html vnc_enabled = False novnc_enabled = False [spice] html5proxy_base_url = http://192.168.56.11:6082/spice_auto.html agent_enabled = True enabled = True server_listen = 0.0.0.0 server_proxyclient_address = 192.168.56.11
PS : Two keymap-related configuration options have been deprecated:
- [vnc] keymap
- [spice] keymap
Voir https://docs.openstack.org/releasenotes/nova/rocky.html
systemctl restart devstack@n-*
Certaines modif ne s’appliqueront que sur les nouvelles VMs déployées. puisque c'est la conf /etc/libvirt/qemu/ qui est définie.
apt-get install nova-spiceproxy
WebSocket error: Can't connect to websocket on URL: ws://192.168.56.11:6082/websockify [object Event]
Log de la console KVM/Libvirt
/opt/stack/data/nova/instances/4aa28898-07ce-4f16-8666-4e33e32a7450/console.log
voir /etc/libvirt/qemu/instance-00000006.xml
A tester
aptitude install uwsgi-plugin-python
nova get-vnc-console INSTANCE_NAME VNC_TYPE
Notes OpenStack - Horizon Web UI
Changer le délai de déconnexion
Horizon session timeout
Fichier
- /etc/openstack-dashboard/local_settings.py
- /opt/stack/horizon/openstack_dashboard/local/local_settings.py
local_settings.py
# dashboard session timeout in seconds SESSION_TIMEOUT = 3600
systemctl restart httpd
Voir aussi
/etc/keystone/keystone.conf
[token] expiration = 36000
systemctl restart devstack@keystone.service
Ou encore sous K8S
kubectl -n openstack edit horizon
spec: conf: horizon: local_settings: config: horizon_session_timeout: 14400
