Quay lại danh sách
Tin tức công nghệ

Xây dựng Developer Platform Doanh nghiệp với Backstage, Score và Crossplane

22 tháng 8, 2026

Xây dựng Platform Tự Phục Vụ Hạ Tầng Đa Đám Mây với Backstage, Score và Crossplane

Khi các doanh nghiệp mở rộng quy mô hạ tầng trên AWS, GCP và Azure, gánh nặng nhận thức (cognitive load) của lập trình viên đã đạt mức báo động. Kỹ sư phát triển phần mềm thường xuyên phải tự thao tác trên các Console của nhà cung cấp cloud, viết các mẫu Infrastructure-as-Code (IaC) phức tạp (Terraform/Pulumi) và chỉnh sửa tệp YAML Kubernetes thô chỉ để triển khai một microservice. Sự phân mảnh này tạo ra nghẽn cổ chai trong vận hành, gây rủi ro về tuân thủ an ninh và tạo ra Shadow IT.

Để giải quyết bài toán này, các tổ chức DevOps tiên tiến đang áp dụng giải pháp Internal Developer Platform (IDP). Bài viết này trình bày kiến trúc chuẩn doanh nghiệp kết hợp bộ ba công cụ mã nguồn mở: Backstage (Developer Portal & Service Catalog), Score (Khung tả đặc tả Workload không phụ thuộc môi trường) và Crossplane (Control Plane hạ tầng mã nguồn mở native cho Kubernetes).

Kiến trúc Bộ Ba IDP Hiện Đại

Một hệ thống IDP doanh nghiệp phải đảm bảo sự phân tách trách nhiệm rõ ràng giữa Đội ngũ Platform (người thiết kế abstraction hạ tầng và thiết lập các khung bảo mật) và Đội ngũ Phát triển Phần mềm (người tiêu thụ tài nguyên và triển khai ứng dụng).

  • Backstage (Giao diện tập trung): Cung cấp cổng thông tin tập trung cho lập trình viên, tự động hóa khởi tạo dịch vụ (Software Templates), quản lý Catalog và theo dõi chỉ số khả năng quan sát (Observability).
  • Score (Tầng trừu tượng hóa Workload): Cung cấp định dạng cấu hình mã nguồn mở (score.yaml) giúp lập trình viên khai báo yêu cầu ứng dụng (containers, biến môi trường, tài nguyên phụ thuộc như database hay queue) hoàn toàn độc lập với môi trường triển khai thực tế.
  • Crossplane (Universal Control Plane): Mở rộng Custom Resource Definitions (CRDs) của Kubernetes để quản trị và khởi tạo hạ tầng multi-cloud trực tiếp qua Kubernetes API, thay thế các pipeline IaC bất đồng bộ truyền thống bằng vòng lặp tự điều chỉnh (continuous reconciliation).

Luồng hoạt động kiến trúc như sau:

+-----------------------------------------------------------------------------------+
|                            MIỀN LẬP TRÌNH VIÊN (DEVELOPER)                        |
|  +------------------------+                     +------------------------------+  |
|  |   Backstage Portal     |  --- (Tạo mẫu) ---> | Git Repo (code + score.yaml) |  |
|  |  (Catalog & Scaffolder)|                     +------------------------------+  |
|  +------------------------+                                    |                  |
+----------------------------------------------------------------|------------------+
                                                                 | Git Push / CI
                                                                 v
+-----------------------------------------------------------------------------------+
|                             MIỀN NỀN TẢNG (PLATFORM)                              |
|  +------------------------+                     +------------------------------+  |
|  |  score-k8s / Translator| -- (Chuyển đổi) ->  | Crossplane Claims & K8s Spec |  |
|  +------------------------+                     +------------------------------+  |
|                                                                |                  |
|                                                         ArgoCD / GitOps           |
|                                                                v                  |
|  +-----------------------------------------------------------------------------+  |
|  |                        Kubernetes Platform Cluster                          |  |
|  |  +--------------------+                     +----------------------------+  |  |
|  |  | Application Pods   |                     | Crossplane Control Plane   |  |  |
|  |  +--------------------+                     +----------------------------+  |  |
|  +-----------------------------------------------------------|-----------------+  |
+--------------------------------------------------------------|--------------------+
                                                               | API Reconciliation
                                                               v
                                    +----------------------------------------------------+
                                    | Hạ Tầng Đa Đám Mây (AWS RDS, GCP CloudSQL, v.v.)   |
                                    +----------------------------------------------------+

