En pocas palabras
Extiende Kubernetes con APIs y controladores para gestionar recursos mediante reconciliación.
Qué problema resuelve
Provisión repetitiva de recursos externos que los equipos necesitan solicitar como autoservicio.
Cuándo utilizarlo
Plataformas sobre Kubernetes. Ejemplo: ofrecer una API interna para crear bases de datos.
De la idea a la práctica
Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.
En el Radar compartido: Trial (valoración de la edición aportada).
Cómo funciona
Los providers gestionan recursos y las composiciones permiten presentar abstracciones propias. El controlador compara continuamente estado declarado y observado.
Ejemplo de uso
Exponer un recurso BaseDeDatosEquipo que define tamaño, backups y acceso aprobados. La composición crea recursos compatibles y publica la información de conexión por un mecanismo seguro.
Piezas
| Pieza | Función |
|---|---|
| Provider | Controladores para una API externa (GCP, AWS, Azure, GitHub, Helm…) |
| Managed resource | Recurso individual del proveedor como objeto de Kubernetes (un bucket, una instancia SQL) |
| CompositeResourceDefinition (XRD) | Define la API propia de la plataforma: campos que el equipo puede rellenar |
| Composition | Cómo se traduce esa API en recursos gestionados |
| Composition functions | Pasos de un pipeline que generan los recursos (patch & transform, plantillas Go, KCL, Python) |
La API que ve un equipo de producto
apiVersion: plataforma.krediya.io/v1alpha1
kind: BaseDeDatos
metadata:
name: originacion
namespace: equipo-originacion
spec:
motor: postgres
tamano: pequena # la plataforma traduce a tipo de máquina y disco
backups: diarios
entorno: produccion
El equipo no ve tipos de máquina, redes privadas ni políticas de cifrado: esas decisiones viven en la Composition, mantenida por el equipo de plataforma.
Composition con pipeline de funciones
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: basededatos-gcp
spec:
compositeTypeRef:
apiVersion: plataforma.krediya.io/v1alpha1
kind: BaseDeDatos
mode: Pipeline
pipeline:
- step: recursos
functionRef:
name: function-patch-and-transform
input:
apiVersion: pt.fn.crossplane.io/v1beta1
kind: Resources
resources:
- name: instancia
base: {} # recurso gestionado de Cloud SQL del provider de GCP
patches:
- type: FromCompositeFieldPath
fromFieldPath: spec.tamano
toFieldPath: spec.forProvider.settings[0].tier
transforms:
- type: map
map:
{ pequena: db-custom-2-7680, mediana: db-custom-4-15360 }
Las versiones de API de los recursos gestionados dependen del provider instalado; consulta su documentación.
Crossplane frente a Terraform
| Aspecto | Terraform/OpenTofu | Crossplane |
|---|---|---|
| Modelo | Plan y apply bajo demanda | Reconciliación continua |
| Drift | Se detecta al ejecutar plan |
Se corrige automáticamente |
| Interfaz | CLI y CI | API de Kubernetes (kubectl, GitOps) |
| Abstracciones | Módulos | APIs propias con validación y RBAC |
| Requisito | Ninguno especial | Un clúster de Kubernetes para el plano de control |
Crossplane encaja cuando la organización ya opera Kubernetes y quiere ofrecer infraestructura como API de autoservicio dentro de una plataforma interna. Combinado con Argo CD o Flux, el repositorio Git se convierte en la fuente de verdad.
Operación
- Separa el clúster de control de los clústeres de aplicaciones.
- Define
deletionPolicy: Orphanen recursos con datos para que borrar el objeto no borre la base de datos. - Usa credenciales de proveedor mediante identidad de carga de trabajo, no claves en secretos.
- Monitoriza las condiciones
SyncedyReadyde cada recurso.
Criterios de implementación
Definir políticas de eliminación, secretos y recuperación. Coordinar límites con Terraform u otras herramientas para evitar gestionar el mismo recurso desde dos sistemas.
Continúa en las fuentes
Documentación oficial para verificar detalles y explorar más.