K5 Routing Inter-Progetto – Distribuzione Automatizzata di API per Servizi Condivisi
2017-01-18
Machine-translated — the English original is authoritative.
Ne post precedenti ho menzionato una funzionalità di rete specifica di K5 chiamata Routing Inter-Progetto. Poiché K5 è una cloud pubblica basata su OpenStack e non una tradizionale cloud OpenStack privata, i Proprietari dei Contratti (a.k.a. amministratori del dominio OpenStack) non hanno, per progettazione, il permesso di creare reti condivise. Tuttavia, molti proprietari di contratti spesso riscontrano la necessità di condividere risorse tra progetti ed è qui che entra in gioco il Routing Inter-Progetto di K5. Prendete i post precedenti del blog sui Servizi Condivisi: tutto questo è possibile grazie a questa funzionalità.
Nota: Stiamo parlando di routing tra le subnet dei progetti all'interno della stessa zona di disponibilità e contratto; i collegamenti tra zone di disponibilità diverse sono anche possibili e sono stati discussi in post precedenti.

Per permettere alle macchine virtuali (VM) sulle subnet nel Progetto A sopra di raggiungere le VM su ENTRAMBE le subnet nel Progetto B, è necessario creare un collegamento Inter-Progetto per CIASCUNA delle subnet nel Progetto B. Questo significa due collegamenti inter-progetto per lo scenario sopra!
Passaggi richiesti per ogni Subnet
- Ottenere un token regionale k5 limitato al Progetto B
Questo file contiene caratteri Unicode nascosti o bidirezionali che potrebbero essere interpretati o compilati in modo diverso da quanto appare qui sotto. Per rivederli, apri il file in un editor che riveli i caratteri Unicode nascosti.
Maggiori informazioni sui caratteri Unicode bidirezionali
| def get_scoped_token(adminUser, adminPassword, contract, projectid, region): | |
| """Riepilogo – Ottieni un token limitato a un progetto regionale utilizzando nome utente e password | |
| Restituisce: | |
| Oggetto: Oggetto Token di Progetto Limitato Regionalmente | |
| Argomenti: | |
| adminUser (TYPE): nome utente | |
| adminPassword (TYPE): password | |
| contract (TYPE): nome del contratto | |
| projectid (TYPE): id del progetto | |
| region (TYPE): regione | |
| """ | |
| 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 'Fallimento del Limitamento del Token di Progetto Regionale' |
visualizza raw
Get_Scoped_Token.py
ospitato con ❤ da GitHub
- Crea una porta sulla subnet nel Progetto B
Questo file contiene caratteri Unicode nascosti o bidirezionali che potrebbero essere interpretati o compilati in modo diverso da quanto appare qui sotto. Per rivederli, apri il file in un editor che riveli i caratteri Unicode nascosti.
Maggiori informazioni sui caratteri Unicode bidirezionali
| 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 ("\nErrore imprevisto:", sys.exc_info()) |
visualizza raw
CreatePortonK5Subnet.py
ospitato con ❤ da GitHub
- Cattura l'ID della porta appena creata
- Rilimita il tuo token K5 al Progetto A
Questo file contiene caratteri Unicode nascosti o bidirezionali che potrebbero essere interpretati o compilati in modo diverso da quanto appare qui sotto. Per rivederli, apri il file in un editor che riveli i caratteri Unicode nascosti.
Maggiori informazioni sui caratteri Unicode bidirezionali
| def get_rescoped_token(k5token, projectid, region): | |
| """Ottieni un token di progetto regionale – rilimitato | |
| Restituisce: | |
| STRINGA: Token di Progetto Limitato Regionalmente | |
| Argomenti: | |
| k5token (TYPE): token regionale valido | |
| projectid (TYPE): id del progetto a cui limitare | |
| region (TYPE): regione 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 'Fallimento della Rilimitazione del Progetto Regionale' |
visualizza raw
ReScope_K5_Token.py
ospitato con ❤ da GitHub
- Utilizza la chiamata API Neutron avanzata di Fujitsu K5, non disponibile in OpenStack upstream, per creare la connessione inter-progetto. Questa chiamata API permette all'amministratore del progetto di aggiungere un'interfaccia da una subnet in un progetto diverso al router nel progetto dell'amministratore.
Questo file contiene caratteri Unicode nascosti o bidirezionali che potrebbero essere interpretati o compilati in modo diverso da quanto appare qui sotto. Per rivederli, apri il file in un editor che riveli i caratteri Unicode nascosti.
Maggiori informazioni sui caratteri Unicode bidirezionali
| 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 ("\nErrore imprevisto:", sys.exc_info()) |
visualizza raw
AddInterPojectRoute.py
ospitato con ❤ da GitHub
- Rilimita il token K5 al Progetto B (la chiamata API per la rilimitazione del token è dettagliata in precedenza nel post)
- Aggiungi le rotte di ritorno statiche per le reti nel Progetto A al router nel Progetto B (Nota: se il tuo design non prevede un router nel Progetto B, puoi aggiungere queste rotte alle subnet nel Progetto B e riavviare i server per ricevere le nuove informazioni di routing)
- Rotte nel formato [{“destination”: CIDR-1, “nexthop”: interProject-Port-IP},{“destination”: CIDR-2, “nexthop”: interProject-Port-IP} ]
Aggiornamento Router
Questo file contiene caratteri Unicode nascosti o bidirezionali che potrebbero essere interpretati o compilati in modo diverso da quanto appare qui sotto. Per rivederli, apri il file in un editor che riveli i caratteri Unicode nascosti.
Maggiori informazioni sui caratteri Unicode bidirezionali
| def update_router_routes(k5token, routerid, routes, region): | |
| # es. 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 ("\nErrore imprevisto:", sys.exc_info()) |
visualizza raw
K5-Update-Router-Routes.py
ospitato con ❤ da GitHub
Aggiornamento Subnet Alternativo
Questo file contiene caratteri Unicode nascosti o bidirezionali che potrebbero essere interpretati o compilati in modo diverso da quanto appare qui sotto. Per rivederli, apri il file in un editor che riveli i caratteri Unicode nascosti.
Maggiori informazioni sui caratteri Unicode bidirezionali
| def add_static_route_to_subnet(k5token, subnetid, routes, region): | |
| # es. 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 ("\nErrore imprevisto:", sys.exc_info()) |
visualizza raw
K5-Subnet-Route-Update.py
ospitato con ❤ da GitHub
E questo è tutto! Dovresti ora essere in grado di effettuare il routing tra i tuoi progetti.
Allora, dov'è l'automazione, mi sentirete pensare…
Beh, ho assemblato rapidamente i seguenti due script Python per una demo cliente. Il codice Python non è per nulla efficiente (a.k.a. DRY) ma è adatto allo scopo di questo tutorial:
Repo : https://github.com/allthingsclowd/K5-InterProject-Demo
K5-InterProject-Demo
Distribuzione Automatizzata di API per Servizi Condivisi su Fujitsu K5
Target – Piattaforma Cloud IaaS Fujitsu K5
Autore: Graham Land
Data: 18/1/17
Twitter: @allthingsclowd
Github: https://github.com/allthingscloud
Blog: https://allthingscloud.eu
Lo script Python in questo repository può essere utilizzato per creare il modello di servizi condivisi qui sotto in modo auto-magico 🙂
Passaggi:
- Copia tutti questi file nella stessa directory
- Modifica k5contractsettingsv10.py per includere i dettagli del tuo contratto K5
Attenzione: Assicurati di utilizzare due progetti 'usa e getta' all'interno del tuo contratto e aggiungi i loro nomi e ID al file sopra.
Ogni risorsa in questi progetti verrà eliminata, quindi assicurati di non condividerla con altri utenti. - Esegui lo script build_multi_project_demo.py e rilassati! Tutte le chiavi SSH, gli IP pubblici, ecc. vengono restituiti alla console.
- Quando hai finito di giocare con il routing, puoi utilizzare purge_project.py per resettare tutto.
Happy Stacking!
visualizza raw
MultiProjectAPIDemo.md
ospitato con ❤ da GitHub
Happy Stacking!
withk5youcan
Originally published on allthingscloud.eu (2017-01-18).
