K5 Inter-Project Routing – Déploiement entièrement automatisé de l'API de services partagés
2017-01-18
Machine-translated — the English original is authoritative.
Dans les articles précédents, j'ai mentionné une fonctionnalité réseau spécifique à K5 appelée routage inter-projets. K5 étant un cloud public basé sur OpenStack et non un cloud OpenStack privé traditionnel, les propriétaires de contrats (alias administrateurs de domaine OpenStack) n'ont pas, par conception, la permission de créer des réseaux partagés. Cependant, de nombreux propriétaires de contrats constatent souvent le besoin de partager des ressources entre les projets, et c'est ici que le routage inter-projets K5 entre en jeu. Reprenez les articles de blog précédents sur les services partagés – tout cela est rendu possible grâce à cette fonctionnalité.
Note : Nous parlons ici du routage entre les sous-réseaux de projets au sein de la même zone de disponibilité et du même contrat. Les liens inter-zones de disponibilité sont également possibles et ont été discutés dans des articles précédents.

Afin que les machines virtuelles (VM) situées sur les sous-réseaux du Projet A ci-dessus puissent atteindre les VMs sur LES DEUX sous-réseaux du Projet B, il est nécessaire de créer un lien inter-projets vers CHACUN des sous-réseaux du Projet B. Cela représente donc deux liens inter-projets pour le scénario ci-dessus !
Étapes requises par sous-réseau
- Obtenir un jeton régional K5 étendu au Projet B
Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels
Afficher les caractères cachés
| def get_scoped_token(adminUser, adminPassword, contract, projectid, region): | |
| """Résumé – Obtenir un jeton de projet régional étendu à l'aide d'un nom d'utilisateur et d'un mot de passe | |
| Retourne : | |
| Objet : Objet de jeton de projet étendu régionalement | |
| Args : | |
| adminUser (TYPE) : nom d'utilisateur | |
| adminPassword (TYPE) : mot de passe | |
| contract (TYPE) : nom du contrat | |
| projectid (TYPE) : identifiant du projet | |
| region (TYPE) : région | |
| """ | |
| identityURL = 'https://identity.' + region + \ | |
| '.cloud.global.fujitsu.com/v3/auth/tokens' | |
| try: | |
| response = requests.post(identityURL, | |
| headers={'Content-Type': 'application/json', | |
| 'Accept': 'application/json'}, | |
| json={"auth": | |
| {"identity": | |
| {"methods": ["password"], "password": | |
| {"user": | |
| {"domain": | |
| {"name": contract}, | |
| "name": adminUser, | |
| "password": adminPassword | |
| }}}, | |
| "scope": | |
| {"project": | |
| {"id": projectid | |
| }}}}) | |
| return response | |
| except: | |
| return 'Échec de l'étendue du jeton de projet régional' |
voir brut
Get_Scoped_Token.py
hébergé avec ❤ par GitHub
- Créer un port sur le sous-réseau du Projet B
Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels
Afficher les caractères cachés
| def create_port(k5token, name, netid, sg_id, az, region): | |
| portURL = 'https://networking.' + region + \ | |
| '.cloud.global.fujitsu.com/v2.0/ports' | |
| try: | |
| response = requests.post(portURL, | |
| headers={ | |
| 'X-Auth-Token': k5token, 'Content-Type': 'application/json', 'Accept': 'application/json'}, | |
| json={"port": | |
| {"network_id": netid, | |
| "name": name, | |
| "admin_state_up": True, | |
| "availability_zone": az, | |
| "security_groups": | |
| [sg_id]}}) | |
| return response | |
| except: | |
| return ("\nErreur inattendue :", sys.exc_info()) |
voir brut
CreatePortonK5Subnet.py
hébergé avec ❤ par GitHub
- Récupérer l'identifiant du port (port_id) du port nouvellement créé
- Redéfinir l'étendue de votre jeton K5 vers le Projet A
Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels
Afficher les caractères cachés
| def get_rescoped_token(k5token, projectid, region): | |
| """Obtenir un jeton de projet régional – redéfini | |
| Retourne : | |
| STRING : Jeton de projet étendu régionalement | |
| Args : | |
| k5token (TYPE) : jeton régional valide | |
| projectid (TYPE) : identifiant du projet vers lequel étendre | |
| region (TYPE) : région K5 | |
| """ | |
| identityURL = 'https://identity.' + region + \ | |
| '.cloud.global.fujitsu.com/v3/auth/tokens' | |
| try: | |
| response = requests.post(identityURL, | |
| headers={'Content-Type': 'application/json', | |
| 'Accept': 'application/json'}, | |
| json={ | |
| "auth": { | |
| "identity": { | |
| "methods": [ | |
| "token" | |
| ], | |
| "token": { | |
| "id": k5token | |
| } | |
| }, | |
| "scope": { | |
| "project": { | |
| "id": projectid | |
| } | |
| } | |
| } | |
| }) | |
| return response | |
| except: | |
| return 'Échec de la redéfinition du projet régional' |
voir brut
ReScope_K5_Token.py
hébergé avec ❤ par GitHub
- Utiliser l'appel d'API Neutron amélioré de Fujitsu K5, non disponible dans OpenStack amont, pour établir la connexion inter-projets. Cet appel d'API permet à l'administrateur de projet d'ajouter une interface provenant d'un sous-réseau d'un autre projet au routeur du projet de l'administrateur.
Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels
Afficher les caractères cachés
| def inter_project_connection_create(k5token, router, port, region): | |
| routerURL = 'https://networking-ex.' + region + \ | |
| '.cloud.global.fujitsu.com/v2.0/routers/' + \ | |
| router + '/add_cross_project_router_interface' | |
| try: | |
| response = requests.put(routerURL, | |
| headers={'X-Auth-Token': k5token, | |
| 'Content-Type': 'application/json'}, | |
| json={"port_id": port}) | |
| return response | |
| except: | |
| return ("\nErreur inattendue :", sys.exc_info()) |
voir brut
AddInterPojectRoute.py
hébergé avec ❤ par GitHub
- Redéfinir le jeton K5 vers le Projet B (appel d'API de redéfinition de jeton détaillé plus tôt dans l'article)
- Ajouter les routes de retour statiques pour les réseaux du Projet A au routeur du Projet B (Note : si votre conception ne dispose pas de routeur dans le Projet B, vous pouvez ajouter ces routes aux sous-réseaux du Projet B et redémarrer vos serveurs pour recevoir les nouvelles informations de routage)
- Routes au format [{“destination”: CIDR-1, “nexthop”: interProject-Port-IP},{“destination”: CIDR-2, “nexthop”: interProject-Port-IP} ]
Mise à jour du routeur
Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels
Afficher les caractères cachés
| def update_router_routes(k5token, routerid, routes, region): | |
| # ex. routes = [{'destination': '192.168.10.0/24', 'nexthop': u'192.168.100.2'}, {'destination': '192.168.11.0/24', 'nexthop': u'192.168.100.2'}] | |
| try: | |
| routerURL = 'https://networking-ex.' + region + \ | |
| '.cloud.global.fujitsu.com/v2.0/routers/' + routerid | |
| response = requests.put(routerURL, | |
| headers={'X-Auth-Token': k5token, | |
| 'Content-Type': 'application/json'}, | |
| json={"router": {"routes": routes}}) | |
| return response | |
| except: | |
| return ("\nErreur inattendue :", sys.exc_info()) |
voir brut
K5-Update-Router-Routes.py
hébergé avec ❤ par GitHub
Mise à jour alternative du sous-réseau
Ce fichier contient du texte Unicode caché ou bidirectionnel qui peut être interprété ou compilé différemment de ce qui est affiché ci-dessous. Pour examiner, ouvrez le fichier dans un éditeur qui révèle les caractères Unicode cachés.
En savoir plus sur les caractères Unicode bidirectionnels
Afficher les caractères cachés
| def add_static_route_to_subnet(k5token, subnetid, routes, region): | |
| # ex. routes = = [{'destination': '192.168.101.0/24', 'nexthop': u'192.168.100.2'},{'destination': '192.168.100.0/24', 'nexthop': u'192.168.100.2'}] | |
| subnetURL = 'https://networking.' + region + \ | |
| '.cloud.global.fujitsu.com/v2.0/subnets/' + subnetid | |
| try: | |
| response = requests.put(subnetURL, | |
| headers={'X-Auth-Token': k5token, | |
| 'Content-Type': 'application/json'}, | |
| json={"subnet": {"host_routes": routes}}) | |
| return response | |
| except: | |
| return ("\nErreur inattendue :", sys.exc_info()) |
voir brut
K5-Subnet-Route-Update.py
hébergé avec ❤ par GitHub
Et c'est tout ! Vous devriez maintenant être en mesure de router entre vos projets.
Où est l'automatisation, me demandez-vous...
Et bien, j'ai rapidement « bidouillé » les deux scripts Python suivants pour une démo client. Le code Python n'est en aucun cas efficace (alias DRY - Don't Repeat Yourself), mais il est adapté à l'objectif de ce tutoriel :
Dépôt : https://github.com/allthingsclowd/K5-InterProject-Demo
K5-InterProject-Demo
Déploiement entièrement automatisé de l'API de services partagés sur Fujitsu K5
Cible – Plateforme Cloud IaaS Fujitsu K5
Auteur : Graham Land
Date : 18/01/17
Twitter : @allthingsclowd
Github : https://github.com/allthingscloud
Blog : https://allthingscloud.eu
Les scripts Python de ce dépôt peuvent être utilisés pour créer le modèle de services partagés ci-dessous auto-magiquement 🙂
Étapes :
- Copiez tous ces fichiers dans le même répertoire
- Modifiez le fichier k5contractsettingsv10.py pour inclure les détails de votre contrat K5
Avertissement : Assurez-vous d'utiliser deux projets « jetables » au sein de votre contrat et ajoutez leurs noms et identifiants dans le fichier ci-dessus.
Toutes les ressources dans ces projets seront supprimées, assurez-vous donc de ne pas les partager avec d'autres utilisateurs. - Lancez le script build_multi_project_demo.py et détendez-vous ! Toutes les clés SSH, adresses IP publiques, etc. sont retournées à la console.
- Une fois que vous avez fini de jouer avec le routage, vous pouvez utiliser purge_project.py pour tout réinitialiser.
Happy Stacking !
voir brut
MultiProjectAPIDemo.md
hébergé avec ❤ par GitHub
Happy Stacking !
withk5youcan
Originally published on allthingscloud.eu (2017-01-18).
