komanda Mail.ru dan Kubernetes aaSqisqacha 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:
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.