K5 Inter-Projekt-Routing – Vollautomatisierte Bereitstellung einer Shared-Services-API 

2017-01-18

K5 Inter-Projekt-Routing – Vollautomatisierte Bereitstellung einer Shared-Services-API 

Machine-translated — the English original is authoritative.

In früheren Beiträgen habe ich eine K5-spezifische Netzwerkfunktion erwähnt, die als Inter-Projekt-Routing bezeichnet wird. Da K5 eine öffentliche, auf OpenStack basierende Cloud ist und keine traditionelle private OpenStack-Cloud, haben Vertragsbesitzer (auch bekannt als OpenStack-Domain-Administratoren) aus Designgründen keine Berechtigung, gemeinsame Netzwerke zu erstellen. Viele Vertragsbesitzer stellen jedoch häufig fest, dass sie Ressourcen zwischen Projekten teilen müssen, und genau hier kommt das K5 Inter-Projekt-Routing ins Spiel. Nehmen wir die früheren Blogbeiträge über Shared Services – all dies ist dank dieser Funktion möglich.

Hinweis: Wir sprechen hier über das Routing zwischen Projekt-Subnetzen innerhalb derselben Verfügbarkeitszone und desselben Vertrags. Cross-Verfügbarkeitszonen-Verbindungen sind ebenfalls möglich und wurden in früheren Beiträgen diskutiert.

InterProjectBlog.PNG

Damit die virtuellen Maschinen (VMs) in den Subnetzen in Projekt A oben die VMs in BEIDEN Subnetzen in Projekt B erreichen können, ist es notwendig, eine Inter-Projekt-Verbindung zu JEDEM der Subnetze in Projekt B zu erstellen. Das bedeutet für das obige Szenario zwei Inter-Projekt-Verbindungen!

Pro Subnetz erforderliche Schritte

Diese Datei enthält versteckte oder bidirektionale Unicode-Zeichen, die anders interpretiert oder kompiliert werden könnten als das, was unten angezeigt wird. Um sie zu überprüfen, öffnen Sie die Datei in einem Editor, der versteckte Unicode-Zeichen anzeigt.
Mehr über bidirektionale Unicode-Zeichen erfahren

Versteckte Zeichen anzeigen

def get_scoped_token(adminUser, adminPassword, contract, projectid, region):
"""Zusammenfassung – Einen regionalen, projektbeschränkten Token mit Benutzername und Passwort abrufen
Gibt zurück:
Objekt: Regional beschränktes Projekt-Token-Objekt
Argumente:
adminUser (TYPE): Benutzername
adminPassword (TYPE): Passwort
contract (TYPE): Vertragsname
projectid (TYPE): Projekt-ID
region (TYPE): Region
"""
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 'Fehler beim regionalen Projekt-Token-Scoping'

Raw anzeigen
Get_Scoped_Token.py
Gehostet mit ❤ von GitHub

Diese Datei enthält versteckte oder bidirektionale Unicode-Zeichen, die anders interpretiert oder kompiliert werden könnten als das, was unten angezeigt wird. Um sie zu überprüfen, öffnen Sie die Datei in einem Editor, der versteckte Unicode-Zeichen anzeigt.
Mehr über bidirektionale Unicode-Zeichen erfahren

Versteckte Zeichen anzeigen

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 ("\nUnerwarteter Fehler:", sys.exc_info())

Raw anzeigen
CreatePortonK5Subnet.py
Gehostet mit ❤ von GitHub

Diese Datei enthält versteckte oder bidirektionale Unicode-Zeichen, die anders interpretiert oder kompiliert werden könnten als das, was unten angezeigt wird. Um sie zu überprüfen, öffnen Sie die Datei in einem Editor, der versteckte Unicode-Zeichen anzeigt.
Mehr über bidirektionale Unicode-Zeichen erfahren

Versteckte Zeichen anzeigen

def get_rescoped_token(k5token, projectid, region):
"""Einen regionalen Projekt-Token abrufen – neu beschränkt
Gibt zurück:
STRING: Regional beschränkter Projekt-Token
Argumente:
k5token (TYPE): gültiger regionaler Token
projectid (TYPE): Projekt-ID, auf die beschränkt werden soll
region (TYPE): K5-Region
"""
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 'Fehler beim regionalen Projekt-Rescoping'

