Komanda Mail.ru-dan Kubernetes aaSqısa bir qeydi tərcümə etdi yeniləmə zamanı Helm sirlərini avtomatik olaraq necə yaratmaq barədə. Aşağıda məqalənin müəllifinin mətni - SaaS həllərini inkişaf etdirən Intoware şirkətinin texniki direktoru.
Konteynerlər sərindir. Əvvəlcə mən anti-konteyner idim (etiraf etməyə utanıram), amma indi bu texnologiyanın istifadəsini tam dəstəkləyirəm. Bunu oxuyursunuzsa, ümid edirəm ki, Docker dənizlərində uğurla naviqasiya etdiniz, Kubernetes-in faydalarını dərk etdiniz və Helm ilə həyatınızı çox asanlaşdırdınız.
Bununla belə, bəzi şeylərin olması lazım olduğundan daha çətindir.
Yeniləmə zamanı sirləri avtomatik olaraq necə yaratmaq olar?
Kubernetes sirri kodunuzda istifadə etmək istədiyiniz açar/dəyər cütlərini ehtiva edən resursdur. Bunlar verilənlər bazası əlaqə sətirləri, e-poçt parolları və s. ola bilər. Sirlərdən istifadə etməklə, siz kod bazasını dəyişmədən müxtəlif yerləşdirmələri asanlıqla fərdiləşdirməyə imkan verən kod və parametrlər arasında aydın bir fərq yaradırsınız.
Ümumi vəziyyət, iki modulun ümumi açardan istifadə edərək əlaqə saxlamasıdır. Klasterdən kənar heç kim bu açarı bilməməlidir, çünki o, klaster daxilində təkbətək ünsiyyət üçün nəzərdə tutulub.
Sirlər yaratmaq
Tipik olaraq, Helm-də sirr yaratmaq üçün sizə lazımdır:
values.yml-dən dəyərlərdən istifadə edən sadə Kubernetes sirri
Ancaq deyək ki, dəyərlər faylında sirrinizi göstərmək istəmirsiniz.
Yerləşdirmə quraşdırma zamanı yaradılmalı olan paylaşılan açar tələb etdikdə bir çox seçim var.
Yuxarıdakı moduldan modula rabitə nümunəsində, yerləşdirmədən kənarda sirri paylaşmaq arzuolunan deyil. Buna görə də, Helmin bir sirri birbaşa təyin etmədən avtomatik olaraq yaratmaq üçün mexanizmlərə sahib olması çox arzu edilir.
Qarmaqlar
Qarmaqlar quraşdırma prosesi zamanı kodu müəyyən yerlərdə işlətməyə imkan verir. İlk quraşdırmadan sonra icra edilməli olan konfiqurasiya işi ola bilər və ya hər hansı bir yeniləməni həyata keçirməzdən əvvəl təmizləmə aparılmalıdır.
Quraşdırma zamanı yaranan açarın əlavə edilməsi problemimizi həll etmək üçün quraşdırma öncəsi qarmaqlar idealdır. Ancaq bir məqam var: yeniləmədə bir dəfə sirri avtomatik yarada bilməzsiniz. Qarmaqlar hər yeniləmədə işləyəcək.
Əgər sirrinizi yaratmısınızsa və ilk quraşdırmanız hələ baş verməyibsə, oxumağı dayandırın, quraşdırmadan əvvəl çəngəl sizin üçün əla işləyəcək.
Ancaq sirr yeniləmənin bir hissəsidirsə (bəlkə də quraşdırma zamanı orada olmayan yeni bir xüsusiyyət), onda yalnız bir dəfə işləyən quraşdırmadan əvvəl bir çəngəl yarada bilməyəcəyiniz ayıbdır.
Funksiyalar
Helm funksiyaları yerləşdirmə skriptlərinizə müxtəlif skript elementləri əlavə etməyə imkan verir.
apiVersion: v1
kind: Secret
metadata:
name: my-super-awesome-api-key
type: Opaque
stringData:
apiKey: {{ uuidv4 | quote }} #Generate a new UUID and quote it
Bu nümunə göstərir ki, apiKey sirrinin dəyəri quraşdırma zamanı yaradılan yeni UUID olacaq.
Helm-ə xüsusi yerləşdirmələr yaratmaq üçün heyrətamiz GO şablon xüsusiyyətlərindən və Sprig-in xüsusiyyətlər kitabxanasından istifadə edən həqiqətən geniş funksiyalar kitabxanası daxildir.
Axtarış funksiyası
Helm 3.1-də əlavə edilmişdir Axtarış funksiyası, bu, mövcud yerləşdirməni tələb etməyə imkan verir və:
resursların mövcudluğunu yoxlamaq;
sonradan istifadə üçün mövcud resursun dəyərini qaytarın.
Bu imkanların hər ikisindən istifadə edərək, biz birdəfəlik, dinamik şəkildə yaradılan sirr yarada bilərik!
# 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 }}
Serverə hər dəfə yeni yeniləmə tətbiq edildikdə, Helm ya yeni gizli dəyər yaradacaq (əgər heç bir sirr yoxdursa) və ya mövcud dəyəri təkrar istifadə edəcək.