1. Crear Proyecto
- El primer paso es crear un proyecto
- Completamos el formulario
- PENDIENTE:
- Se ejecuta permisos para correr como root, desde el provisioner
oc adm policy add-scc-to-user anyuid -z default -n tavo-prueba-microservicios
2. Crear ConfigMaps: productos.json
- Ahora en la maquina local creamos un archivo productos.json
- y le agregamos
[
{
"id": 1,
"nombre": "Martillo",
"precio": 8.50,
"categoria": "Herramientas"
},
{
"id": 2,
"nombre": "Taladro",
"precio": 55.00,
"categoria": "Eléctricas"
},
{
"id": 3,
"nombre": "Destornillador",
"precio": 3.25,
"categoria": "Herramientas"
}
]
productos.json
productos.json
3. Crear ConfigMaps: proveedores.json
- Ahora en la maquina local creamos un archivo proveedores.json
- y le agregamos
[
{
"id": 1,
"nombre": "Ferretería Central",
"pais": "Costa Rica"
},
{
"id": 2,
"nombre": "Herramientas Global",
"pais": "México"
}
]
proveedores-json
proveedores.json
- Valor: navegar y cargamos el archivo
4. Crear Implementación/deploy: api-productos
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-productos
namespace: tavo-prueba-microservicios
spec:
replicas: 2
selector:
matchLabels:
app: api-productos
template:
metadata:
labels:
app: api-productos
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
volumeMounts:
- name: productos-json
mountPath: /usr/share/nginx/html/productos.json
subPath: productos.json
volumes:
- name: productos-json
configMap:
name: productos-json
- Si regresamos a Cargas de Trabajo -> Implementaciones
- Vemos que tenemos la implementación funcionando y que tiene un selector de pods el cual utilizamos para crear el servicio
app=api-productos
- Ahora para probar si esta funcionado vamos a Cargas de Trabajo -> Pods y abrimos uno
- Vamos al tab de «Terminal» y ejecutamos
curl http://localhost/productos.json
- Nos debe regresar el valor
5. Crear Servicio: producto
apiVersion: v1
kind: Service
metadata:
name: api-productos
namespace: tavo-prueba-microservicios
spec:
selector:
app: api-productos
ports:
- port: 80
targetPort: 80
6. Crear la ruta: productos
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: productos
namespace: tavo-prueba-microservicios
spec:
host: productos.apps.okd.una.ac.cr
to:
kind: Service
name: api-productos
port:
targetPort: 80
tls:
termination: edge
7. Crear Implementación/deploy: api-proveedores
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-proveedores
namespace: tavo-prueba-microservicios
spec:
replicas: 2
selector:
matchLabels:
app: api-proveedores
template:
metadata:
labels:
app: api-proveedores
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
volumeMounts:
- name: proveedores-json
mountPath: /usr/share/nginx/html/proveedores.json
subPath: proveedores.json
volumes:
- name: proveedores-json
configMap:
name: proveedores-json
- Si regresamos a Cargas de Trabajo -> Implementaciones
- Vemos que tenemos la implementación funcionando y que tiene un selector de pods el cual utilizamos para crear el servicio
app=api-proveedores
- Ahora para probar si esta funcionado vamos a Cargas de Trabajo -> Pods y abrimos uno
- Vamos al tab de «Terminal» y ejecutamos
curl http://localhost/proveedores.json
- Nos debe regresar el valor
8. Crear Servicio: provedores
apiVersion: v1
kind: Service
metadata:
name: api-proveedores
namespace: tavo-prueba-microservicios
spec:
selector:
app: api-proveedores
ports:
- port: 80
targetPort: 80
9. Crear la ruta: productos
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: proveedores
namespace: tavo-prueba-microservicios
spec:
host: proveedores.apps.okd.una.ac.cr
to:
kind: Service
name: api-proveedores
port:
targetPort: 80
tls:
termination: edge
- Esto indica que llega en 443 hasta el router
tls:
termination: edge
10. Crea ConfigMap index.html que consume los servicios
apiVersion: v1
kind: ConfigMap
metadata:
name: frontend-html
namespace: tavo-prueba-microservicios
data:
index.html: |
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Ferretería - Microservicios</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 40px;
}
h2 {
margin-top: 40px;
}
table {
border-collapse: collapse;
width: 60%;
}
th, td {
border: 1px solid #ccc;
padding: 8px;
}
th {
background: #f4f4f4;
}
</style>
</head>
<body>
<h1>Ferretería - Demo Microservicios</h1>
<h2>Productos</h2>
<table id="productos">
<thead>
<tr>
<th>ID</th>
<th>Nombre</th>
<th>Precio</th>
<th>Categoría</th>
</tr>
</thead>
<tbody></tbody>
</table>
<h2>Proveedores</h2>
<table id="proveedores">
<thead>
<tr>
<th>ID</th>
<th>Nombre</th>
<th>País</th>
</tr>
</thead>
<tbody></tbody>
</table>
<script>
async function cargarProductos() {
const res = await fetch("https://productos.apps.okd.una.ac.cr/productos.json");
const data = await res.json();
const tbody = document.querySelector("#productos tbody");
data.forEach(p => {
tbody.innerHTML += `
<tr>
<td>${p.id}</td>
<td>${p.nombre}</td>
<td>${p.precio}</td>
<td>${p.categoria}</td>
</tr>`;
});
}
async function cargarProveedores() {
const res = await fetch("https://proveedores.apps.okd.una.ac.cr/proveedores.json");
const data = await res.json();
const tbody = document.querySelector("#proveedores tbody");
data.forEach(p => {
tbody.innerHTML += `
<tr>
<td>${p.id}</td>
<td>${p.nombre}</td>
<td>${p.pais}</td>
</tr>`;
});
}
cargarProductos();
cargarProveedores();
</script>
</body>
</html>
11.Crear implementacion de frontend
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
namespace: tavo-prueba-microservicios
spec:
replicas: 2
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
volumeMounts:
- name: frontend-html
mountPath: /usr/share/nginx/html/index.html
subPath: index.html
volumes:
- name: frontend-html
configMap:
name: frontend-html
- Verificar si esta corriendo
12. Crear servicio frontend
apiVersion: v1
kind: Service
metadata:
name: frontend
namespace: tavo-prueba-microservicios
spec:
selector:
app: frontend
ports:
- port: 80
targetPort: 80
13. Obtener los certificados UNA
- Ejecutamos en la maquina local rban1.3
cd /home/tavo/Escritorio/
mkdir certificados
cd certificados/
scp -r root@10.0.2.30:/etc/letsencrypt/live/CERTIFICADOWILDCOMODO/2025/STAR_una_ac_cr.crt .
scp -r root@10.0.2.30:/etc/letsencrypt/live/CERTIFICADOWILDCOMODO/2025/una.ac.cr.key .
scp -r root@10.0.2.30:/etc/letsencrypt/live/CERTIFICADOWILDCOMODO/2025/My_CA_Bundle.ca-bundle .
- Creamos un full que contenga STAR y Bundle
cat STAR_una_ac_cr.crt My_CA_Bundle.ca-bundle > fullcert.crt
14. Crear ruta
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: frontend
namespace: tavo-prueba-microservicios
spec:
host: frontend.una.ac.cr
to:
kind: Service
name: frontend
port:
targetPort: 80
tls:
termination: edge
15. Certificado
- NOTA: Estamos en el puerto 80 (es lo que tiene configurado el servicio)
- Marcamos la opción de Ruta Segura
- Terminación TLS: Edge
- Trafico inseguro: redirigir
- Certificado: el full que acabamos de crear
- Lo abrimos o pegamos el contenido
- Clave privada: una.ac.cr.key
- Y ya sirve el certificado
- Sin embargo hay errores en la carga de los servicios
- modificamos la ruta de frontend
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: frontend
namespace: tavo-prueba-microservicios
spec:
host: frontend.una.ac.cr
path: /
to:
kind: Service
name: frontend
port:
targetPort: 80
tls:
termination: edge
- crear ruta que ve el servico de productos
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: productos-api
namespace: tavo-prueba-microservicios
spec:
host: frontend.una.ac.cr
path: /productos.json
to:
kind: Service
name: api-productos
port:
targetPort: 80
tls:
termination: edge
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: proveedores-api
namespace: tavo-prueba-microservicios
spec:
host: frontend.una.ac.cr
path: /proveedores.json
to:
kind: Service
name: api-proveedores
port:
targetPort: 80
tls:
termination: edge
- modificar ConfigMap frontend-html
- Modificamos las rutas
fetch("https://productos.apps.okd.una.ac.cr/productos.json");
fetch("https://proveedores.apps.okd.una.ac.cr/proveedores.json");
fetch("/productos.json");
fetch("/proveedores.json");
- Reiniciamos la implementación