K5 Routing Inter-Progetto – Distribuzione Automatizzata di API per Servizi Condivisi

2017-01-18

K5 Routing Inter-Progetto – Distribuzione Automatizzata di API per Servizi Condivisi

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.

InterProjectBlog.PNG

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

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

Mostra caratteri nascosti

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

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

Mostra caratteri nascosti

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

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

Mostra caratteri nascosti

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

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

Mostra caratteri nascosti

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

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

Mostra caratteri nascosti

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

Mostra caratteri nascosti

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 🙂

image

Passaggi:

  1. Copia tutti questi file nella stessa directory
  2. 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.
  3. Esegui lo script build_multi_project_demo.py e rilassati! Tutte le chiavi SSH, gli IP pubblici, ecc. vengono restituiti alla console.
  4. 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).

← All posts