restreint l'écoute des bases OVN à l'interface interne, supprime le volume proxysql_socket résiduel

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Adam Belkacemi 2026-10-07 15:57:46 +02:00
parent db2842689a
commit 21c9de6d10
3 changed files with 65 additions and 1 deletions

View file

@ -0,0 +1,53 @@
---
# Corrections à des comportements par défaut de Kolla-Ansible non adaptés à un
# nœud unique, appliquées après le déploiement (voir docs/journal.md,
# étape 5 : correctifs ProxySQL, Docker ip6tables). Ignorées si OpenStack n'a
# pas encore été déployé (conteneurs OVN absents).
- name: vérifier que les bases OVN sont déployées
ansible.builtin.command: docker inspect ovn_nb_db
register: kolla_ovn_nb_db_existe
changed_when: false
failed_when: false
# Les bases OVN (ovn-nb-db, ovn-sb-db) sont codées en dur pour écouter sur
# 0.0.0.0:6641/6642 (ansible/roles/ovn-db/tasks/bootstrap-db.yml de Kolla,
# ligne « set-connection ptcp:{{ port }}:0.0.0.0 »), contrairement aux ports de
# cluster (6643/6644) qui respectent déjà api_interface_address (dummy0). Le
# pare-feu bloque ces ports depuis Internet, mais on les restreint quand même
# à l'interface interne (défense en profondeur).
- name: déterminer l'adresse interne (dummy0)
ansible.builtin.set_fact:
kolla_adresse_interne: "{{ (reseau_dummy_ip | default('10.10.0.1/24')).split('/')[0] }}"
- name: lire l'adresse d'écoute actuelle d'OVN NB
when: kolla_ovn_nb_db_existe.rc == 0
ansible.builtin.command:
cmd: docker exec ovn_nb_db ovn-nbctl --db=unix:/run/ovn/ovnnb_db.sock get-connection
register: kolla_ovn_nb_connection
changed_when: false
- name: "restreindre OVN NB (6641) à l'adresse interne"
ansible.builtin.command:
cmd: >
docker exec ovn_nb_db ovn-nbctl --db=unix:/run/ovn/ovnnb_db.sock
set-connection ptcp:6641:{{ kolla_adresse_interne }}
when:
- kolla_ovn_nb_db_existe.rc == 0
- "'0.0.0.0' in kolla_ovn_nb_connection.stdout"
- name: lire l'adresse d'écoute actuelle d'OVN SB
when: kolla_ovn_nb_db_existe.rc == 0
ansible.builtin.command:
cmd: docker exec ovn_sb_db ovn-sbctl --db=unix:/run/ovn/ovnsb_db.sock get-connection
register: kolla_ovn_sb_connection
changed_when: false
- name: "restreindre OVN SB (6642) à l'adresse interne"
ansible.builtin.command:
cmd: >
docker exec ovn_sb_db ovn-sbctl --db=unix:/run/ovn/ovnsb_db.sock
set-connection ptcp:6642:{{ kolla_adresse_interne }}
when:
- kolla_ovn_nb_db_existe.rc == 0
- "'0.0.0.0' in kolla_ovn_sb_connection.stdout"

View file

@ -118,3 +118,7 @@
PATH: "{{ kolla_venv }}/bin:{{ ansible_env.PATH }}" PATH: "{{ kolla_venv }}/bin:{{ ansible_env.PATH }}"
register: kolla_install_deps register: kolla_install_deps
changed_when: "'Installing' in kolla_install_deps.stdout" changed_when: "'Installing' in kolla_install_deps.stdout"
- name: appliquer les correctifs post-déploiement
ansible.builtin.import_tasks: corrections.yml
tags: [corrections]

View file

@ -179,9 +179,16 @@ OpenStack a besoin de deux réseaux en plus de l'accès public : un réseau inte
**Dettes notées** **Dettes notées**
- Les bases OVN (`ovsdb-server`, 6641/6642) écoutent sur `0.0.0.0`. Le pare-feu les bloque, mais il faudrait les restreindre à `10.10.0.1` (défense en profondeur). - ~~Les bases OVN (`ovsdb-server`, 6641/6642) écoutent sur `0.0.0.0`~~ corrigé le 2026-10-07 (voir plus bas).
- Kolla est installé depuis une branche, pas un tag : figer la version pour la reproductibilité (ADR 0001). - Kolla est installé depuis une branche, pas un tag : figer la version pour la reproductibilité (ADR 0001).
**Correctifs du 2026-10-07 (suite), demandés par Adam**
- Volume Docker résiduel `proxysql_socket` supprimé (accord d'Adam), après `proxysql_socket` lui-même supprimé lors du correctif ProxySQL.
- **Écoute OVN restreinte à `10.10.0.1`.** Cause : `ansible/roles/ovn-db/tasks/bootstrap-db.yml` de Kolla fait `ovn-nbctl/ovn-sbctl set-connection ptcp:PORT:0.0.0.0` en dur à la création des bases, sans tenir compte de `api_interface`. Les ports de cluster (6643/6644) ne sont pas concernés : ils respectent déjà `api_interface_address`. Le pare-feu bloquait déjà ces ports depuis Internet (vérifié à l'étape 5), donc pas de faille réelle, mais la bonne pratique de défense en profondeur ne coûte rien à appliquer.
- Correctif codé dans `ansible/roles/kolla/tasks/corrections.yml` (idempotent : relit l'écoute actuelle avant de la changer, ignoré si OpenStack n'est pas encore déployé), importé à la fin de `ansible/roles/kolla/tasks/main.yml`, tag `corrections`.
- Vérifié : `ss -tlnp` montre les 4 ports OVN (6641-6644) sur `10.10.0.1` uniquement ; un second passage du playbook ne rapporte aucun changement (idempotence confirmée) ; les agents OVN et les services Nova restent `up` après coup.
**Comprendre** **Comprendre**
Kolla-Ansible déploie OpenStack sous forme de conteneurs Docker : chaque service (Keystone, Nova, Neutron…) tourne dans son propre conteneur, configuré par Ansible à partir d'un seul fichier, `globals.yml`. Les deux incidents de cette étape viennent de valeurs par défaut prévues pour un vrai cluster de plusieurs serveurs. Docker crée des règles de pare-feu IPv6 pour ses réseaux, et ProxySQL suppose une adresse virtuelle distincte de celle du serveur. Sur un seul nœud, ces mécanismes ne servent à rien et se gênent entre eux. La leçon : lire le code de l'outil avant de le lancer, et comparer le pare-feu avant et après, plutôt que de faire confiance aux options. C'est ce qui a permis de repérer les tables Docker en quelques secondes. Kolla-Ansible déploie OpenStack sous forme de conteneurs Docker : chaque service (Keystone, Nova, Neutron…) tourne dans son propre conteneur, configuré par Ansible à partir d'un seul fichier, `globals.yml`. Les deux incidents de cette étape viennent de valeurs par défaut prévues pour un vrai cluster de plusieurs serveurs. Docker crée des règles de pare-feu IPv6 pour ses réseaux, et ProxySQL suppose une adresse virtuelle distincte de celle du serveur. Sur un seul nœud, ces mécanismes ne servent à rien et se gênent entre eux. La leçon : lire le code de l'outil avant de le lancer, et comparer le pare-feu avant et après, plutôt que de faire confiance aux options. C'est ce qui a permis de repérer les tables Docker en quelques secondes.