හෙල්ම් හි රහස් ස්වයංක්‍රීයව උත්පාදනය කිරීම

හෙල්ම් හි රහස් ස්වයංක්‍රීයව උත්පාදනය කිරීම

කණ්ඩායම Mail.ru වෙතින් Kubernetes aaS කෙටි සටහනක් පරිවර්තනය කළා යාවත්කාලීන කිරීමේදී හෙල්ම් රහස් ස්වයංක්‍රීයව උත්පාදනය කරන්නේ කෙසේද යන්න ගැන. පහත දැක්වෙන්නේ ලිපියේ කතුවරයාගේ පෙළකි - SaaS විසඳුම් සංවර්ධනය කරන සමාගමක් වන Intoware හි තාක්ෂණික අධ්‍යක්ෂ.

බහාලුම් සිසිල් ය. මුලදී මම කන්ටේනර් විරෝධී (එය පිළිගැනීමට මම ලැජ්ජා වෙමි), නමුත් දැන් මම මෙම තාක්ෂණය භාවිතා කිරීමට සම්පූර්ණයෙන්ම සහාය දෙමි. ඔබ මෙය කියවන්නේ නම්, ඔබ ඩොකර් මුහුදේ සාර්ථකව සැරිසැරීමට බලාපොරොත්තු වන අතර, Kubernetes හි ප්‍රතිලාභ අවබෝධ කර ගෙන, Helm සමඟින් ඔබේ ජීවිතය වඩාත් පහසු කර ඇත.

කෙසේ වෙතත්, සමහර දේවල් පැහැදිලිවම අවශ්‍ය ප්‍රමාණයට වඩා දුෂ්කර ය.

යාවත්කාලීන කිරීමේදී රහස් ස්වයංක්‍රීයව උත්පාදනය කරන්නේ කෙසේද?

Kubernetes රහසක් යනු ඔබට ඔබේ කේතයේ භාවිතා කිරීමට අවශ්‍ය යතුරු/අගය යුගල අඩංගු සම්පතකි. මේවා දත්ත සමුදා සම්බන්ධතා නූල්, ඊමේල් මුරපද සහ යනාදිය විය හැකිය. රහස් භාවිතා කිරීමෙන්, ඔබ කේතය සහ සැකසුම් අතර පැහැදිලි වෙන්වීමක් නිර්මාණය කරයි, කේත පදනම වෙනස් නොකර විවිධ යෙදවුම් පහසුවෙන් අභිරුචිකරණය කිරීමට ඔබට ඉඩ සලසයි.

පොදු තත්වයක් වන්නේ මොඩියුල දෙකක් පොදු යතුරක් භාවිතයෙන් සන්නිවේදනය කළ යුතු විටය. පොකුර තුළ එකින් එක සන්නිවේදනය සඳහා අදහස් කරන බැවින්, පොකුරෙන් පිටත කිසිවකු මෙම යතුර දැන නොගත යුතුය.

රහස් හදනවා

සාමාන්‍යයෙන්, හෙල්ම් හි රහසක් නිර්මාණය කිරීමට ඔබට අවශ්‍ය වන්නේ:

  • අගයන් ගොනුවේ රහස විස්තර කරන්න;
  • යෙදවීමේදී එය නැවත අර්ථ දැක්වීම;
  • යෙදවීම/පොඩ් ඇතුළත එය යොමු කරන්න;
  • ... ලාභයක්!

එය සාමාන්යයෙන් මේ වගේ දෙයක් පෙනේ:

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

values.yml වෙතින් අගයන් භාවිතා කරන සරල Kubernetes රහසක්

නමුත් අගයන් ගොනුවේ ඔබේ රහස සඳහන් කිරීමට ඔබට අවශ්‍ය නැතැයි කියමු.

යෙදවීමට හවුල් යතුරක් අවශ්‍ය වූ විට බොහෝ විකල්ප ඇත, එය ස්ථාපනය අතරතුර ජනනය කළ යුතුය.

ඉහත module-to-module සන්නිවේදන උදාහරණයේ දී, යෙදවීමෙන් පිටත රහස බෙදා ගැනීම යෝග්‍ය නොවේ. එමනිසා, රහසක් කෙලින්ම සඳහන් නොකර ස්වයංක්‍රීයව උත්පාදනය කිරීමට හෙල්ම් සතුව යාන්ත්‍රණ තිබීම ඉතා යෝග්‍ය වේ.

කොකු

ස්ථාපන ක්‍රියාවලියේදී විශේෂිත ස්ථානවල කේතය ධාවනය කිරීමට කොකු ඔබට ඉඩ සලසයි. පළමු ස්ථාපනයෙන් පසුව ක්‍රියාත්මක කිරීමට අවශ්‍ය වින්‍යාස කිරීමේ කාර්යයක් තිබිය හැකිය, නැතහොත් කිසියම් යාවත්කාලීන කිරීමක් සිදු කිරීමට පෙර පිරිසිදු කිරීමක් සිදු කළ යුතුය.

ස්ථාපනය අතරතුර උත්පාදනය කරන ලද යතුරක් එකතු කිරීමේ අපගේ ගැටළුව විසඳීම සඳහා, පෙර-ස්ථාපන කොකු සුදුසු වේ. නමුත් අල්ලා ගැනීමක් තිබේ: යාවත්කාලීන කිරීමකදී ඔබට රහස ස්වයංක්‍රීයව උත්පාදනය කළ නොහැක. සෑම යාවත්කාලීනයකම කොකු වැඩ කරනු ඇත.

ඔබ ඔබේ රහස ජනනය කර ඇත්නම් සහ ඔබේ පළමු ස්ථාපනය තවමත් සිදු වී නොමැති නම්, කියවීම නවත්වන්න, පෙර-ස්ථාපන කොක්කය ඔබට හොඳින් ක්‍රියා කරයි.

නමුත් රහස යාවත්කාලීනයක කොටසක් නම් (සමහර විට ස්ථාපනය අතරතුර නොතිබූ නව අංගයක්), එවිට ඔබට එක් වරක් පමණක් ක්‍රියා කරන පෙර-ස්ථාපන කොක්කක් සෑදිය නොහැකි වීම ලැජ්ජාවකි.

කාර්යයන්

හෙල්ම් ක්‍රියාකාරකම් මඟින් ඔබගේ යෙදවුම් ස්ක්‍රිප්ට් වෙත විවිධ ස්ක්‍රිප්ටින් මූලද්‍රව්‍ය එක් කිරීමට ඉඩ සලසයි.

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 හි විශේෂාංග පුස්තකාලය අභිරුචි යෙදවීම් නිර්මාණය කිරීමට භාවිතා කරන සැබවින්ම පුළුල් විශේෂාංග පුස්තකාලයක් ඇතුළත් වේ.

සෙවීමේ කාර්යය

හෙල්ම් 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. ක්‍රියාත්මක කිරීම සඳහා අච්චුවක් සමඟ මුහුදු කොල්ලකෑමේ ආත්මය තුළ Kubernetes.
  3. Telegram හි Kubernetes අවට අපගේ නාලිකාව.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න