Scénario #16278
Les services OpenNebula doivent être accessibles derrière un reverse proxy
Status:
Terminé (Sprint)
Priority:
Normal
Assigned To:
-
Category:
-
Target version:
Start date:
05/06/2019
Due date:
10/31/2019
% Done:
100%
Story points:
7.0
Remaining (hours):
0.00 hour
Velocity based estimate:
Release:
Release relationship:
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 lapremière interface réseau
sur le port9000
(le port part défaut est9869
) - Le service XMLRPC
oned
n’est accessible que sur127.0.0.1
sur le port2633
(port par défault) - Le service
OneFlow
n’est accessible que sur127.0.0.1
sur le port2474
(port par défault)
Propositions¶
Livraison pour EOLE 2.7.2
- Permettre le paramétrage de l’IP et du port d’écoute du service XMLRPC avec les variables
oned_xmlrpc_ip
etoned_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 serviceoned
,oned_xmlrpc_port
remplace la variable inutiliséexmlrpc_port_sunstone
définie dans eole-one-frontend)
- Elles sont déclarées obligatoire en mode expert avec l’IP forcé à
- Permettre le paramétrage de l’IP et du port d’écoute du service
Sunstone
avec les variablesone_sunstone_ip
etone_sunstone_port
(ou conserverip_sunstone
etport_sunstone
)- Elles sont déclarées obligatoire en mode expert avec l’IP forcé à
127.0.0.1
par eole-one-frontend
- Elles sont déclarées obligatoire en mode expert avec l’IP forcé à
- Permettre le paramétrage de la taille maximale des requêtes HTTP avec la variable
one_nginx_max_body_size
- Elle est déclarée optionelle en mode expert par eole-one-frontend
- Renommer
activer_onesinglenode
enactiver_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)
- Elle est déclarée obligatoire avec la valeur forcée à
- 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ée127.0.0.1
- Renommer
vnc_proxy_port_sunstone
enone_sunstone_vnc_proxy_port
(c’est plus facile pour faire des grep ;-))
- Ajouter la variable
- 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 }
- 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
- Pour qu’il écoute sur 127.0.0.1
À ne pas oublier¶
En modeHA
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¶
- Certains scripts peuvent sûrement être raccourcis en les réécrivant en ruby avec l’API OpenNebula:
- Le script shell de 468 lignes eole-one-master:source:postservice/30-one-mng@776da48
- Le script python de 361 lignes eole-one-master:source:postservice/31-one-netmng@776da48
- Le script shell de 148 lignes eole-one-master:source:postservice/99-init-hapy-master@776da48
- Un fichier de configuration pour définir les paramètres
ONE_AUTH
,ONE_XMLRPC
ainsi que les variables utilisés par les scripts afin de minimiser les appels àcreoled
Critères d’acceptation¶
- L’interface web de Sunstone n’est accessible que sur le port 443
- L’ouverture des consoles VNC utilise le port 443 (pas de certificat supplémentaire à accepter par rapport à la connexion à Sunstone)
- Les tests CreoleLint sont OK dans Jenkins
- L’enregistrement de nœuds supplémentaires est fonctionnel (test jenkins
test-hapy-002
)
Subtasks
Related issues
History
#1 Updated by Daniel Dehennin over 7 years ago
- Assigned To set to Daniel Dehennin
#2 Updated by Daniel Dehennin over 7 years ago
- Parent task deleted (
#16215)
#3 Updated by Daniel Dehennin over 7 years ago
- Tracker changed from Tâche to Proposition Scénario
- Subject changed from La configuration nginx n’utilise pas l’IP d’écoute de sunstone to Permettre à Sunstone d’écouter sur 127.0.0.1
- Description updated (diff)
- Status changed from Nouveau to À formaliser
- Assigned To deleted (
Daniel Dehennin) - Target version deleted (
sprint 2016 22-24 - Equipe MENESR) - Estimated time deleted (
1.00 h)
#4 Updated by Daniel Dehennin almost 7 years ago
- Subject changed from Permettre à Sunstone d’écouter sur 127.0.0.1 to Les services OpenNebula doivent être accessibles derrière un reverse proxy
- Description updated (diff)
#5 Updated by Daniel Dehennin almost 7 years ago
- Project changed from eole-one-frontend to EOLE OpenNebula
- Status changed from À formaliser to Nouveau
#6 Updated by Daniel Dehennin almost 7 years ago
- Tracker changed from Proposition Scénario to Scénario
- Start date deleted (
06/02/2016) - Release set to EOLE 2.6.1
#7 Updated by Joël Cuissinat almost 7 years ago
- Story points set to 6.0
#8 Updated by Daniel Dehennin almost 7 years ago
- Description updated (diff)
#9 Updated by Daniel Dehennin almost 7 years ago
- Description updated (diff)
#10 Updated by Scrum Master almost 7 years ago
- Story points changed from 6.0 to 8.0
#11 Updated by Luc Bourdot over 6 years ago
- Release changed from EOLE 2.6.1 to EOLE 2.6.1.1
#12 Updated by Scrum Master over 6 years ago
- Release changed from EOLE 2.6.1.1 to EOLE 2.6.2
#13 Updated by Joël Cuissinat almost 6 years ago
- Release deleted (
EOLE 2.6.2)
#14 Updated by Daniel Dehennin about 4 years ago
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 Updated by Gilles Grandgérard about 4 years ago
- Release set to Carnet de produit (Cadoles)
#16 Updated by Gilles Grandgérard almost 4 years ago
- Story points changed from 8.0 to 1.0
#17 Updated by Gilles Grandgérard almost 4 years ago
- Story points changed from 1.0 to 7.0
#18 Updated by Joël Cuissinat almost 4 years ago
- Due date set to 10/31/2019
- Target version set to Prestation Cadoles 42-44
- Start date set to 10/14/2019
#19 Updated by Daniel Dehennin almost 4 years ago
- Description updated (diff)
#20 Updated by Daniel Dehennin almost 4 years ago
- Description updated (diff)
#21 Updated by Joël Cuissinat almost 4 years ago
- Related to Tâche #29147: Validation du scénario : L'intégration proxy dans un domaine AD doit fonctionner pour toutes les architectures added
#22 Updated by Joël Cuissinat almost 4 years ago
- Related to deleted (Tâche #29147: Validation du scénario : L'intégration proxy dans un domaine AD doit fonctionner pour toutes les architectures)
#23 Updated by Joël Cuissinat almost 4 years ago
- Related to Tâche #29148: Validation du scénario : Les services OpenNebula doivent être accessibles derrière un reverse proxy added
#24 Updated by Daniel Dehennin almost 4 years ago
- Status changed from Nouveau to Terminé (Sprint)
#25 Updated by Joël Cuissinat almost 4 years ago
- Release changed from Carnet de produit (Cadoles) to EOLE 2.7.2