
komanda 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.
Xususiyatlari:
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 , 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:
- .
- .
- .
Manba: www.habr.com
