Outils pour utilisateurs

Outils du site


blog

Notes OpenStack Keystone

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
2025/03/24 15:06

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

Voir https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/14/html/users_and_identity_management_guide/role_management

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

Voir https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/12/html-single/users_and_identity_management_guide/index

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
2025/03/24 15:06

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

OpenStack Glance: allow user to create public images
2025/03/24 15:06

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
2025/03/24 15:06

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
2025/03/24 15:06
blog.txt · Dernière modification : de 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki