Crear una IDP con Crossplane: Plataforma de desarrollo interna

Crear una IDP con Crossplane: Plataforma de desarrollo interna

En el actual panorama de la nube nativa, la fricción entre la estabilidad operativa y la velocidad del desarrollo sigue siendo un cuello de botella crucial. A medida que las organizaciones crecen, los sistemas tradicionales de gestión de tickets, utilizados para aprovisionar la infraestructura, se vuelven insostenibles. La solución reside en la ingeniería de plataformas: crear una Plataforma de desarrollo interna (IDP) que permita la autoservicio sin comprometer la gobernanza ni la seguridad.

Mientras herramientas como Terraform,<s3><s4>han dominado la Infraestructura como Código (IaC), a menudo dependen del estado del cliente y de las pipelines de CI/CD imperativas. Este artículo explora un enfoque centrado en el plano de control utilizando Crossplane, un marco de trabajo de código abierto que amplíaCrossplane<s6>, un framework de código abierto que extiende<s6><s5>Kubernetes<s5><s6> para gestionar la infraestructura. Al utilizar Crossplane, podemos crear un IDP que trata la infraestructura como datos, aplicando la reconciliación continua y la detección de desviaciones.para gestionar la infraestructura. Al aprovechar Crossplane, podemos crear un IDP que trate la infraestructura como datos, aplicando la conciliación continua y la detección de desviaciones.

Para las organizaciones que buscan acelerar esta transición, asociarse con expertos en servicios de ingeniería en la nube y equipos remotos puede reducir significativamente la carga arquitectónica necesaria para implementar estos sistemas de control de manera efectiva.servicios de ingeniería en la nube, equipos remotospuede reducir significativamente la sobrecarga arquitectónica necesaria para implementar eficazmente estas funciones de control.

Servicios de Ingeniería de Productos

Trabaje con nuestros gestores de proyectos, ingenieros de software y probadores de calidad, para desarrollar su nuevo producto de software personalizado o para apoyar su flujo de trabajo actual, siguiendo metodologías Agile, DevOps y Lean.

Build with 4Geeks

¿Por qué elegir Crossplane para su IDP?

Las herramientas estándar de IaC a menudo son de "configurar y olvidar." Una vez que se ejecuta la configuración, el estado de la infraestructura en vivo puede desviarse del código de configuración sin una detección inmediata. Crossplane cambia fundamentalmente este paradigma al utilizar el patrón de "Operador de Kubernetes".Kubernetes Operator pattern.

  1. Reconciliación Continua: Al igual que Kubernetes asegura que un Pod esté en funcionamiento, Crossplane supervisa activamente los recursos externos (como AWS RDS o Google Cloud SQL) y garantiza que coincidan con el estado deseado definido en tu clúster.
  2. Abstracción Basada en API: Crossplane permite a los Ingenieros de Plataforma definirDefiniciones de Recursos Composit (XRDs). Estas exponen APIs de alto nivel y simplificadas a los desarrolladores (por ejemplo,PostgresDB), mientras ocultan los detalles complejos de la infraestructura (por ejemplo, el peering de VPC, los grupos de subred, los grupos de parámetros) detrás de escena enComposiciones.
  3. Control Centralizado: Gestionas las cargas de trabajo y la infraestructura utilizando la misma API y herramientas de Kubernetes (kubectl,Helm,ArgoCD).

Arquitectura: El Modelo de Composición

Para crear un IDP, debemos distinguir entre dos roles:

  • Ingenieros de Plataforma: Definan las XRDs y las Composiciones (las "Clases").
  • Desarrolladores de Aplicaciones: Creen las Reclamaciones (las "Instancias").

Implementaremos un escenario en el que un desarrollador necesita una base de datos PostgreSQL. En lugar de escribir 500 líneas de código Terraform, aplicará un manifiesto de Kubernetes simple.

Paso 1: Instalación de Crossplane

Primero, instale Crossplane en su clúster de Kubernetes de gestión utilizando Helm.

helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update

helm install crossplane \
  crossplane-stable/crossplane \
  --namespace crossplane-system \
  --create-namespace

Paso 2: Configurar el Proveedor

Necesitamos un Proveedor para comunicarse con el proveedor de la nube. Utilizaremos AWSAWS

Nota: Asegúrese de crear un secreto de Kubernetes que contenga sus credenciales de AWS (aws-creds) antes de aplicar la configuración del Proveedor.

apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
  name: provider-aws-s3
spec:
  package: xpkg.upbound.io/crossplane-contrib/provider-aws:v0.47.0
---
apiVersion: aws.crossplane.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: aws-creds
      key: creds

Paso 3: Definición de la API (XRD)

LaDefinición de Recurso Combinado (XRD) define el esquema de la API que ofrece a los desarrolladores. Aquí, definimos un tipo de recursoXPostgresInstance.

apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
  name: xpostgresinstances.database.example.org
spec:
  group: database.example.org
  names:
    kind: XPostgresInstance
    plural: xpostgresinstances
  claimNames:
    kind: PostgresInstance
    plural: postgresinstances
  versions:
  - name: v1alpha1
    served: true
    referenceable: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              parameters:
                type: object
                properties:
                  storageGB:
                    type: integer
                  nodeSize:
                    type: string
                    enum: [ "small", "medium", "large" ]
            required:
            - parameters

Paso 4: Crear la composición

La Composición mapea las entradas de alto nivel del XRD (como pequeñas o grandes) a recursos específicos en la nube. Aquí es donde se garantiza el cumplimiento (por ejemplo, asegurándose de que el cifrado esté siempre activo).

apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: postgres-aws-composition
  labels:
    provider: aws
    type: backend-db
