‫حسنًا ، والآن بعد أن مررنا بالأسرار والميزات ، وكيف تعمل وكل ذلك ، فلنلقِ نظرة على
‫بعض الإجراءات العملية.
‫لذا ، ما لدي هنا هو ، لقد تم إعداد سربنا المكون من 3 عقد كما كان من قبل.
‫أنا في دليل أسرار
‫نموذج 1 ستراه في الريبو.
‫وكل ما لدي هو ملف نصي واحد. وفي هذا الملف النصي هو مجرد اسم مستخدم بسيط ، ولا حتى كلمة مرور
‫في الواقع.
‫هناك طريقتان يمكننا في الواقع إنشاء سر داخل Swarm.
‫وأحدهما هو إعطائه ملفًا ، والآخر هو تمرير قيمة في سطر الأوامر.
‫لذا ، دعنا نستخدم الملف أولاً. خلق سر عامل ميناء. وبعد ذلك أحتاج إلى تسميته في قاعدة البيانات السرية.
‫وسأسميها مستخدم psql.
‫من الواضح أنه لا يجب أن يكون نفس اسم الملف. لكنني سأسميها كذلك.
‫وثم... يبصق المعرف مرة أخرى ، كما يفعل مع الكائنات الأخرى. ويتيح إنشاء واحد آخر. دعونا في الواقع نضع كلمة
‫المرور.
‫وهذه المرة سنقوم بترديدها من سطر الأوامر.
‫إذا رأيت ما أفعله ، فأنا أكتب بالفعل كلمة مرور في سطر الأوامر باستخدام echo
‫، وأكررها في أمر الإنشاء.
‫ولاحظ الشرطة في النهاية ، لأن هذا يخبر الأمر بالقراءة من الإدخال القياسي. وهو ما نعطيه بأمر
‫echo.
‫الآن ، يجب أن أقول إن كلاهما له عيوب.
‫الأول ، أنك تقوم بالفعل بتخزين كلمة المرور على القرص الصلب للخادم على المضيف.
‫ونحن حقا لا نريد أن نفعل ذلك.
‫لذلك ، ربما ستستخدم واجهة برمجة التطبيقات البعيدة من سطر الأوامر المحلي هذا على جهازك. ثم قم بتمرير الملفات بهذه
‫الطريقة.
‫وفي الثانية ، يتم الدخول في تاريخ ملف Bash الخاص بنا لمستخدم الجذر الخاص بنا.
‫لذلك من الناحية الفنية ، إذا تمكن شخص ما من الوصول إلى الجذر ، فيمكنه بالفعل إخراج كلمة المرور هذه.
‫عندما تتعامل مع أنظمة الإنتاج الخاصة بك ، ستحتاج إلى إلقاء نظرة على طرق مختلفة للالتفاف
‫حول هذين الأمرين المحتملين للأمان.
‫إذن ، ما لدينا هنا هو ... الآن ، إذا كنت أفعل أسرار عامل الميناء ls ، يمكنك أن ترى أن لديهما هناك.
‫الآن ، يمكنني في الواقع فحصها ، لكنني لن أرى كلمات المرور أو السر الفعلي.
‫لذا ، اسمحوا لي فقط أن أقوم بالمستخدم.
‫لن يزودنا بالمعلومات ، صحيح. لأنه إذا كان الحصول على المعلومات بهذه السهولة
‫، فلن يكون هذا السر حقًا.
‫حق؟
‫لذا ، الهدف هنا ، أنه بمجرد وضع السر في النظام ، يتم تخزينه في قاعدة البيانات. والشيء الوحيد الذي سيكون له حق الوصول
‫إلى الأسرار التي تم فك تشفيرها هو الحاويات والخدمات التي نخصصها
‫لها.
‫لذلك دعونا نفعل ذلك الآن.
‫سأقوم بإنشاء خدمة يدويًا.
‫إنشاء خدمة عامل ميناء. سأسميها psql. وسنقوم بتحديد سر ذلك. في الأساس ، نخبر أمر الإنشاء هذا
‫، خذ هذا السر المسمى بهذا الاسم المعين ...
‫يمكنني أيضًا استخدام معرف السر ... وتخصيصها لهذه الخدمة ، بحيث ترى جميع الحاويات
‫في هذه الخدمة هذا السر.
‫حسنا.
‫ثم أدخل المستخدم هناك ، وبعد ذلك يجب أن أفعل ذلك مرة أخرى لكلمة المرور.
‫تمام.
‫لذا فإن هذا يرسم أسرار الخدمة ، بحيث تظهر كملفات داخل الحاوية.
‫لكنها لا تخبر قاعدة بيانات postgres التي ننشئها من هذه الصورة
‫عن كيفية استخدام تلك الأسرار.
‫لذلك ، عادة ، نحتاج إلى القيام بشيء ما مع تكوين الصورة.
‫وفي هذه الحالة ، استقرت الصور الرسمية من Docker Hub على معيار
‫حيث تستخدم متغيرات البيئة. ولكن ، بدلاً من تمرير شيء مثل كلمة مرور postgres ، سيكون من الصعب استخدامه
‫مع ملف.
‫سيتعين علينا في الواقع ، مثل ، إخراج الملف إلى متغير البيئة وهذا أمر مزعج
‫قليلاً.
‫لذلك ، لديهم المعيار حيث ، إذا حددت ملفًا ... وسيكون هذا هو الطريق ... لذلك سيكون تشغيل الأسرار ، ثم
‫الاسم ، أليس كذلك؟ لذا بسكل تمر اسم السر.
‫إذا قمت بذلك ، فهذا في الواقع في بدء تشغيل الصورة التي ستبحث عن متغير البيئة هذا الذي يتم
‫ملؤه.
‫وإذا كان الأمر كذلك ، فسوف يسحب هذا الملف ويخزنه في متغير البيئة. المحتويات الفعلية لهذا
‫الملف.
‫هذه طريقة سهلة حقًا لاستهلاك هذه الأسرار الموجودة في الملفات.
‫لكن هذا يعني أن الصور التي تستخدمها تحتاج إلى هذا المعيار في مكانه.
‫يمكننا أيضًا أن نفعل الشيء نفسه للمستخدم.
‫نأمل أن يكون هذا منطقيًا بالنسبة لك. عندما أقوم بإنشاء الخدمة
‫، فإنها ستفعل الشيء المعتاد الذي تفعله عندما تصدر طلب جدولة لحاوية جديدة.
‫ستقوم بإنشاء قاعدة بيانات Postgres واحدة وستقوم بتمريرها
‫متغيرات البيئة لمواقع هذين السريين.
‫وبعد ذلك سيتم رسم الخريطة ، في tempfs ، في الواقع سيتم تعيين ما يشبه الملفات.
‫لكن مرة أخرى ، إنه في الحقيقة مجرد نظام ملفات RAM أو tmpfs.
‫دعنا نذهب ونرى ما يمكننا رؤيته هناك.
‫لذلك ، أقوم بخدمة عامل إرساء psql ، وهذا يجب أن يخبرنا بالعقدة التي تعمل عليها.
‫حسنًا ، إنه يعمل على هذه العقدة.
‫لنقم بإجراء تنفيذي لنرى ما يمكننا رؤيته داخل الحاوية.
‫تنفيذي عامل ميناء.
‫ثم اسم الحاوية المحدد لتلك الخدمة ، ثم bash.
‫حسنا.
‫الآن يجب أن نكون قادرين على إجراء ls على أسرار التشغيل ، وسترى أننا حصلنا على الملفين هناك.
‫وإذا قمت بعمل قطة على مستخدم psql ، فإننا نرى القيمة. انها عملت.
‫وإذا نظرنا إلى السجلات الخاصة بهذا psql ، فإننا نعلم بالفعل أنه يعمل. لأنه إذا لم يحدث ... إذا لم يكن لديها هذه الملفات ، فستستمر
‫قاعدة البيانات الفعلية في إعادة إنشاء نفسها ، ولن تكون قادرة على العمل لأنها لا تحتوي
‫على كلمة مرور واسم مستخدم لإنشاء قاعدة البيانات.
‫إذا قمت بعمل docker service ps مرة أخرى ، فإن ما ستراه إذا لم يكن يعمل بشكل صحيح في سيناريو قاعدة البيانات ،
‫هو أن قاعدة البيانات ستفشل بالفعل. وستستمر في إعادة التشغيل وستلاحظ إنشاء
‫حاويات جديدة هنا.
‫والآن بعد أن قمنا بتعيينه بالفعل هناك ، يمكننا بالفعل استخدام تحديث خدمة عامل
‫الإرساء لإزالة السر. لذلك ، تحديث خدمة عامل الإرساء - Secret-rm.
‫هناك أيضًا إضافة سرية. لكن إذا أزلت أحد هذه الأسرار ، فما سيحدث
‫بالفعل هو أنه سيعيد نشر الحاوية. لأن الأسرار جزء من التصميم الثابت للخدمات.
‫إذا كان يجب تغيير أي شيء في الحاوية للخدمة ، فلن تدخل الخدمة وتغير
‫شيئًا ما داخل الحاوية. سيؤدي في الواقع إلى إيقاف الحاوية وإعادة نشر حاوية جديدة.
‫من الواضح أن هذا ليس مثاليًا لقواعد البيانات. لذلك علينا أن نتوصل إلى خطة مختلفة لكيفية
‫تحديث كلمات مرور قاعدة البيانات.
‫وهذا شيء يمكننا التحدث عنه لاحقًا.
‫في الوقت الحالي ، أريدك فقط أن تعرف أنه يمكنك إزالتها وإضافة أخرى إلى خدمة موجودة.
‫ستقوم فقط بإعادة إنشاء الحاوية عند القيام بذلك.