Projet

Général

Profil

Scénario #16278

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

h3. 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
Si l’on configure Sunstone pour n’écouter 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)

h3. Propositions

# Permettre le paramétrage
127.0.0.1 afin 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 project:eole-one-master (non visible où tourne
forcer le service *@oned@*)
** Elles sont déclares obligatoire en mode basic avec *@exists='False'@*
passage par les projets necessitant d’y accéder (pour l’instant project:eole-one-frontend et project:eole-one-flow) :
*** L’IP n’est pas renseignée
*** Le port est prédéfinie à *@443@* pour pointer sur le reverse proxy du service
# Permettre le paramétrage de l’IP et du port d’écoute du service *@OneFlow@* avec les variables *@one_flow_ip@* et *@one_flow_port@* (ou conserver *@ip_oneflow@* et *@port_oneflow@*)
** Elles sont déclarées obligatoire en mode expert avec l’IP forcé à *@127.0.0.1@* par project:eole-one-flow (non visible où tourne le service *@opennebula-flow@*)
** Elles sont déclares obligatoire en mode basic avec *@exists='False'@* par les projets necessitant d’y accéder (pour l’instant project:eole-one-frontend) :
*** L’IP n’est pas renseignée
*** Le port est prédéfinie à *@443@* pour pointer sur le reverse proxy du service
# 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 project:eole-one-frontend
# Permettre le paramétrage de
nginx, 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 project:eole-one-frontend
# Renommer *@activer_onesinglenode@* en *@activer_oned@*
** Elle est déclarée obligatoire avec la valeur forcée à *@oui@* par project:eole-one-master (non modifiable, c’est pour faire des *@%if@* dans les templates)
# Renommer *@vnc_proxy_port_sunstone@* en *@one_sunstone_vnc_proxy_port@* (c’est plus facile pour faire des grep ;-))
# Fournir un template
configuration nginx devant être utilisé par project:eole-one-master et project:eole-one-frontend
<pre>
# Opennebula
upstream oned {
server %%oned_xmlrpc_ip:%%oned_xmlrpc_port;
}
utilisera quand même *@adresse_ip_eth0@*.

%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
# upstream websocketproxy {
# server %%one_sunstone_ip:%%one_sunstone_vnc_proxy_port;
# }
%end if

%if %%getVar('activer_oneflow', 'non') == 'oui'
upstream one-flow {
server %%one_flow_ip:%%one_flow_port;
}
%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";
# }

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
}
</pre>

h3. Usages

* Lorsque un service est installé conjointement avec un autres, les variables sont bien renseignées comme il faut :
** Le dico du service fourni la variable qui est utilisé par les autres (les IP sont *@127.0.0.1@*)
** Le Nginx expose les services exposables à travers le port *@443@* en SSL
* Lorsque qu’un service est installé
De plus, l’utilisation de façon isolé, les variables utilisés sont obligatoire en mode basique :
** Il faut renseigner l’IP du reverse proxy exposant les différents services
noVNC oblige à utiliser
** Le port des services exposés par
l’adresse IP de la carte eth0 car le reverse proxy est prédéfinie à *@443@*
nginx sur Precise ne prend pas en charge websocket.

Retour