Raw anzeigen
ReScope_K5_Token.py
Gehostet mit ❤ von GitHub

Diese Datei enthält versteckte oder bidirektionale Unicode-Zeichen, die anders interpretiert oder kompiliert werden könnten als das, was unten angezeigt wird. Um sie zu überprüfen, öffnen Sie die Datei in einem Editor, der versteckte Unicode-Zeichen anzeigt.
Mehr über bidirektionale Unicode-Zeichen erfahren

Versteckte Zeichen anzeigen

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 ("\nUnerwarteter Fehler:", sys.exc_info())

Raw anzeigen
AddInterPojectRoute.py
Gehostet mit ❤ von GitHub

Router-Aktualisierung

Diese Datei enthält versteckte oder bidirektionale Unicode-Zeichen, die anders interpretiert oder kompiliert werden könnten als das, was unten angezeigt wird. Um sie zu überprüfen, öffnen Sie die Datei in einem Editor, der versteckte Unicode-Zeichen anzeigt.
Mehr über bidirektionale Unicode-Zeichen erfahren

Versteckte Zeichen anzeigen

def update_router_routes(k5token, routerid, routes, region):
# z.B. 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 ("\nUnerwarteter Fehler:", sys.exc_info())

Raw anzeigen
K5-Update-Router-Routes.py
Gehostet mit ❤ von GitHub

Alternative Subnetz-Aktualisierung

Diese Datei enthält versteckte oder bidirektionale Unicode-Zeichen, die anders interpretiert oder kompiliert werden könnten als das, was unten angezeigt wird. Um sie zu überprüfen, öffnen Sie die Datei in einem Editor, der versteckte Unicode-Zeichen anzeigt.
Mehr über bidirektionale Unicode-Zeichen erfahren

Versteckte Zeichen anzeigen

def add_static_route_to_subnet(k5token, subnetid, routes, region):
# z.B. 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 ("\nUnerwarteter Fehler:", sys.exc_info())

Raw anzeigen
K5-Subnet-Route-Update.py
Gehostet mit ❤ von GitHub

Und das war’s! Sie sollten nun zwischen Ihren Projekten routen können.

Wo ist also die Automatisierung, werden Sie sich jetzt fragen…

Nun, ich habe für eine Kunden-Demo schnell die folgenden zwei Python-Skripte „zusammengehackt“. Der Python-Code ist keineswegs effizient (a.k.a. DRY), aber er erfüllt den Zweck dieses Tutorials:

Repo : https://github.com/allthingsclowd/K5-InterProject-Demo

K5-InterProject-Demo

Vollautomatisierte Bereitstellung einer Shared-Services-API auf Fujitsu K5

Ziel – Fujitsu K5 IaaS-Cloud-Plattform

Autor: Graham Land
Datum: 18.1.17
Twitter: @allthingsclowd
Github: https://github.com/allthingscloud
Blog: https://allthingscloud.eu

Die Python-Skripte in diesem Repository können verwendet werden, um das folgende Shared-Services-Modell auto-magisch zu erstellen 🙂

image

Schritte:

  1. Kopieren Sie alle diese Dateien in dasselbe Verzeichnis
  2. Bearbeiten Sie die k5contractsettingsv10.py, um Ihre K5-Vertragsdetails einzufügen
    Warnung: Stellen Sie sicher, dass Sie zwei „einweg“-Projekte innerhalb Ihres Vertrags verwenden und deren Namen und IDs in die obige Datei einfügen.
    Alle Ressourcen in diesen Projekten werden gelöscht, also stellen Sie sicher, dass Sie diese nicht mit anderen Benutzern teilen.
  3. Starten Sie das build_multi_project_demo.py-Skript und entspannen Sie sich! Alle SSH-Schlüssel, öffentlichen IPs usw. werden an die Konsole zurückgegeben.
  4. Wenn Sie mit dem Routing fertig gespielt haben, können Sie purge_project.py verwenden, um alles zurückzusetzen.

Happy Stacking!

Raw anzeigen
MultiProjectAPIDemo.md
Gehostet mit ❤ von GitHub

Happy Stacking!

withk5youcan

Originally published on allthingscloud.eu (2017-01-18).

← All posts