Crossplane
Crossplane
Kubernetes로 클라우드 인프라 관리. 컨트롤 플레인 통합.
Crossplane
Kubernetes로 클라우드 인프라 관리. 컨트롤 플레인 통합.
Crossplane은 Kubernetes를 확장하여 클라우드 인프라를 관리하는 오픈소스 프로젝트입니다. 2018년 Upbound에서 시작해 CNCF 인큐베이팅 프로젝트가 되었으며, 클라우드 네이티브 인프라 관리의 새로운 패러다임을 제시합니다.
Terraform과 달리 Crossplane은 Kubernetes 컨트롤 플레인 위에서 동작합니다. Custom Resource(CR)로 AWS S3, GCP Cloud SQL, Azure CosmosDB 같은 클라우드 리소스를 선언하면, 컨트롤러가 실제 리소스를 생성하고 원하는 상태(desired state)를 유지합니다.
Composition 기능으로 여러 리소스를 조합한 고수준 추상화(Composite Resource)를 정의할 수 있습니다. 플랫폼 팀이 PostgreSQL + 백업 + 모니터링을 하나의 "Database" 리소스로 제공하면, 개발팀은 복잡한 인프라 세부사항 없이 사용합니다.
실무에서는 Kubernetes 기반 플랫폼 엔지니어링에서 셀프서비스 인프라 제공에 활용됩니다. GitOps와 결합하여 ArgoCD로 인프라 변경을 관리하고, RBAC으로 팀별 권한을 제어합니다. 멀티클라우드 환경에서 통합 관리가 가능합니다.
# Composition - 추상화된 Database 리소스 정의
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: postgres-aws
spec:
compositeTypeRef:
apiVersion: database.example.com/v1alpha1
kind: PostgreSQLInstance
resources:
# RDS 인스턴스
- name: rds-instance
base:
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
spec:
forProvider:
engine: postgres
engineVersion: "15"
instanceClass: db.t3.medium
allocatedStorage: 20
publiclyAccessible: false
skipFinalSnapshot: true
patches:
- fromFieldPath: spec.storageGB
toFieldPath: spec.forProvider.allocatedStorage
- fromFieldPath: spec.parameters.instanceClass
toFieldPath: spec.forProvider.instanceClass
# 보안 그룹
- name: security-group
base:
apiVersion: ec2.aws.upbound.io/v1beta1
kind: SecurityGroup
spec:
forProvider:
description: PostgreSQL access
---
# 개발팀이 사용하는 간단한 요청
apiVersion: database.example.com/v1alpha1
kind: PostgreSQLInstance
metadata:
name: my-app-db
spec:
storageGB: 50
parameters:
instanceClass: db.t3.large
시니어: "개발팀이 DB나 S3 필요할 때마다 인프라팀에 티켓 열고 있어요. Crossplane으로 셀프서비스 포털 만들면 YAML 하나로 직접 생성하게 할 수 있어요."
주니어: "Terraform이랑 뭐가 다른가요?"
시니어: "Terraform은 배치성이고, Crossplane은 지속적 조정(reconciliation)이에요. 리소스 드리프트를 자동으로 감지하고 복구해요. Kubernetes 생태계와의 통합도 더 자연스럽고요."
면접관: "Crossplane의 Composition이 왜 중요한가요?"
지원자: "Composition은 플랫폼 팀이 복잡한 인프라를 추상화하여 간단한 API로 제공하게 합니다. 개발자는 내부 구현을 몰라도 'Database' 하나 요청으로 RDS, 보안그룹, 백업 정책까지 자동 프로비저닝됩니다. 관심사 분리와 거버넌스가 가능해집니다."
리뷰어: "ProviderConfig에 credentials가 직접 들어있네요. Secret으로 분리하고 ESO(External Secrets Operator)로 관리하는 게 좋겠어요."
개발자: "맞아요, IRSA(IAM Roles for Service Accounts)로 변경하겠습니다. 키 관리 부담도 줄어들겠네요."