توفير البنية التحتية مع Crossplane
المزودون والموارد المُدارة
4 دقيقة للقراءة
المزودون هم قلب Crossplane، يتصلون بـ APIs السحابية ويديرون موارد البنية التحتية. فهم كيفية تكوين المزودين والعمل مع الموارد المُدارة ضروري لبناء منصتك.
أنواع المزودين
يدعم Crossplane مزودين للمنصات السحابية والخدمات الرئيسية:
# فئات المزودين المتاحة
providers:
cloud_platforms:
- name: provider-aws
resources: "EC2, RDS, S3, VPC, EKS, Lambda, إلخ"
package: xpkg.upbound.io/upbound/provider-family-aws
- name: provider-gcp
resources: "Compute, CloudSQL, GCS, VPC, GKE, إلخ"
package: xpkg.upbound.io/upbound/provider-family-gcp
- name: provider-azure
resources: "VMs, SQL, Storage, VNet, AKS, إلخ"
package: xpkg.upbound.io/upbound/provider-family-azure
kubernetes:
- name: provider-kubernetes
resources: "Deployments, Services, ConfigMaps, إلخ"
use_case: "نشر التطبيقات مع البنية التحتية"
- name: provider-helm
resources: "إصدارات Helm"
use_case: "نشر مخططات Helm كجزء من التركيبات"
other:
- name: provider-terraform
use_case: "استخدام وحدات Terraform في Crossplane"
- name: provider-sql
use_case: "إدارة قواعد البيانات، المستخدمين، الصلاحيات"
تثبيت مزودين متعددين
للمنصة الحقيقية، ستحتاج مزودين متعددين:
# providers.yaml - تثبيت مزودات عائلة AWS
---
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-aws-ec2
spec:
package: xpkg.upbound.io/upbound/provider-aws-ec2:v1.1.0
---
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-aws-rds
spec:
package: xpkg.upbound.io/upbound/provider-aws-rds:v1.1.0
---
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-aws-s3
spec:
package: xpkg.upbound.io/upbound/provider-aws-s3:v1.1.0
---
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-aws-iam
spec:
package: xpkg.upbound.io/upbound/provider-aws-iam:v1.1.0
# تطبيق جميع المزودين
kubectl apply -f providers.yaml
# انتظار أن يصبح المزودون صحيين
kubectl wait provider --all --for=condition=Healthy --timeout=300s
# قائمة المزودين المثبتين
kubectl get providers
# NAME INSTALLED HEALTHY PACKAGE AGE
# provider-aws-ec2 True True xpkg.upbound.io/upbound/provider-aws-ec2:v1.1.0 2m
# provider-aws-rds True True xpkg.upbound.io/upbound/provider-aws-rds:v1.1.0 2m
# provider-aws-s3 True True xpkg.upbound.io/upbound/provider-aws-s3:v1.1.0 2m
# provider-aws-iam True True xpkg.upbound.io/upbound/provider-aws-iam:v1.1.0 2m
خيارات تكوين المزود
تكوين بيانات الاعتماد بأمان:
# الخيار 1: بيانات اعتماد قائمة على Secret (التطوير)
---
apiVersion: v1
kind: Secret
metadata:
name: aws-creds
namespace: crossplane-system
type: Opaque
stringData:
credentials: |
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
---
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: aws-creds
key: credentials
---
# الخيار 2: IRSA (الإنتاج - AWS)
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
credentials:
source: IRSA
---
# الخيار 3: Workload Identity (الإنتاج - GCP)
apiVersion: gcp.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
projectID: my-gcp-project
credentials:
source: InjectedIdentity
---
# الخيار 4: تكوينات متعددة (حسابات متعددة)
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: production
spec:
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: aws-creds-prod
key: credentials
---
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: development
spec:
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: aws-creds-dev
key: credentials
أمثلة الموارد المُدارة
قاعدة بيانات RDS
# rds-instance.yaml
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
metadata:
name: production-postgres
spec:
forProvider:
region: us-east-1
allocatedStorage: 20
autoMinorVersionUpgrade: true
backupRetentionPeriod: 7
backupWindow: "03:00-04:00"
dbInstanceClass: db.t3.micro
dbName: appdb
engine: postgres
engineVersion: "15.4"
instanceIdentifier: production-postgres
maintenanceWindow: "Mon:04:00-Mon:05:00"
multiAz: false
passwordSecretRef:
key: password
name: db-password
namespace: default
publiclyAccessible: false
skipFinalSnapshot: true
storageEncrypted: true
storageType: gp3
username: dbadmin
vpcSecurityGroupIdRefs:
- name: db-security-group
dbSubnetGroupNameRef:
name: db-subnet-group
providerConfigRef:
name: default
writeConnectionSecretToRef:
name: postgres-connection
namespace: default
VPC مع شبكات فرعية
# vpc.yaml
apiVersion: ec2.aws.upbound.io/v1beta1
kind: VPC
metadata:
name: platform-vpc
spec:
forProvider:
region: us-east-1
cidrBlock: 10.0.0.0/16
enableDnsHostnames: true
enableDnsSupport: true
tags:
Name: platform-vpc
Environment: production
providerConfigRef:
name: default
---
# subnet.yaml
apiVersion: ec2.aws.upbound.io/v1beta1
kind: Subnet
metadata:
name: platform-subnet-a
spec:
forProvider:
region: us-east-1
availabilityZone: us-east-1a
cidrBlock: 10.0.1.0/24
vpcIdRef:
name: platform-vpc
mapPublicIpOnLaunch: false
tags:
Name: platform-subnet-a
providerConfigRef:
name: default
حاوية S3 مع التشفير
# s3-bucket-secure.yaml
apiVersion: s3.aws.upbound.io/v1beta1
kind: Bucket
metadata:
name: app-data-bucket
spec:
forProvider:
region: us-east-1
tags:
Environment: production
providerConfigRef:
name: default
---
apiVersion: s3.aws.upbound.io/v1beta1
kind: BucketServerSideEncryptionConfiguration
metadata:
name: app-data-bucket-encryption
spec:
forProvider:
region: us-east-1
bucketRef:
name: app-data-bucket
rule:
- applyServerSideEncryptionByDefault:
- sseAlgorithm: AES256
---
apiVersion: s3.aws.upbound.io/v1beta1
kind: BucketVersioning
metadata:
name: app-data-bucket-versioning
spec:
forProvider:
region: us-east-1
bucketRef:
name: app-data-bucket
versioningConfiguration:
- status: Enabled
---
apiVersion: s3.aws.upbound.io/v1beta1
kind: BucketPublicAccessBlock
metadata:
name: app-data-bucket-public-access
spec:
forProvider:
region: us-east-1
bucketRef:
name: app-data-bucket
blockPublicAcls: true
blockPublicPolicy: true
ignorePublicAcls: true
restrictPublicBuckets: true
أسرار الاتصال
يمكن لـ Crossplane كتابة تفاصيل الاتصال إلى Kubernetes Secrets:
# المورد مع سر الاتصال
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
metadata:
name: my-database
spec:
forProvider:
# ... التكوين
writeConnectionSecretToRef:
name: db-connection-secret
namespace: default
---
# السر الناتج يحتوي:
# apiVersion: v1
# kind: Secret
# metadata:
# name: db-connection-secret
# data:
# endpoint: <base64-encoded-endpoint>
# port: <base64-encoded-port>
# username: <base64-encoded-username>
# password: <base64-encoded-password>
# عرض تفاصيل الاتصال
kubectl get secret db-connection-secret -o yaml
# الاستخدام في تطبيقك
kubectl get secret db-connection-secret -o jsonpath='{.data.endpoint}' | base64 -d
مراجع الموارد
ربط الموارد معًا باستخدام المراجع:
# أنماط المراجع
references:
# بالاسم (في نفس مساحة الاسم)
vpcIdRef:
name: my-vpc
# بالمحدد (مطابقة التسميات)
vpcIdSelector:
matchLabels:
environment: production
team: platform
# بالاسم الخارجي (مورد موجود)
vpcId: vpc-0123456789abcdef0
# مرجع السر (للقيم الحساسة)
passwordSecretRef:
key: password
name: db-credentials
namespace: crossplane-system
# مثال: مجموعة أمان تشير إلى VPC
apiVersion: ec2.aws.upbound.io/v1beta1
kind: SecurityGroup
metadata:
name: db-security-group
spec:
forProvider:
region: us-east-1
description: "مجموعة أمان قاعدة البيانات"
vpcIdRef:
name: platform-vpc # يشير إلى VPC بالاسم
ingress:
- fromPort: 5432
toPort: 5432
protocol: tcp
cidrBlocks:
- 10.0.0.0/16
tags:
Name: db-security-group
مراقبة الموارد
مراقبة مواردك المُدارة:
# قائمة جميع الموارد المُدارة
kubectl get managed
# فحص نوع مورد محدد
kubectl get instance.rds.aws.upbound.io
# مراقبة حالة المورد
kubectl get bucket -w
# الحصول على حالة مفصلة
kubectl describe instance.rds.aws.upbound.io my-database
# فحص الأحداث
kubectl get events --field-selector involvedObject.name=my-database
# عرض سجلات Crossplane للتصحيح
kubectl logs -n crossplane-system -l pkg.crossplane.io/provider=provider-aws-rds
في الدرس التالي، سنبني على هذه الأساسيات لإنشاء التركيبات وXRDs—مفتاح البنية التحتية ذاتية الخدمة. :::