Projet

Général

Profil

Scénario #16278

Les services OpenNebula doivent être accessibles derrière un reverse proxy

Ajouté par Daniel Dehennin il y a presque 8 ans. Mis à jour il y a plus de 4 ans.

Statut:
Terminé (Sprint)
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Début:
06/05/2019
Echéance:
31/10/2019
% réalisé:

100%

Points de scénarios:
7.0
Restant à faire (heures):
0.00 heure
Estimation basée sur la vélocité:
Release:
Liens avec la release:
Auto

Description

Problème

Actuellement les services OpenNebula ne sont pas accessibles de façon simple et homogène :

  • L’interface web Sunstone écoute sur l’IP de la première interface réseau sur le port 9000 (le port part défaut est 9869)
  • Le service XMLRPC oned n’est accessible que sur 127.0.0.1 sur le port 2633 (port par défault)
  • Le service OneFlow n’est accessible que sur 127.0.0.1 sur le port 2474 (port par défault)

Propositions

Livraison pour EOLE 2.7.2

  1. Permettre le paramétrage de l’IP et du port d’écoute du service XMLRPC avec les variables oned_xmlrpc_ip et oned_xmlrpc_port:
    • Elles sont déclarées obligatoire en mode expert avec l’IP forcé à 127.0.0.1 par eole-one-master (non visible où tourne le service oned, oned_xmlrpc_port remplace la variable inutilisée xmlrpc_port_sunstone définie dans eole-one-frontend)
  2. Permettre le paramétrage de l’IP et du port d’écoute du service Sunstone avec les variables one_sunstone_ip et one_sunstone_port (ou conserver ip_sunstone et port_sunstone)
    • Elles sont déclarées obligatoire en mode expert avec l’IP forcé à 127.0.0.1 par eole-one-frontend
  3. Permettre le paramétrage de la taille maximale des requêtes HTTP avec la variable one_nginx_max_body_size
  4. Renommer activer_onesinglenode en activer_oned
    • Elle est déclarée obligatoire avec la valeur forcée à oui par eole-one-master (non modifiable, c’est pour faire des %if dans les templates)
  5. Permettre le paramétrage de l’IP et du port d’écoute du service noVNC
    • Ajouter la variable one_sunstone_vnc_proxy_ip, obligatoire en mode expert avec l’IP forcée 127.0.0.1
    • Renommer vnc_proxy_port_sunstone en one_sunstone_vnc_proxy_port (c’est plus facile pour faire des grep ;-))
  6. Fournir un template nginx devant être utilisé par eole-one-master et eole-one-frontend, en s’inspirant du modèle suivant
    # Opennebula
    upstream oned {
        server %%oned_xmlrpc_ip:%%oned_xmlrpc_port;
    }
    
    %if %%getVar('activer_onefrontend', 'non') == 'oui'
    upstream sunstone {
        server %%one_sunstone_ip:%%one_sunstone_port;
    }
    
    # Will be useable when https://dev.opennebula.org/issues/3538
    # Usable with https://github.com/OpenNebula/one/issues/2781
    upstream websocketproxy {
        server %%one_sunstone_vnc_proxy_ip:%%one_sunstone_vnc_proxy_port;
    }
    %end if
    
    %if %%getVar('activer_oneflow', 'non') == 'oui'
    upstream one-flow {
        server 127.0.0.1:2474;
    }
    %end if
    
    # Port 80 redirected to SSL
    server {
        listen     80;
        server_name %%nom_domaine_machine;
    
        ### Permanent redirect to HTTPS
        return 301 https://$server_name:443;
    }
    
    # SSL reverse-proxy
    server {
        listen 443 default_server;
        listen [::]:443 default_server ipv6only=on;
    
        ssl on;
        ssl_certificate %%server_pem;
        ssl_certificate_key %%server_key;
    
    %if %%getVar('activer_onefrontend', 'non') == 'oui'
        # Make sure static files can be accessed directly by location /
        root /usr/lib/one/sunstone/public;
        index index.html index.htm;
    %end if
    
        server_name %%nom_domaine_machine;
    
        access_log  /var/log/nginx/opennebula-access.log;
        error_log  /var/log/nginx/opennebula-error.log;
    
    %if %%getVar('one_nginx_max_body_size', 'non') != 'non'
        client_max_body_size %%one_nginx_max_body_size;
    %end if
    
    %if %%getVar('activer_onefrontend', 'non') == 'oui'
        location / {
            try_files $uri @sunstone;
        }
    
        location /websockify {
            proxy_pass http://websocketproxy;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    
            # Wait 15 minutes before closing the connexion
            # if nothing move on the VNC screen
            proxy_send_timeout 15m;
            proxy_read_timeout 15m;
        }
    
        location @sunstone {
            include proxy_params;
            proxy_pass_request_headers on;
            proxy_pass http://sunstone;
        }
    %end if
    
    %if %%getVar('activer_oned', 'non') == 'oui'
        location /RPC2 {
            include proxy_params;
            proxy_pass http://oned;
        }
    %end if
    }
    
  7. Modifier la configuration du proxy noVNC
    • Pour qu’il écoute sur 127.0.0.1
      --- a/tmpl/sunstone-server.conf
      +++ b/tmpl/sunstone-server.conf
      @@ -124,7 +124,7 @@
       # :vnc_request_password: true | false
       #   Request VNC password for external windows, by default it will not be requested
       #
      -:vnc_proxy_port: %%vnc_proxy_port_sunstone
      +:vnc_proxy_port: %%one_sunstone_vnc_proxy_ip:%%one_sunstone_vnc_proxy_port
       :vnc_proxy_support_wss: yes
       :vnc_proxy_cert: /etc/one/ssl/certs/novnc.crt
       :vnc_proxy_key: /etc/one/ssl/private/novnc.key
      
    • Pour que les clients utilise le port HTTPS avec le contournement https://github.com/OpenNebula/one/issues/2781
      --- a/tmpl/sunstone-server.conf
      +++ b/tmpl/sunstone-server.conf
      @@ -130,6 +130,7 @@
       :vnc_proxy_key: /etc/one/ssl/private/novnc.key
       :vnc_proxy_ipv6: false
       :vnc_request_password: false
      +:vnc_client_port: 443/websockify
      
       # Login Session Length in seconds, defaults to 1 hour.
       #:session_expire_time: 3600
      
    • Pour ne plus utiliser TLS sur 127.0.0.1
      --- a/tmpl/sunstone-server.conf
      +++ b/tmpl/sunstone-server.conf
      @@ -125,9 +125,9 @@
       #   Request VNC password for external windows, by default it will not be requested
       #
       :vnc_proxy_port: %%one_sunstone_vnc_proxy_ip:%%one_sunstone_vnc_proxy_port
      -:vnc_proxy_support_wss: yes
      -:vnc_proxy_cert: /etc/one/ssl/certs/novnc.crt
      -:vnc_proxy_key: /etc/one/ssl/private/novnc.key
      +:vnc_proxy_support_wss: no
      +:vnc_proxy_cert:
      +:vnc_proxy_key:
       :vnc_proxy_ipv6: false
       :vnc_request_password: false
       :vnc_client_port: 443/websockify
      

