K5 Enrutamiento Inter-Proyecto – Despliegue de API de Servicios Compartidos Totalmente Automatizado

2017-01-18

K5 Enrutamiento Inter-Proyecto – Despliegue de API de Servicios Compartidos Totalmente Automatizado

Machine-translated — the English original is authoritative.

En publicaciones anteriores he mencionado una característica de red específica de K5 llamada enrutamiento inter-proyecto. Dado que K5 es una nube pública basada en OpenStack en lugar de una nube privada tradicional de OpenStack, los Propietarios de Contratos (también conocidos como administradores de dominios de OpenStack) no tienen permiso para crear redes compartidas por diseño. Sin embargo, muchos propietarios de contratos a menudo encuentran la necesidad de compartir recursos entre proyectos y es aquí donde entra en juego el Enrutamiento Inter-Proyecto de K5. Tomemos las publicaciones anteriores sobre Servicios Compartidos: todo esto es posible gracias a esta característica.

Nota: Estamos hablando de enrutamiento entre subredes de proyectos dentro de la misma zona de disponibilidad y contrato; los enlaces entre zonas de disponibilidad también son posibles y se han discutido en publicaciones anteriores.

InterProjectBlog.PNG

Para que las máquinas virtuales (VM) en las subredes del Proyecto A anterior puedan alcanzar las VM en AMBAS las subredes del Proyecto B, es necesario crear un enlace Inter-Proyecto para CADA una de las subredes del Proyecto B. ¡Eso son dos enlaces inter-proyecto para el escenario anterior!

Pasos requeridos por Subred

Este archivo contiene texto Unicode oculto o bidireccional que puede interpretarse o compilarse de manera diferente a lo que aparece a continuación. Para revisarlo, abra el archivo en un editor que revele caracteres Unicode ocultos.
Más información sobre caracteres Unicode bidireccionales

Mostrar caracteres ocultos

def get_scoped_token(adminUser, adminPassword, contract, projectid, region):
"""Resumen – Obtener un token de proyecto regional vinculado usando un nombre de usuario y contraseña
Devuelve:
Objeto: Objeto de Token de Proyecto Vinculado Regionalmente
Args:
adminUser (TYPE): nombre de usuario
adminPassword (TYPE): contraseña
contract (TYPE): nombre del contrato
projectid (TYPE): id del proyecto
region (TYPE): región
"""
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 'Fallo al vincular Token de Proyecto Regional'

ver raw
Get_Scoped_Token.py
alojado con ❤ por GitHub

Este archivo contiene texto Unicode oculto o bidireccional que puede interpretarse o compilarse de manera diferente a lo que aparece a continuación. Para revisarlo, abra el archivo en un editor que revele caracteres Unicode ocultos.
Más información sobre caracteres Unicode bidireccionales

Mostrar caracteres ocultos

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

ver raw
CreatePortonK5Subnet.py
alojado con ❤ por GitHub

Este archivo contiene texto Unicode oculto o bidireccional que puede interpretarse o compilarse de manera diferente a lo que aparece a continuación. Para revisarlo, abra el archivo en un editor que revele caracteres Unicode ocultos.
Más información sobre caracteres Unicode bidireccionales

Mostrar caracteres ocultos

def get_rescoped_token(k5token, projectid, region):
"""Obtener un token de proyecto regional – rescoped
Devuelve:
STRING: Token de Proyecto Vinculado Regionalmente
Args:
k5token (TYPE): token regional válido
projectid (TYPE): id del proyecto al que vincular
region (TYPE): región 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 'Fallo al rescoped de Proyecto Regional'

ver raw
ReScope_K5_Token.py
alojado con ❤ por GitHub

Este archivo contiene texto Unicode oculto o bidireccional que puede interpretarse o compilarse de manera diferente a lo que aparece a continuación. Para revisarlo, abra el archivo en un editor que revele caracteres Unicode ocultos.
Más información sobre caracteres Unicode bidireccionales

Mostrar caracteres ocultos

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

ver raw
AddInterPojectRoute.py
alojado con ❤ por GitHub

Actualización del Router

Este archivo contiene texto Unicode oculto o bidireccional que puede interpretarse o compilarse de manera diferente a lo que aparece a continuación. Para revisarlo, abra el archivo en un editor que revele caracteres Unicode ocultos.
Más información sobre caracteres Unicode bidireccionales

Mostrar caracteres ocultos

def update_router_routes(k5token, routerid, routes, region):
# ej. 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 ("\nError inesperado:", sys.exc_info())

ver raw
K5-Update-Router-Routes.py
alojado con ❤ por GitHub

Actualización Alternativa de Subred

Este archivo contiene texto Unicode oculto o bidireccional que puede interpretarse o compilarse de manera diferente a lo que aparece a continuación. Para revisarlo, abra el archivo en un editor que revele caracteres Unicode ocultos.
Más información sobre caracteres Unicode bidireccionales

Mostrar caracteres ocultos

def add_static_route_to_subnet(k5token, subnetid, routes, region):
# ej. 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 ("\nError inesperado:", sys.exc_info())

ver raw
K5-Subnet-Route-Update.py
alojado con ❤ por GitHub

¡Y eso es todo! Ahora deberías poder enrutar entre tus proyectos.

Entonces, ¿dónde está la automatización, pensarás...

Bueno, rápidamente 'hackeé' los siguientes dos scripts de python para una demostración de cliente. El código python no es en absoluto eficiente (también conocido como DRY), pero es adecuado para el propósito de este tutorial:

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

K5-InterProject-Demo

Despliegue de API de Servicios Compartidos Totalmente Automatizado en Fujitsu K5

Objetivo – Plataforma de Nube IaaS Fujitsu K5

Autor: Graham Land
Fecha: 18/1/17
Twitter: @allthingsclowd
Github: https://github.com/allthingscloud
Blog: https://allthingscloud.eu

Los scripts de python en este repositorio se pueden utilizar para crear el modelo de servicios compartidos a continuación auto-mágicamente 🙂

image

Pasos:

  1. Copie todos estos archivos al mismo directorio
  2. Edite k5contractsettingsv10.py para incluir los detalles de su contrato K5
    Advertencia: Asegúrese de usar dos proyectos 'desechables' dentro de su contrato y agregue sus nombres e ids al archivo anterior.
    Todos los recursos en estos proyectos se purgarán, así que asegúrese de no compartirlos con otros usuarios.
  3. Lance el script build_multi_project_demo.py y relájese! Todas las claves SSH, ips públicas, etc. se devuelven a la consola.
  4. Cuando haya terminado de jugar con el enrutamiento, puede usar purge_project.py para restablecer todo.

¡Feliz Apilamiento!

ver raw
MultiProjectAPIDemo.md
alojado con ❤ por GitHub

¡Feliz Apilamiento!

withk5youcan

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

← All posts