الفصل 5.4 - أفضل الممارسات
أهداف التعلم
في نهاية هذا الفصل، ستكون قادرًا على:
- تطبيق أفضل الممارسات لـ ConfigMaps
- إدارة الأسرار بشكل آمن
- فهم الحدود والقيود
- تنفيذ تدوير الأسرار
- استخدام External Secrets Operator
- تنفيذ التشفير في وضع السكون
مقدمة
أفضل الممارسات لـ ConfigMaps و Secrets ضرورية للحفاظ على بيئة Kubernetes آمنة، قابلة للصيانة، وفعالة.
ConfigMaps: أفضل الممارسات
1. فصل التكوين
لا تقم بالتشفير الثابت في الكود:
# ❌ سيء
env:
- name: DATABASE_URL
value: "postgresql://localhost:5432/mydb"
# ✅ جيد
env:
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: app-config
key: database_url
2. التنظيم حسب البيئة
إنشاء ConfigMaps منفصلة لكل بيئة:
# Dev
kubectl create configmap app-config-dev --from-file=config-dev.properties
# Production
kubectl create configmap app-config-prod --from-file=config-prod.properties
3. إصدار النسخ
استخدام التسميات لإصدار النسخ:
metadata:
name: app-config
labels:
version: v1
environment: production
Secrets: أفضل الممارسات
1. لا تقم أبدًا بالالتزام
❌ لا تفعل أبدًا:
- الالتزام بالأسرار في Git
- وضع الأسرار بشكل واضح في YAML
- مشاركة الأسرار عبر البريد الإلكتروني/الدردشة
✅ افعل:
- استخدام أدوات إدارة الأسرار
- تشفير الأسرار في وضع السكون
- استخدام External Secrets Operator
2. التدوير المنتظم
# إنشاء سر جديد
kubectl create secret generic db-secret-v2 \
--from-literal=password=new-password
# تحديث النشر
kubectl set env deployment/my-app \
DB_PASSWORD=$(kubectl get secret db-secret-v2 -o jsonpath='{.data.password}' | base64 -d)
# حذف السر القديم
kubectl delete secret db-secret-v1
3. التشفير في وضع السكون
يخزن Kubernetes الأسرار في base64 (لا يوجد تشفير افتراضي).
الحلول:
- تفعيل التشفير في وضع السكون (EncryptionConfig)
- استخدام أدوات خارجية (Vault, AWS Secrets Manager)
الحدود والقيود
الحجم الأقصى
- ConfigMap: 1 ميجابايت لكل إدخال
- Secret: 1 ميجابايت لكل إدخال
- الإجمالي: محدود بواسطة etcd (عادة 1.5 ميجابايت)
الأداء
- يمكن أن تبطئ ConfigMaps الكبيرة من بدء تشغيل Pods
- يفضل استخدام عدة ConfigMaps صغيرة
External Secrets Operator
للأسرار الخارجية (AWS, Azure, GCP, Vault):
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: db-secret
spec:
secretStoreRef:
name: aws-secrets-manager
kind: SecretStore
target:
name: db-secret
creationPolicy: Owner
data:
- secretKey: password
remoteRef:
key: production/database/password
ملخص
في هذا الفصل، تعلمت:
ConfigMaps: فصل التكوين عن الكود، التنظيم حسب البيئة
Secrets: لا تقم أبدًا بالالتزام، التدوير المنتظم، التشفير
الحدود: الحجم الأقصى، اعتبارات الأداء
الأدوات: External Secrets Operator للأسرار الخارجية
الأمان: التشفير في وضع السكون، الإدارة المركزية
الخطوات التالية
Lab 5.1: إنشاء واستخدام ConfigMaps
Lab 5.2: إدارة الأسرار
تم إنشاء الفصل في: ديسمبر 2024