Argo CD / أسس القصد والأدلة / الدرس 4
AppProject وحدود الوجهة
راجع المستودع والوجهة والنوع وسلطة Kubernetes الفعلية معاً.
في هذه الصفحة
أهداف الدرس
- شرح قيد المشروع وما لا يستبدله.
- تقييم آثار مساحة أسماء التحكم والموارد على مستوى العنقود قبل قبول تغييرات المصدر.
المشروع حد سياسة للتطبيقات
يجمع AppProject التطبيقات ويقيد المستودعات والوجهات والأنواع وفق إعداده الموثق، وقد يحمل أدواراً وسياسات أخرى. يجب أن يعبر مشروع Parcel عن نطاقه لا يرث افتراضاً واسعاً بلا مراجعة. ليس الاسم عزلاً مادياً مستقلاً. تحدد هوية الخدمة وKubernetes ووصول المستودع ومعدلو المشروع والتطبيق السلطة العملية. تتبع المسار من كاتب المصدر إلى العملية. لا يكفي أن يظهر التطبيق تحت مجموعة صحيحة في الواجهة إذا كان الكاتب يستطيع توسيع المجموعة أو إخراج موارد تتجاوز ما يتوقعه مالك الهدف.
اقرأ مثالاً ضيقاً مقصوداً
يسمح المثال بمستودع افتراضي ووجهة واحدة ونوعين محصورين في مساحة أسماء، وتكون قائمة أنواع الموارد المسموح بها على مستوى العنقود فارغة. لا يُطبق ولا يثبت ضيق اعتماد الوجهة. راعِ كل نوع مولد ودلالات النسخة الفعلية. يغير wildcard عقد الثقة فلا تضفه لإسكات الرفض. حدد المصدر والمورد وهل تنتمي العملية للمشروع أولاً. قد يكشف الرفض اعتماداً مطلوباً مشروعاً أو توسعاً غير مقصود في القالب؛ يحتاج الاحتمالان أدلة مختلفة، ولا يتحول نجاح توليد YAML إلى تفويض لتطبيق كل ما خرج منه.
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: parcel-lab
namespace: argocd
spec:
sourceRepos:
- https://example.invalid/parcel-config.git
destinations:
- server: https://kubernetes.default.svc
namespace: parcel-lab
clusterResourceWhitelist: []
namespaceResourceWhitelist:
- group: apps
kind: Deployment
- group: ""
kind: Service
المستودع تعليمي لا يعمل ولا ينشأ كائن. ليس هذا تصميم مستأجرين كاملاً أو دور Kubernetes أو إثبات عجز تطبيق آخر عن الهدف.
راجع نطاق التحكم خصوصاً
قد يتيح السماح للمصدر بإدارة مساحة الأسماء التي يعمل فيها Argo CD تعديل إعداد حساس أو كائن تحكم بحسب الأذونات والنوع. لا تمنح المستأجر ذلك لأنه يحتاج نطاق عمله. تتجاوز الموارد على مستوى العنقود حدود مساحات الأسماء المعتادة أيضا. راجع الناتج قبل توسيع المشروع. يصبح المستودع قناة سلطة لأن المتحكم يتصرف بتعليماته حتى دون تسليم الكاتب اعتماد العنقود. لذلك يجب تقييم أثر الكتابة غير المباشرة لا الاكتفاء بمن يمتلك ملف kubeconfig؛ قد تتيح سياسة المصدر قدرة مكافئة على أنواع معينة دون وصول مباشر.
قيّم شروط المصدر والهدف معاً
يشترط النموذج الكامل المصدر والنطاق وزوج النوع المقبولين ويرفض نطاقاً أو نوعاً غير مسموح. لا يحلل AppProject أو ينفذ تفويضه؛ للقواعد الفعلية أنماط ومنع وأدوار وهوية عنقود. يوضح قصور فحص المستودع وحده. يجب أن تأتي حقائق السياسة من إعداد مراجع لا تصريح داخل المستودع بثقته. لا تضمن true أهلية أي طلب حقيقي، بل تعرض نتيجة مجموعة افتراضات تعليمية، ويظل لسلطة Kubernetes والعملية المطلوبة وحالة الهدف أثر مستقل لم يُختبر.
allowed_source = "parcel-config-lab"
allowed_kinds = {("apps", "Deployment"), ("", "Service")}
def permitted(source, namespace, kind):
return source == allowed_source and namespace == "parcel-lab" and kind in allowed_kinds
print(permitted("parcel-config-lab", "parcel-lab", ("apps", "Deployment")))
print(permitted("parcel-config-lab", "argocd", ("apps", "Deployment")))
print(permitted("parcel-config-lab", "parcel-lab", ("", "Secret")))
True
False
False
يقيم نصوصاً وصفوفاً فقط ولا يقرأ مشروعاً أو يختبر RBAC أو قرار Argo CD فعلياً.
تعديل السياسة عمل مرتفع السلطة
لا يفيد المشروع المقيد دون حماية تعريفه وربط أدواره. يستطيع موسع المصدر والوجهة تغيير السلطة المفوضة. حدد مراجعة المصدر وتعديل التطبيق وإدارة المشروع ومالك الاعتماد. قد يكون الرفض دليلاً صحيحاً على تجاوز العقد. شخّص المورد والطبقة قبل تغيير الوصول واحفظ مبرر التوسع المشروع وسبب قصور البدائل الأضيق. ينبغي أن يستطيع مراجع لاحق معرفة من سمح بقدرة إضافية ولأي حاجة، بدلاً من تفسير قائمة شاملة نشأت تدريجياً لإسكات أخطاء لا يحتفظ أحد بسياقها.
الأخطاء الشائعة وإصلاحها
يؤدي رفض نوع إلى wildcard.
- لماذا يحدث؟
- عومل دليل محدد كسبب لإزالة الحد.
- كيف تصلحه؟
- حدد المورد وراجع توسعاً ضيقاً مبرراً إن لزم.
- كيف تتجنب تكراره؟
- انسب تغييرات المشروع وراجعها مستقلاً.
يُفترض أن وجهة مقيدة بمساحة أسماء تمنع كل أثر على مستوى العنقود.
- لماذا يحدث؟
- اختلط سياق مساحة الأسماء بنطاق المورد وسلطة اعتماد الوصول.
- كيف تصلحه؟
- راجع أنواع الموارد المولدة على مستوى العنقود وأذونات Kubernetes الفعلية.
- كيف تتجنب تكراره؟
- قيّم مسار المصدر والمتحكم والهدف كله.
يعدل المستأجر المشروع الذي يقيده.
- لماذا يحدث؟
- تشاركت إدارة السياسة حد ثقة المصدر المقيد.
- كيف تصلحه؟
- احم المشروع والأدوار بسلطة مستقلة مناسبة.
- كيف تتجنب تكراره؟
- راجع من يستطيع توسيع كل طبقة.
اختبر فهمك
1. المستودع مسموح وينتج Secret مستثنى. هل نوسع المشروع آلياً؟
اعرض الحل المشروح
لا. حدد المتطلب والملكية، وراجع تصميم إدارة الأسرار، وقرر هل يصرح بتغيير سياسة ضيق. لا يوافق السماح بالمصدر وحده على كل نوع يولده. وقد يكون الرفض الصحيح دليلا مفيدا.
2. لماذا تراجع argocd منفصلاً عن parcel-lab؟
اعرض الحل المشروح
قد تحتوي مساحة أسماء Argo CD إعدادات تحكم حساسة وكائنات ذات آثار أوسع. وقد يؤثر المصدر المسموح له بالنشر فيها في سلطة التسليم نفسها، لا في عبء عمله فقط. قيّم الأذونات وأنواع الموارد الفعلية، ولا تعامل كل مساحة أسماء كحد مستأجر مكافئ.
أهم ما تعلمته
- راجع المصدر والوجهة والنوع والعملية معاً.
- احم محرر السياسة مثل مسار التسليم المقيد.