Xây Dựng Enterprise IDP Với Backstage, Score và Crossplane Cho Hạ Tầng Đa Đám Mây
Xây Dựng Enterprise Internal Developer Platform Với Backstage, Score và Crossplane
Các tổ chức công nghệ hiện đại đang đối mặt với một nghịch lý lớn: mặc dù kiến trúc microservices và cloud APIs mang lại sự linh hoạt vượt trội, chúng lại tạo ra gánh nặng nhận thức (cognitive load) quá lớn cho các kỹ sư phần mềm. Lập trình viên liên tục phải quản lý các tệp YAML phức tạp của Kubernetes, chính sách IAM, Terraform modules, Helm charts và mạng đám mây chỉ để triển khai một dịch vụ đơn giản.
Để giải quyết bài toán này, các đội ngũ Platform Engineering xây dựng Internal Developer Platform (IDP). Giải pháp này giúp tách biệt ý định phát triển ứng dụng khỏi các cơ chế hạ tầng phức tạp. Bằng cách kết hợp Backstage (Developer Portal và Service Catalog), Score (chuẩn hóa mô tả workload), và Crossplane (Control Plane quản lý hạ tầng đa đám mây), doanh nghiệp có thể cung cấp dịch vụ hạ tầng tự phục vụ (Self-Service) chuẩn GitOps.
Tổng Quan Kiến Trúc Stack Công Nghệ
Kiến trúc lõi chia chia trải nghiệm lập trình viên và hạ tầng quản trị thành ba tầng tách biệt:
- Tầng Portal (Backstage): Đóng vai trò là giao diện trung tâm, lưu trữ Software Catalog và khởi tạo dự án thông qua Software Templates.
- Tầng Trừu Tượng Hóa (Score): Cung cấp tệp cấu hình
score.yamltrung lập với môi trường cloud, cho phép lập trình viên khai báo nhu cầu hạ tầng mà không cần hiểu sâu về cloud API. - Tầng Control Plane (Crossplane & ArgoCD): Crossplane mở rộng Kubernetes thành một Control Plane toàn năng bằng Composite Resource Definitions (XRDs) để khởi tạo tài nguyên đám mây (AWS RDS, GCP CloudSQL, Azure Database), trong khi ArgoCD liên tục đồng bộ trạng thái mong muốn từ Git.
+---------------------------------------------------------------------------------+
| LẬP TRÌNH VIÊN (DEVELOPER) |
| |
| +-------------------+ +-------------------+ +------------------+ |
| | Backstage UI | ---> | score.yaml | ---> | Git Repository | |
| | (Software Template| | (Intent-based Spec| | (Declarative Repo| |
| +-------------------+ +-------------------+ +------------------+ |
+-----------------------------------------|---------------------------------------+
| GitOps Sync (ArgoCD / Flux)
+-----------------------------------------v---------------------------------------+
| PLATFORM CONTROL PLANE |
| |
| +---------------------------------------------------------------------------+ |
| | Kubernetes Cluster (Control Plane) | |
| | | |
| | +------------------------+ +------------------------------+ | |
| | | score-k8s / score-xp | --------> | Crossplane Composite Resource| | |
| | | (Spec Transformer) | | (Ví dụ: XPostgreSQLInstance) | | |
| | +------------------------+ +------------------------------+ | |
| +--------------------------------------------------------|------------------+ |
+-----------------------------------------------------------|---------------------+
| Cloud Provider APIs
v
+-----------------------------------------------+
| AWS RDS | GCP CloudSQL | Azure Postgres |
+-----------------------------------------------+Bước 1: Khai Báo Nhu Cầu Hạ Tầng Với Score
Lập trình viên không nên phải viết hàng trăm dòng code Helm hay HCL để xin cấp một cơ sở dữ liệu. Với Score, họ chỉ cần mô tả những gì ứng dụng cần để chạy trong tệp spec chuẩn hóa.
Dưới đây là tệp score.yaml tiêu chuẩn doanh nghiệp khai báo một workload cần tài nguyên PostgreSQL:
apiVersion: score.dev/v1b1
metadata:
name: payment-service
containers:
app:
image: 123456789012.dkr.ecr.us-east-1.amazonaws.com/finance/payment-service:v2.4.1
variables:
LOG_LEVEL: "info"
DB_HOST: "${resources.db.host}"
DB_PORT: "${resources.db.port}"
DB_NAME: "${resources.db.name}"
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "2"
memory: "2Gi"
resources:
db:
type: postgres
class: production
params:
storageGb: 100
engineVersion: "15.4"Bước 2: Thiết Kế Crossplane Composite Resource Definition (XRD)
Platform team định nghĩa các mẫu tài nguyên hạ tầng trừu tượng thông qua Crossplane XRD. Dưới đây là tệp CompositeResourceDefinition cho một instance PostgreSQL (XPostgreSQLInstance):
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
name: xpostgresqlinstances.platform.enterprise.io
spec:
group: platform.enterprise.io
names:
kind: XPostgreSQLInstance
plural: xpostgresqlinstances
claimNames:
kind: PostgreSQLInstance
plural: postgresqlinstances
versions:
- name: v1alpha1
served: true
referenceable: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
parameters:
type: object
properties:
storageGb:
type: integer
default: 20
engineVersion:
type: string
default: "15"
cloudProvider:
type: string
enum: ["aws", "gcp", "azure"]
required:
- storageGb
- cloudProvider
required:
- parametersBước 3: Triển Khai Crossplane Compositions Cho Đa Đám Mây
Tiếp theo, đội ngũ Platform xây dựng Composition để ánh xạ Custom Resource sang các tài nguyên thực tế trên AWS (RDS Instance, Subnet Group, Security Group):
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: aws-rds-postgres-production
labels:
provider: aws
environment: production
spec:
compositeTypeRef:
apiVersion: platform.enterprise.io/v1alpha1
kind: XPostgreSQLInstance
resources:
- name: rds-instance
base:
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
spec:
forProvider:
region: us-east-1
dbSubnetGroupName: enterprise-vpc-db-subnet
vpcSecurityGroupIdRefs:
- name: db-sec-group
allocatedStorage: 20
engine: postgres
instanceClass: db.m6i.large
publiclyAccessible: false
skipFinalSnapshot: false
patches:
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.storageGb
toFieldPath: spec.forProvider.allocatedStorage
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.engineVersion
toFieldPath: spec.forProvider.engineVersionBước 4: Tự Động Hóa Qua Backstage Software Templates
Để lập trình viên tương tác một cách dễ dàng nhất, Backstage sử dụng Software Templates để thu thập thông tin, tự động sinh mã nguồn chứa `score.yaml`, biến đổi thành Crossplane Claims và đẩy lên kho chứa Git.
apiVersion: backstage.io/v1alpha1
kind: Template
metadata:
name: microservice-idp-template
title: Enterprise Cloud-Native Service
description: Tự động khởi tạo dịch vụ microservice và hạ tầng đa đám mây với Score và Crossplane.
spec:
owner: platform-engineering
type: service
parameters:
- title: Service Configuration
required:
- serviceName
- cloudProvider
properties:
serviceName:
title: Service Name
type: string
pattern: '^[a-z0-9-]+$'
cloudProvider:
title: Target Cloud Provider
type: string
enum:
- aws
- gcp
- azure
default: aws
steps:
- id: fetch-skeleton
name: Render Base Code and Score Spec
action: fetch:template
input:
url: ./skeleton
values:
serviceName: ${{ parameters.serviceName }}
cloudProvider: ${{ parameters.cloudProvider }}
- id: publish-git
name: Publish to Git Provider
action: publish:github
input:
allowedHosts: ['github.com']
repoUrl: 'github.com?repo=${{ parameters.serviceName }}&owner=enterprise-org'
- id: register-catalog
name: Register in Backstage Catalog
action: catalog:register
input:
repoContentsUrl: '${{ steps["publish-git"].output.repoContentsUrl }}'
catalogInfoPath: '/catalog-info.yaml'Quản Trị Hệ Thống Và Tuân Thủ Chính Sách (Governance & Compliance)
Mô hình Self-service nếu thiếu quản trị sẽ dẫn đến rủi ro chi phí và lỗ hổng bảo mật. Đối với nền tảng dựa trên Crossplane và Score, chính sách phải được thực thi ở hai cấp độ:
- Chính sách tĩnh ở quy trình CI (Shift-Left): Kiểm tra tính hợp lệ của `score.yaml` bằng `score-k8s validate` và OPA Conftest.
- Admission Control tại Runtime: Áp dụng các quy tắc Kyverno hoặc OPA Gatekeeper chặt chẽ trực tiếp trên các Crossplane Resource Claim trong Kubernetes cluster.
Nguyên tắc cốt lõi: Đội ngũ Platform tuyệt đối không cấp quyền trực tiếp cho ứng dụng tương tác với các CRD gốc của Provider (ví dụ: Upbound AWS Provider CRDs). Luôn bắt buộc đi qua tầng trung gian Composite Resource Definition (XRD).
Kết Luận
Sự kết hợp giữa Backstage, Score và Crossplane tạo ra sự phân định trách nhiệm rõ ràng cho kiến trúc IDP hiện đại. Lập trình viên đạt được sự chủ động tối đa thông qua các khai báo đơn giản, trong khi các kỹ sư Platform duy trì khả năng kiểm soát toàn diện về hạ tầng, bảo mật và tối ưu chi phí trên các đám mây AWS, GCP và Azure.
