Helmda sirlarni avtomatik yaratish

Helmda sirlarni avtomatik yaratish

komanda Mail.ru dan Kubernetes aaS qisqacha eslatmani tarjima qildi yangilashda Helm sirlarini avtomatik ravishda qanday yaratish haqida. Quyida maqola muallifi - SaaS yechimlarini ishlab chiquvchi Intoware kompaniyasining texnik direktori matni keltirilgan.

Konteynerlar salqin. Avvaliga men anti-konteyner edim (men buni tan olishdan uyalaman), lekin hozir men ushbu texnologiyadan foydalanishni to'liq qo'llab-quvvatlayman. Agar siz buni o'qiyotgan bo'lsangiz, umid qilamanki, siz Docker dengizlarida muvaffaqiyatli sayohat qildingiz, Kubernetesning afzalliklarini tushundingiz va Helm bilan hayotingizni ancha osonlashtirdingiz.

Biroq, ba'zi narsalar kerak bo'lgandan ko'ra qiyinroq.

Yangilashda qanday qilib avtomatik ravishda sirlarni yaratish mumkin?

Kubernetes siri - bu kodingizda foydalanmoqchi bo'lgan kalit/qiymat juftlarini o'z ichiga olgan manba. Bu ma'lumotlar bazasi ulanish satrlari, elektron pochta parollari va boshqalar bo'lishi mumkin. Sirlardan foydalanib, siz kodlar va sozlamalar o'rtasida aniq ajratishni yaratasiz, bu kod bazasini o'zgartirmasdan turli joylashtirishlarni sozlashni osonlashtiradi.

Umumiy holat - ikkita modul umumiy kalit yordamida bog'lanishi kerak. Klasterdan tashqarida hech kim bu kalitni bilmasligi kerak, chunki u klaster ichida birma-bir muloqot qilish uchun mo'ljallangan.

Sirlar qilish

Odatda, Helm-da sir yaratish uchun sizga kerak bo'ladi:

  • qiymatlar faylidagi sirni tavsiflang;
  • joylashtirish vaqtida uni qayta belgilang;
  • joylashtirish/pod ichida unga murojaat qiling;
  • ... foyda!

Odatda shunday ko'rinadi:

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

values.yml dan qiymatlardan foydalangan holda oddiy Kubernetes siri

Aytaylik, siz qiymatlar faylida siringizni ko'rsatishni xohlamaysiz.

Joylashtirish uchun umumiy kalit kerak bo'lganda ko'plab variantlar mavjud, ular o'rnatish vaqtida yaratilishi kerak.

Yuqoridagi moduldan modulga aloqa misolida, tarqatishdan tashqarida sirni baham ko'rish istalmagan. Shuning uchun Helm-da sirni to'g'ridan-to'g'ri ko'rsatmasdan avtomatik ravishda yaratish mexanizmlari mavjudligi juda ma'qul.

Ilgaklar

Ilgaklar o'rnatish jarayonida ma'lum joylarda kodni ishlatishga imkon beradi. Birinchi o'rnatishdan keyin bajarilishi kerak bo'lgan konfiguratsiya ishi bo'lishi mumkin yoki har qanday yangilanishni amalga oshirishdan oldin tozalashni amalga oshirish kerak bo'lishi mumkin.

O'rnatish paytida yaratilgan kalitni qo'shish muammomizni hal qilish uchun o'rnatishdan oldingi ilgaklar idealdir. Ammo bir narsa bor: yangilanishda siz avtomatik ravishda sirni bir marta yarata olmaysiz. Kancalar har bir yangilanishda ishlaydi.

Agar siz o'z siringizni yaratgan bo'lsangiz va birinchi o'rnatishingiz hali amalga oshmagan bo'lsa, keyin o'qishni to'xtating, oldindan o'rnatish kancasi siz uchun juda yaxshi ishlaydi.

Ammo agar sir yangilanishning bir qismi bo'lsa (ehtimol, o'rnatish vaqtida mavjud bo'lmagan yangi xususiyat), unda siz faqat bir marta ishlaydigan oldindan o'rnatish kancasini yarata olmasligingiz juda achinarli.

Vazifalar

Helm funktsiyalari o'rnatish skriptlariga turli xil skript elementlarini qo'shish imkonini beradi.

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

Ushbu misol apiKey sirining qiymati o'rnatish vaqtida yaratilgan yangi UUID bo'lishini ko'rsatadi.

Helm o'z ichiga chinakam keng imkoniyatlar kutubxonasini o'z ichiga oladi, u ajoyib GO shablon xususiyatlaridan va Sprig-ning maxsus joylashtirishlarni yaratish uchun xususiyatlar kutubxonasidan foydalanadi.

Qidiruv funksiyasi

Helm 3.1 da qo'shilgan Qidiruv funksiyasi, bu sizga mavjud joylashtirishni talab qilish imkonini beradi va:

  • resurslarning mavjudligini tekshirish;
  • keyinchalik foydalanish uchun mavjud resurs qiymatini qaytaring.

Ushbu ikkala imkoniyatlardan foydalanib, biz bir martalik, dinamik ravishda yaratilgan sirni yaratishimiz mumkin!

# 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 }}

Har safar serverga yangi yangilanish qo'llanilganda, Helm yangi maxfiy qiymat yaratadi (agar hali hech qanday sir bo'lmasa) yoki mavjud qiymatdan qayta foydalanadi.

Omad tilaymiz!

Mavzu bo'yicha yana nimani o'qish kerak:

  1. Kubernetes-da avtomatik o'lchashning uchta darajasi va ulardan qanday samarali foydalanish.
  2. Kubernetes qaroqchilik ruhida amalga oshirish shabloniga ega.
  3. Telegramdagi Kubernetes atrofidagi kanalimiz.

Manba: www.habr.com

a Izoh qo'shish