1. Crossplane: Trừu Tượng Hóa Hạ Tầng Với Composition

Các kỹ sư platform sẽ định nghĩa các khối hạ tầng tái sử dụng và tuân thủ chính sách doanh nghiệp bằng cách sử dụng Crossplane Composite Resource Definition (XRD) và Composition. Dưới đây là ví dụ về XRD định nghĩa một PostgreSQL Database chung mà không lộ thông tin nền tảng bên dưới là AWS RDS hay GCP CloudSQL.

# definition.yaml: Định nghĩa CompositeResourceDefinition (XRD)
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
  name: xpostgresinstances.platform.enterprise.io
spec:
  group: platform.enterprise.io
  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:
                storageGB:
                  type: integer
                  default: 20
                engineVersion:
                  type: string
                  default: "15"
              required:
                - storageGB

Sau đó, Đội ngũ Platform sẽ liên kết XRD này với tài nguyên chi tiết trên AWS thông qua Crossplane Composition:

# composition-aws.yaml: Composition thực thi trên AWS RDS
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: xpostgresinstance.aws.rds
  labels:
    provider: aws
    db: postgresql
spec:
  compositeTypeRef:
    apiVersion: platform.enterprise.io/v1alpha1
    kind: XPostgresInstance
  resources:
    - name: rds-instance
      base:
        apiVersion: database.aws.upbound.io/v1beta1
        kind: Instance
        spec:
          forProvider:
            region: us-east-1
            dbSubnetGroupName: enterprise-vpc-subnets
            engine: postgres
            instanceClass: db.t4g.medium
            allocatedStorage: 20
            skipFinalSnapshot: true
            publiclyAccessible: false
      patches:
        - type: FromCompositeFieldPath
          fromFieldPath: spec.storageGB
          toFieldPath: spec.forProvider.allocatedStorage
        - type: FromCompositeFieldPath
          fromFieldPath: spec.engineVersion
          toFieldPath: spec.forProvider.engine

2. Score: Chuẩn Hóa Khai Báo Cấu Hình Ứng Dụng

Thay vì bắt lập trình viên tự viết tệp Kubernetes Deployment, Service, và Resource Claim phức tạp, lập trình viên chỉ cần khai báo nhu cầu dịch vụ thông qua tệp score.yaml.

# score.yaml: Đặt tả Workload của Lập trình viên
apiVersion: score.dev/v1b1
metadata:
  name: payment-service
containers:
  web:
    image: 123456789.dkr.ecr.us-east-1.amazonaws.com/payment-service:v2.4.1
    variables:
      PORT: "8080"
      DB_HOST: "${resources.db.host}"
      DB_NAME: "${resources.db.name}"
      DB_USER: "${resources.db.username}"
      DB_PASSWORD: "${resources.db.password}"
resources:
  db:
    type: postgres
    properties:
      host: metadata.name
      name: metadata.database
      username: status.username
      password: status.password

Trong quá trình chạy CI/CD pipeline, công cụ CLI score-k8s hoặc các bộ dịch Score tùy chỉnh sẽ tự động biên dịch tệp cấu hình này thành Kubernetes Manifests và Crossplane Resource Claim (PostgresInstance). Lập trình viên không cần biết hoặc lưu trữ thông tin credentials hay cấu hình RDS thô.

3. Backstage: Tích Hợp Software Catalog và Template Scaffolder