À ne pas oublier

En mode HA le service XMLRPC écoute sur le port 2633 de toutes les IPs pour qu’un slave puisse communiquer avec le maître, nous voyons deux possibilités :
  • Concerver le mode de fonctionnement actuel (accès direct sur le port 2633)
  • Obliger les slaves à passer par le HTTPS ce qui nécessite un déploiment de la CA du maître (ce qui est faisable par la commande d’enrôlement)

Améliorations possibles

Critères d’acceptation

  1. L’interface web de Sunstone n’est accessible que sur le port 443
  2. L’ouverture des consoles VNC utilise le port 443 (pas de certificat supplémentaire à accepter par rapport à la connexion à Sunstone)
  3. Les tests CreoleLint sont OK dans Jenkins
  4. L’enregistrement de nœuds supplémentaires est fonctionnel (test jenkins test-hapy-002)

Sous-tâches

Tâche #28173: Demande de mise en variable pour WSSFerméPhilippe Caseiro

Tâche #28784: Proposition d'évolution pour l'ouverture de l'API XMLRPCFerméVincent Febvre

Tâche #29180: Création variables xml-rpcFerméPhilippe Caseiro

Tâche #29182: Permettre le paramétrage de l’IP et du port d’écoute du service SunstoneFerméVincent Febvre

Tâche #29183: Renommer activer_onesinglenodeFerméPhilippe Caseiro

Tâche #29184: Fournir un template nginxFerméVincent Febvre

Tâche #29196: Ajouter le nom dns de la VIP à la liste des noms inclus dans les demandes et certificats SSL.Reporté

Tâche #29197: Limiter l'accès à SUNSTONEReportéPhilippe Caseiro

Tâche #29203: Faire fonctionner l'API XML-RPC en mode HAFerméPhilippe Caseiro


Demandes liées

Lié à Distribution EOLE - Tâche #17496: L’API XMLRPC ne peut pas être accessible à distance Fermé 13/10/2016
Lié à EOLE OpenNebula - Bac à idée #29095: Les services frontend OpenNebula doivent être installable séparément du contrôleur Nouveau
Lié à Distribution EOLE - Tâche #29148: Validation du scénario : Les services OpenNebula doivent être accessibles derrière un reverse proxy Fermé 16/10/2019
Bloqué par Distribution EOLE - Tâche #29208: La procédure de mise à jour des propriétés des volumes de sauvegarde n’est pas fiable Fermé 25/10/2019

