تولید خودکار اسرار در Helm

تولید خودکار اسرار در Helm

تیم 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 با استفاده از مقادیر values.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 برای ایجاد استقرارهای سفارشی استفاده می کند.

عملکرد جستجو

اضافه شده در Helm 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. کانال ما اطراف کوبرنتس در تلگرام.

منبع: www.habr.com

اضافه کردن نظر