Overview
Crossplane 이란 “클라우드 네이티브 제어 영역 프레임워크” 이며,
코드를 작성할 필요 없이 어플리케이션과 인프라를 오케스트레이션 할 수 있는 프레임워크입니다.
쉽게 말해서 Kubernetes 클러스터에서 인프라 자원을 관리하기 위한 오픈 소스 툴입니다.
클라우드 업체에서 컨트롤 플레인을 사용해 플랫폼을 구축하듯이,
조직이 플랫폼을 구축할 수 있게 하는 kubernetes 기반 오픈 소스 CNCF 프로젝트입니다.
오케스트레이션을 위한 확장성있는 백엔드와 선언적인 API를 정의할 수 있는 프런트엔드를 갖추고 있습니다.
Kubernetes 기반으로 구축되어 RBAC 등 컨테이너 뿐 아니라 모든 것을 조율할 수 있으며 클라우드 기본 도구와 통합 가능 합니다.
Upbound 라는 마켓플레이스를 통해 Crossplane Provider 과 구성을 쉽게 찾을 수 있습니다.
또한 Apache 2.0 라이센스를 따라 출시된 오픈 소스이며 커뮤니티 중심 프레임워크 입니다.
How to use
Helm 이 설치되어있다면, 헬름을 통해 Crossplane을 설치할 수 있습니다.
helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update
helm install crossplane --namespace crossplane-system crossplane-stable/crossplane
또는 Crossplan Github Repository 에서 직접 yaml 파일로 다운받아 설치할 수 있습니다.
kubectl apply -f https://raw.githubusercontent.com/crossplane/crossplane/main/deploy/release/crossplane/provider-latest.yaml
본인은 AWS에 익숙하므로, 사용을 위해 AWS Provider 기반으로 기술하겠습니다.
IAM credential 이 필요하므로, 해당 경우에는 IAM Role을 사용하는 기반으로 기술합니다.
먼저 사용할 IAM Role 의 Trust Relationship 을 정합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:root" // 또는 Crossplane을 실행하는 IAM User의 ARN
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<AWS_ACCOUNT_ID>:oidc-provider/<OIDC_PROVIDER_URL>" // Kubernetes OIDC Provider의 ARN
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.amazonaws.com/id/<CLUSTER_OIDC_ISSUER>": "system:serviceaccount:<KUBE_NAMESPACE>:<SERVICE_ACCOUNT_NAME>"
}
}
}
]
}
AWS IAM Authenticator 를 설치합니다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-iam-authenticator/master/dist/aws-iam-authenticator.yaml
Crossplane 이 사용할 Service Account 를 쿠버네티스에 생성하고 역할 바인딩을 합니다.
apiVersion: v1
kind: ServiceAccount
metadata:
name: crossplane-serviceaccount
namespace: crossplane-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: crossplane-rolebinding
namespace: crossplane-system
subjects:
- kind: ServiceAccount
name: crossplane-serviceaccount
namespace: crossplane-system
roleRef:
kind: ClusterRole
name: system:node-proxier // 또는 사용 권한이 필요한 ClusterRole
apiGroup: rbac.authorization.k8s.io
이제 Crossplane 이 IAM 역할을 사용할 수 있도록 AWS ProviderConfig 를 설정합니다.
apiVersion: aws.crossplane.io/v1alpha3
kind: ProviderConfig
metadata:
name: aws-providerconfig
spec:
credentials:
source: ProviderSecret
providerSecretRef:
namespace: crossplane-system
name: aws-provider-secret
사용 예)
Crossplane을 사용하여 AWS RDS 인스턴스를 생성할 때, Crossplane은 해당 IAM Role을 통해 AWS 자원에 접근하게 됩니다.
apiVersion: database.aws.crossplane.io/v1alpha1
kind: RDSInstance
metadata:
name: example-db
spec:
engine: mysql
engineVersion: "5.7"
instanceClass: db.t2.micro
storageGB: 20
multiAZ: false
... (기타 필요한 설정)
사용 명령어 예시
# get crossplane resources
kubectl get <crossplane-resource-type>
kubectl get rdsinstances.aws.crossplane.io
kubectl get rdsinstances.aws.crossplane.io -l app=example-app
kubectl get rdsinstances.aws.crossplane.io --field-selector=status.phase=Failed
# describe
kubectl describe <crossplane-resource-type> <resource-name>
kubectl describe rdsinstances.aws.crossplane.io example-db
# create resources
kubectl apply -f <yaml-file>
# delete resources
kubectl delete <crossplane-resource-type> <resource-name>
kubectl delete rdsinstances.aws.crossplane.io example-db
Official document to start Crossplane: https://docs.crossplane.io/latest/software/install/
'devops > ETC' 카테고리의 다른 글
Hashcorp Vault with a simple demo (0) | 2024.06.23 |
---|---|
Pulumi with a simple demo (0) | 2024.06.23 |
Istio - service mesh (2) | 2024.06.15 |
Aqua Security / Trivy (2) | 2024.06.15 |
Automation technologies including tech companies (0) | 2023.08.04 |