Alejandría

Busca en Alejandría

Lenguajes y marcos

Crossplane

Extiende Kubernetes con APIs y controladores para gestionar recursos mediante reconciliación.

01

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.

02

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: Orphan en 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 Synced y Ready de 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.