التوليد التلقائي للأسرار في هيلم

التوليد التلقائي للأسرار في هيلم

فريق Kubernetes aaS من Mail.ru ترجمة ملاحظة قصيرة حول كيفية إنشاء أسرار Helm تلقائيًا عند التحديث. فيما يلي نص من مؤلف المقال - المدير الفني لشركة Intoware، وهي شركة تعمل على تطوير حلول SaaS.

الحاويات باردة. في البداية كنت مناهضًا للحاويات (أشعر بالحرج من الاعتراف بذلك)، لكنني الآن أؤيد تمامًا استخدام هذه التكنولوجيا. إذا كنت تقرأ هذا، نأمل أن تكون قد أبحرت بنجاح في بحار Docker، وأدركت فوائد Kubernetes، وجعلت حياتك أسهل كثيرًا مع Helm.

ومع ذلك، فمن الواضح أن بعض الأمور أكثر صعوبة مما ينبغي.

كيفية توليد الأسرار تلقائيا عند التحديث؟

سر Kubernetes هو مورد يحتوي على أزواج المفاتيح/القيمة التي تريد استخدامها في التعليمات البرمجية الخاصة بك. يمكن أن تكون هذه سلاسل اتصال قاعدة البيانات وكلمات مرور البريد الإلكتروني وما إلى ذلك. باستخدام الأسرار، يمكنك إنشاء فصل واضح بين التعليمات البرمجية والإعدادات، مما يسمح لك بتخصيص عمليات نشر مختلفة بسهولة دون تغيير قاعدة التعليمات البرمجية.

الموقف الشائع هو عندما يجب أن تتواصل وحدتان باستخدام مفتاح مشترك. لا ينبغي لأي شخص خارج المجموعة أن يعرف هذا المفتاح، لأنه مخصص للتواصل بين شخصين داخل المجموعة.

صنع الأسرار

عادة، لإنشاء سر في Helm تحتاج إلى:

  • وصف السر في ملف القيم؛
  • إعادة تعريفه أثناء النشر؛
  • الرجوع إليه داخل النشر/الجراب؛
  • ... ربح!

عادة ما يبدو شيء من هذا القبيل:

apiVersion: v1
kind: Secret
metadata:
  name: my-super-awesome-api-key
type: Opaque
stringData:
  apiKey: {{ .Values.MyApiKeySecret | quote }}

سر Kubernetes بسيط باستخدام القيم من value.yml

لكن لنفترض أنك لا تريد تحديد سرك في ملف القيم.

هناك العديد من الخيارات عندما يتطلب النشر مفتاحًا مشتركًا، والذي يجب إنشاؤه أثناء التثبيت.

في مثال الاتصال من وحدة إلى وحدة أعلاه، ليس من المستحسن مشاركة السر خارج عملية النشر. لذلك، من المرغوب جدًا أن يكون لدى Helm آليات لتوليد السر تلقائيًا دون الحاجة إلى تحديده مباشرةً.

خطافات

تسمح لك الخطافات بتشغيل التعليمات البرمجية في مواقع محددة أثناء عملية التثبيت. قد تكون هناك مهمة تكوين يجب تشغيلها بعد التثبيت الأول، أو ربما يلزم إجراء عملية تنظيف قبل إجراء أي تحديث.

لحل مشكلة إضافة مفتاح تم إنشاؤه أثناء التثبيت، تعتبر خطافات التثبيت المسبق مثالية. ولكن هناك مشكلة: لا يمكنك إنشاء السر تلقائيًا مرة واحدة عند التحديث. ستعمل الخطافات على كل تحديث.

إذا قمت بإنشاء سرك ولم يتم التثبيت الأول بعد، فتوقف عن القراءة، فخطاف التثبيت المسبق سيعمل بشكل رائع بالنسبة لك.

ولكن إذا كان السر جزءًا من التحديث (ربما ميزة جديدة لم تكن موجودة أثناء التثبيت)، فمن المؤسف أنه لا يمكنك إنشاء رابط ما قبل التثبيت الذي يعمل مرة واحدة فقط.

وظائف

تتيح لك وظائف Helm إضافة عناصر برمجة نصية متنوعة إلى نصوص النشر الخاصة بك.

apiVersion: v1
kind: Secret
metadata:
  name: my-super-awesome-api-key
type: Opaque
stringData:
  apiKey: {{ uuidv4 | quote }} #Generate a new UUID and quote it

يوضح هذا المثال أن قيمة سر apiKey ستكون UUID الجديد الذي تم إنشاؤه أثناء التثبيت.

يتضمن Helm مكتبة ميزات واسعة النطاق تستفيد من ميزات قالب GO المذهلة ومكتبة ميزات Sprig لإنشاء عمليات نشر مخصصة.

وظيفة البحث

تمت إضافته في هيلم 3.1 وظيفة البحث، والذي يسمح لك بطلب النشر الحالي و:

  • التحقق من وجود الموارد؛
  • إرجاع قيمة المورد الموجود لاستخدامه لاحقًا.

باستخدام هاتين الإمكانيتين، يمكننا إنشاء سر يتم إنشاؤه ديناميكيًا لمرة واحدة!

# 1. Запросить существование секрета и вернуть в переменной $secret
{{- $secret := (lookup "v1" "Secret" .Release.Namespace "some-awesome-secret" -}}
apiVersion: v1
kind: Secret
metadata:
  name: some-awesome-secret
type: Opaque

# 2. Если секрет существует, взять его значение как apiKey (секрет использует кодирование Base64, так что используйте ключ "data")
{{ if $secret -}}
data:
  apiKey: {{ $secret.data.apiKey }}

# 3. Если секрет не существует — создать его (в этот раз используйте "stringData", так как будет обычное значение)!
{{ else -}}
stringData:
  apiKey: {{ uuidv4 | quote }}
{{ end }}

كلما تم تطبيق تحديث جديد على الخادم، سيقوم Helm إما بإنشاء قيمة سر جديدة (إذا لم يكن هناك سر بعد) أو إعادة استخدام القيمة الحالية.

حظا سعيدا!

ماذا تقرأ عن الموضوع:

  1. ثلاثة مستويات من القياس التلقائي في Kubernetes وكيفية استخدامها بفعالية.
  2. Kubernetes بروح القرصنة مع نموذج للتنفيذ.
  3. قناتنا حول Kubernetes في Telegram.

المصدر: www.habr.com

إضافة تعليق