Helm жүйесінде құпияларды автоматты түрде жасау

Helm жүйесінде құпияларды автоматты түрде жасау

команда Mail.ru сайтынан Kubernetes aaS қысқаша жазбаны аударды жаңарту кезінде Helm құпияларын автоматты түрде жасау жолы туралы. Төменде мақала авторының мәтіні - SaaS шешімдерін әзірлейтін Intoware компаниясының техникалық директоры.

Контейнерлер салқын. Басында мен антиконтейнер болдым (мойындауға ұяламын), бірақ қазір бұл технологияны қолдануды толық қолдаймын. Егер сіз мұны оқып жатсаңыз, сіз Докер теңіздерін сәтті шарлап, Кубернетестің артықшылықтарын түсіндіңіз және Helm көмегімен өміріңізді әлдеқайда жеңілдеттіңіз деп үміттенеміз.

Дегенмен, кейбір нәрселер қажет болғаннан қиынырақ екені анық.

Жаңарту кезінде құпияларды автоматты түрде қалай жасауға болады?

Kubernetes құпиясы - кодта пайдаланғыңыз келетін кілт/мән жұптарын қамтитын ресурс. Бұл дерекқорға қосылу жолдары, электрондық пошта құпия сөздері және т.б. болуы мүмкін. Құпияларды пайдалану арқылы сіз код базасын өзгертпей әртүрлі орналастыруларды оңай теңшеуге мүмкіндік беретін код пен параметрлер арасында нақты бөлу жасайсыз.

Жалпы жағдай - екі модульдің ортақ кілт арқылы байланысуы керек. Бұл кілтті кластерден тыс ешкім білмеуі керек, себебі ол кластер ішіндегі бір-бірін байланысуға арналған.

Құпиялар жасау

Әдетте Helm-де құпияны жасау үшін сізге қажет:

  • мәндер файлындағы құпияны сипаттаңыз;
  • оны орналастыру кезінде қайта анықтау;
  • оны орналастыру/подтың ішінде қараңыз;
  • ... пайда!

Ол әдетте келесідей көрінеді:

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

values.yml мәндерін пайдаланатын қарапайым Кубернетес құпиясы

Бірақ мәндер файлында құпияңызды көрсеткіңіз келмейді делік.

Орналастыру үшін орнату кезінде жасалуы керек ортақ кілт қажет болған кезде көптеген опциялар бар.

Жоғарыдағы модульден модульге байланыс мысалында құпияны орналастырудан тыс бөлісу қажет емес. Сондықтан Helm-де құпияны тікелей көрсетпей-ақ автоматты түрде жасау механизмдері болғаны абзал.

Ілмектер

Ілмектер орнату процесі кезінде белгілі бір орындарда кодты іске қосуға мүмкіндік береді. Бірінші орнатудан кейін іске қосылуды қажет ететін конфигурация тапсырмасы болуы мүмкін немесе кез келген жаңартуды орындамас бұрын тазалауды орындау қажет болуы мүмкін.

Орнату кезінде жасалған кілтті қосу мәселесін шешу үшін алдын ала орнату ілмектері өте қолайлы. Бірақ бір нәрсе бар: жаңарту кезінде құпияны бір рет автоматты түрде жасай алмайсыз. Ілмектер әрбір жаңартуда жұмыс істейді.

Құпияңызды жасаған болсаңыз және бірінші орнатуыңыз әлі орындалмаса, оқуды тоқтатыңыз, алдын ала орнату ілгегі сіз үшін тамаша жұмыс істейді.

Бірақ егер құпия жаңартудың бөлігі болса (орнату кезінде болмаған жаңа мүмкіндік болуы мүмкін), онда тек бір рет жұмыс істейтін алдын ала орнату ілмегін жасай алмайтыныңыз өкінішті.

Функциялар

Helm функциялары орналастыру сценарийлеріне әртүрлі сценарий элементтерін қосуға мүмкіндік береді.

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

Бұл мысал apiKey құпиясының мәні орнату кезінде жасалған жаңа UUID болатынын көрсетеді.

Helm таңғажайып GO үлгі мүмкіндіктерін және теңшелетін орналастыруларды жасау үшін Sprig мүмкіндіктері кітапханасын пайдаланатын шынымен кең мүмкіндіктер кітапханасын қамтиды.

Іздеу функциясы

Helm 3.1-де қосылды Іздеу функциясы, ол бұрыннан бар орналастыруды сұрауға мүмкіндік береді және:

  • ресурстардың болуын тексеру;
  • кейін пайдалану үшін бар ресурстың мәнін қайтарыңыз.

Осы мүмкіндіктердің екеуін де пайдалана отырып, біз бір реттік, динамикалық түрде жасалған құпияны жасай аламыз!

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

Серверге жаңа жаңарту қолданылған сайын, Helm жаңа құпия мәнді жасайды (егер әлі құпия болмаса) немесе бар мәнді қайта пайдаланады.

Сәттілік тілейміз!

Тақырып бойынша тағы не оқу керек:

  1. Kubernetes-тегі автомасштабтаудың үш деңгейі және оларды қалай тиімді пайдалану керек.
  2. Жүзеге асыруға арналған шаблонмен пираттық рухтағы Кубернетес.
  3. Telegram-дағы Kubernetes айналасындағы арнамыз.

Ақпарат көзі: www.habr.com

пікір қалдыру