Backstage giữ vai trò là cổng giao tiếp chính với lập trình viên. Thông qua Backstage Software Templates, lập trình viên có thể tạo mới ứng dụng microservice đi kèm hạ tầng đám mây chỉ bằng vài cú nhấp chuột trên giao diện web.

Dưới đây là đoạn cấu hình Backstage Scaffolder Template sinh ra kho chứa mã nguồn microservice bao gồm mã nguồn cơ bản và tệp score.yaml chuẩn hóa:

# template.yaml: Backstage Software Template
apiVersion: backstage.io/v1alpha1
kind: Template
metadata:
  name: golang-microservice-template
  title: Go Microservice đi kèm Postgres DB
  description: Tự động khởi tạo Go microservice và tích hợp sẵn Postgres DB qua Crossplane và Score spec.
spec:
  owner: platform-team
  type: service
  parameters:
    - title: Cấu hình dịch vụ
      required:
        - serviceName
        - dbStorageSize
      properties:
        serviceName:
          title: Tên Dịch Vụ
          type: string
          default: order-processing
        dbStorageSize:
          title: Dung lượng DB (GB)
          type: integer
          default: 50
  steps:
    - id: fetch-base
      name: Tải Mã Nguồn Mẫu
      action: fetch:template
      url: ./template
      values:
        serviceName: ${{ parameters.serviceName }}
        dbStorageSize: ${{ parameters.dbStorageSize }}

    - id: publish-git
      name: Đẩy lên GitHub
      action: publish:github
      input:
        allowedOwners: ['enterprise-org']
        repoUrl: 'github.com?repo=' + parameters.serviceName + '&owner=enterprise-org'

    - id: register-catalog
      name: Đăng ký Component vào Backstage
      action: catalog:register
      input:
        catalogInfoUrl: 'https://github.com/enterprise-org/' + parameters.serviceName + '/blob/main/catalog-info.yaml'

Quản Trị Doanh Nghiệp, Kiểm Soát Tuân Thủ Và GitOps

Một hệ thống IDP vững chắc đòi hỏi cơ chế kiểm tra chính xác ở runtime và khả năng chống trôi cấu hình (drift detection) triệt để. Bằng việc kết hợp ArgoCD và Open Policy Agent (OPA) / Kyverno, đội ngũ platform có thể đảm bảo tuân thủ quy định trên toàn bộ hệ thống:

  1. Kiểm soát chính sách tại API Layer: Các chính sách Kyverno thực thi quét các Crossplane Composite Resources (XRs) để đảm bảo các tag bắt buộc (như cost-center, owner) luôn tồn tại và giới hạn dung lượng tài nguyên khởi tạo.
  2. Tự động đồng bộ khi trôi cấu hình: Crossplane liên tục so sánh trạng thái thực tế trên Cloud với trạng thái khai báo trong Kubernetes API, tự động khôi phục cấu hình về chuẩn nếu có bất kỳ thay đổi trái phép nào trên AWS hay GCP Console.
  3. Bảo mật thông tin quản trị Secret: Các secret do Crossplane tạo ra (chẳng hạn như mật khẩu RDS) được đẩy trực tiếp vào HashiCorp Vault hoặc Kubernetes Secret, sau đó tự động inject vào môi trường Pod của ứng dụng thông qua bộ giải mã của Score.

Kết Luận

Sự kết hợp giữa Backstage, Score, và Crossplane mang lại một nền tảng Internal Developer Platform có tốc độ triển khai cao và độ an toàn tuyệt đối. Backstage loại bỏ sự phân mảnh về cổng thông tin, Score bảo vệ lập trình viên khỏi sự phức tạp của Kubernetes YAML, và Crossplane biến Kubernetes thành một Universal Control Plane quản trị hạ tầng đa đám mây. Kiến trúc hiện đại này giúp đội ngũ phát triển chủ động tự phục vụ nhu cầu hạ tầng chỉ trong vài phút, đồng thời cho phép đội ngũ platform duy trì quyền kiểm soát an ninh, chi phí và sự tuân thủ trên toàn bộ quy mô doanh nghiệp.