Historique

#1 Mis à jour par Daniel Dehennin il y a presque 8 ans

  • Assigné à mis à Daniel Dehennin

#2 Mis à jour par Daniel Dehennin il y a presque 8 ans

  • Tâche parente #16215 supprimé

#3 Mis à jour par Daniel Dehennin il y a presque 8 ans

  • Tracker changé de Tâche à Proposition Scénario
  • Sujet changé de La configuration nginx n’utilise pas l’IP d’écoute de sunstone à Permettre à Sunstone d’écouter sur 127.0.0.1
  • Description mis à jour (diff)
  • Statut changé de Nouveau à À formaliser
  • Assigné à Daniel Dehennin supprimé
  • Version cible sprint 2016 22-24 - Equipe MENESR supprimé
  • Temps estimé 1.00 h supprimé

#4 Mis à jour par Daniel Dehennin il y a plus de 7 ans

  • Sujet changé de Permettre à Sunstone d’écouter sur 127.0.0.1 à Les services OpenNebula doivent être accessibles derrière un reverse proxy
  • Description mis à jour (diff)

#5 Mis à jour par Daniel Dehennin il y a plus de 7 ans

  • Projet changé de eole-one-frontend à EOLE OpenNebula
  • Statut changé de À formaliser à Nouveau

#6 Mis à jour par Daniel Dehennin il y a plus de 7 ans

  • Tracker changé de Proposition Scénario à Scénario
  • Début 02/06/2016 supprimé
  • Release mis à EOLE 2.6.1

#7 Mis à jour par Joël Cuissinat il y a plus de 7 ans

  • Points de scénarios mis à 6.0

#8 Mis à jour par Daniel Dehennin il y a plus de 7 ans

  • Description mis à jour (diff)

#9 Mis à jour par Daniel Dehennin il y a plus de 7 ans

  • Description mis à jour (diff)

#10 Mis à jour par Scrum Master il y a plus de 7 ans

  • Points de scénarios changé de 6.0 à 8.0

#11 Mis à jour par Luc Bourdot il y a environ 7 ans

  • Release changé de EOLE 2.6.1 à EOLE 2.6.1.1

#12 Mis à jour par Scrum Master il y a presque 7 ans

  • Release changé de EOLE 2.6.1.1 à EOLE 2.6.2

#13 Mis à jour par Joël Cuissinat il y a plus de 6 ans

  • Release EOLE 2.6.2 supprimé

#14 Mis à jour par Daniel Dehennin il y a plus de 4 ans

Il est possible de faire en sorte que les flux noVNC passent par le reverse proxy nginx, voir l’astuce dans la demande GitHub 2781.

#15 Mis à jour par Gilles Grandgérard il y a plus de 4 ans

  • Release mis à Carnet de produit (Cadoles)

#16 Mis à jour par Gilles Grandgérard il y a plus de 4 ans

  • Points de scénarios changé de 8.0 à 1.0

#17 Mis à jour par Gilles Grandgérard il y a plus de 4 ans

  • Points de scénarios changé de 1.0 à 7.0

#18 Mis à jour par Joël Cuissinat il y a plus de 4 ans

  • Echéance mis à 31/10/2019
  • Version cible mis à Prestation Cadoles 42-44
  • Début mis à 14/10/2019

#19 Mis à jour par Daniel Dehennin il y a plus de 4 ans

  • Description mis à jour (diff)

#20 Mis à jour par Daniel Dehennin il y a plus de 4 ans

  • Description mis à jour (diff)

#21 Mis à jour par Joël Cuissinat il y a plus de 4 ans

  • Lié à Tâche #29147: Validation du scénario : L'intégration proxy dans un domaine AD doit fonctionner pour toutes les architectures ajouté

#22 Mis à jour par Joël Cuissinat il y a plus de 4 ans

  • Lié à Tâche #29147: Validation du scénario : L'intégration proxy dans un domaine AD doit fonctionner pour toutes les architectures supprimé

#23 Mis à jour par Joël Cuissinat il y a plus de 4 ans

  • Lié à Tâche #29148: Validation du scénario : Les services OpenNebula doivent être accessibles derrière un reverse proxy ajouté

#24 Mis à jour par Daniel Dehennin il y a plus de 4 ans

  • Statut changé de Nouveau à Terminé (Sprint)

#25 Mis à jour par Joël Cuissinat il y a plus de 4 ans

  • Release changé de Carnet de produit (Cadoles) à EOLE 2.7.2

Formats disponibles : Atom PDF