Helmdə sirlərin avtomatik yaradılması

Helmdə sirlərin avtomatik yaradılması

Komanda Mail.ru-dan Kubernetes aaS qı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:

  • dəyərlər faylında sirri təsvir edin;
  • yerləşdirmə zamanı onu yenidən müəyyənləşdirin;
  • yerləşdirmə/pod daxilində ona istinad edin;
  • ... mənfəət!

Adətən belə görünür:

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

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.

Good Luck!

Mövzuda başqa nə oxumaq olar:

  1. Kubernetes-də avtomatik ölçmənin üç səviyyəsi və onlardan necə səmərəli istifadə etmək olar.
  2. Piratlıq ruhunda Kubernetes həyata keçirmək üçün şablon ilə.
  3. Telegram-da Kubernetes ətrafında kanalımız.

Mənbə: www.habr.com

Добавить комментарий