spec:
  compositeTypeRef:
    apiVersion: database.example.org/v1alpha1
    kind: XPostgresInstance
  resources:
  - name: rds-instance
    base:
      apiVersion: database.aws.crossplane.io/v1beta1
      kind: RDSInstance
      spec:
        forProvider:
          region: us-east-1
          dbInstanceClass: db.t3.micro
          masterUsername: masteruser
          engine: postgres
          engineVersion: "13.4"
          skipFinalSnapshot: true
          publiclyAccessible: false
          storageEncrypted: true # Enforcing security policy
        writeConnectionSecretToRef:
          namespace: crossplane-system
    patches:
    - fromFieldPath: "spec.parameters.storageGB"
      toFieldPath: "spec.forProvider.allocatedStorage"
    - fromFieldPath: "spec.parameters.nodeSize"
      toFieldPath: "spec.forProvider.dbInstanceClass"
      transforms:
      - type: map
        map:
          small: "db.t3.micro"
          medium: "db.t3.medium"
          large: "db.m5.large"

Paso 5: La experiencia para desarrolladores (La afirmación)

Una vez que el equipo de Ingeniería de Plataforma aplica el XRD y la Composición, los desarrolladores pueden provisionar una base de datos a través de un Claim. Este manifiesto es lo que se almacena en el repositorio de la aplicación.

apiVersion: database.example.org/v1alpha1
kind: PostgresInstance
metadata:
  name: my-service-db
  namespace: app-team-a
spec:
  parameters:
    storageGB: 20
    nodeSize: small
  compositionSelector:
    matchLabels:
      provider: aws
      type: backend-db

Cuando se aplica este YAML, Crossplane crea instantáneamente la instancia de AWS RDS subyacente, configura la red (si está definida en la Composición) y genera la cadena de conexión en un Kubernetes Secret en el espacio de nombres del desarrollador.

Servicios de Ingeniería de Productos

Colabore con nuestros gestores de proyectos, ingenieros de software y probadores de calidad, para desarrollar su nuevo producto de software personalizado o para apoyar su flujo de trabajo actual, siguiendo metodologías Agile, DevOps y Lean.

Build with 4Geeks

Manejo de la complejidad y gobernanza

Construir una plataforma de identidad robusta va más allá de la simple provisión.

  • Integración de GitOps: Debido a que los recursos de Crossplane son objetos estándar de Kubernetes, puedes gestionar toda tu plataforma utilizando ArgoCD o Flux. Los cambios de infraestructura se convierten en solicitudes de extracción.
  • Política como código: Integra Open Policy Agent (OPA) o Kyverno para validar las solicitudes antes de que se apliquen. Por ejemplo, puedes evitar que los desarrolladores soliciten instancias grandes en el entorno de desarrollo para controlar los costes.
  • Gestión de secretos: Crossplane puede integrarse con HashiCorp Vault o AWS Secrets Manager para garantizar que las credenciales de la base de datos nunca se almacenen en texto plano dentro del clúster.

Conclusión

La transición a una solución IDP basada en el plano de control con Crossplane permite a los desarrolladores tener un control total, al tiempo que permite a los líderes mantener estándares estrictos en materia de seguridad y costes. Transforma la infraestructura, pasando de ser un cuello de botella a un producto.

Sin embargo, este cambio implica una pronunciada curva de aprendizaje con respecto a los Operadores de Kubernetes y el diseño de API. Para las organizaciones que buscan implementar servicios de ingeniería en la nube para equipos remotos, 4Geeks proporciona la experiencia especializada necesaria para construir, proteger y mantener plataformas internas de desarrollo de alto rendimiento.cloud engineering services remote teams to scale this architecture, 4Geeks provides the specialized expertise required to build, secure, and maintain high-performance Internal Developer Platforms.

Preguntas frecuentes

¿Por qué se considera que Crossplane es mejor que Terraform para construir una Plataforma de Desarrollo Interna?

A diferencia de las herramientas tradicionales de "Infraestructura como Código" (IaC) como Terraform, que operan bajo un principio de "configurar y olvidar", Crossplane utiliza un patrón de Kubernetes Operatorpara proporcionar reconciliación continua. Esto significa que la plataforma monitorea activamente su infraestructura para detectar y corregir automáticamente la desviación de configuración, asegurando que el estado en vivo siempre coincida con el estado deseado definido en su plano de control.

¿Cómo simplifica Crossplane la gestión de la infraestructura para los desarrolladores de aplicaciones?

Crossplane separa las responsabilidades permitiendo que los ingenieros de la plataforma definan Definiciones de Recursos Compuestos (XRDs) y Composiciones. Esto crea una abstracción de API de alto nivel que oculta los detalles complejos de la nube (como la configuración de red y subredes). Los desarrolladores pueden entonces simplemente enviar un Solicitud—un simple manifiesto de Kubernetes—para aprovisionar recursos como bases de datos sin necesidad de un profundo conocimiento de la infraestructura.

¿Cómo puedo hacer cumplir los estándares de seguridad y cumplimiento en un IDP basado en Crossplane?

La gobernanza está integrada directamente en la arquitectura de la plataforma. Los ingenieros de la plataforma pueden hacer cumplir los estándares (como el cifrado obligatorio o tamaños de instancia específicos) dentro de la capa de Composición ," asegurando que cada recurso provisionado cumpla con la política de la empresa. Además, Crossplane se integra perfectamente con Políticas como Código herramientas como Open Policy Agent (OPA) o Kyverno para validar las solicitudes antes de aplicarlas, y funciona con administradores de secretos externos para gestionar las credenciales de forma segura.