హెల్మ్‌లో రహస్యాల స్వయంచాలక ఉత్పత్తి

హెల్మ్‌లో రహస్యాల స్వయంచాలక ఉత్పత్తి

జట్టు Mail.ru నుండి Kubernetes aaS ఒక చిన్న గమనికను అనువదించారు అప్‌డేట్ చేస్తున్నప్పుడు హెల్మ్ రహస్యాలను స్వయంచాలకంగా ఎలా రూపొందించాలనే దాని గురించి. SaaS సొల్యూషన్‌లను అభివృద్ధి చేసే సంస్థ Intoware యొక్క టెక్నికల్ డైరెక్టర్ - వ్యాసం రచయిత నుండి క్రింది టెక్స్ట్ ఉంది.

కంటైనర్లు చల్లగా ఉంటాయి. మొదట నేను యాంటీ-కంటైనర్‌ని (నేను దానిని అంగీకరించడానికి సిగ్గుపడుతున్నాను), కానీ ఇప్పుడు నేను ఈ సాంకేతిక పరిజ్ఞానాన్ని ఉపయోగించడాన్ని పూర్తిగా సమర్థిస్తున్నాను. మీరు దీన్ని చదువుతున్నట్లయితే, మీరు డాకర్ సముద్రాలను విజయవంతంగా నావిగేట్ చేసారు, కుబెర్నెటెస్ యొక్క ప్రయోజనాలను గ్రహించారు మరియు హెల్మ్‌తో మీ జీవితాన్ని చాలా సులభతరం చేసారు.

అయితే, కొన్ని విషయాలు స్పష్టంగా అవసరమైన దానికంటే చాలా కష్టం.

నవీకరించేటప్పుడు స్వయంచాలకంగా రహస్యాలను ఎలా రూపొందించాలి?

కుబెర్నెట్స్ రహస్యం అనేది మీరు మీ కోడ్‌లో ఉపయోగించాలనుకుంటున్న కీ/విలువ జతలను కలిగి ఉన్న వనరు. ఇవి డేటాబేస్ కనెక్షన్ స్ట్రింగ్‌లు, ఇమెయిల్ పాస్‌వర్డ్‌లు మరియు మొదలైనవి కావచ్చు. రహస్యాలను ఉపయోగించడం ద్వారా, మీరు కోడ్ మరియు సెట్టింగ్‌ల మధ్య స్పష్టమైన విభజనను సృష్టిస్తారు, కోడ్‌బేస్‌ను మార్చకుండా విభిన్న విస్తరణలను సులభంగా అనుకూలీకరించడానికి మిమ్మల్ని అనుమతిస్తుంది.

రెండు మాడ్యూల్‌లు ఒక సాధారణ కీని ఉపయోగించి కమ్యూనికేట్ చేయడం ఒక సాధారణ పరిస్థితి. క్లస్టర్ వెలుపల ఎవరికీ ఈ కీ తెలియకూడదు, ఎందుకంటే ఇది క్లస్టర్‌లో ఒకరితో ఒకరు కమ్యూనికేషన్ కోసం ఉద్దేశించబడింది.

రహస్యాలను తయారు చేయడం

సాధారణంగా, హెల్మ్‌లో రహస్యాన్ని సృష్టించడానికి మీరు వీటిని చేయాలి:

  • విలువల ఫైల్‌లోని రహస్యాన్ని వివరించండి;
  • విస్తరణ సమయంలో దానిని పునర్నిర్వచించండి;
  • విస్తరణ/పాడ్ లోపల దానిని సూచించండి;
  • ... లాభం!

ఇది సాధారణంగా ఇలా కనిపిస్తుంది:

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

values.yml నుండి విలువలను ఉపయోగించి ఒక సాధారణ కుబెర్నెట్స్ రహస్యం

కానీ మీరు విలువల ఫైల్‌లో మీ రహస్యాన్ని పేర్కొనకూడదనుకుందాం.

విస్తరణకు షేర్డ్ కీ అవసరమైనప్పుడు అనేక ఎంపికలు ఉన్నాయి, ఇది ఇన్‌స్టాలేషన్ సమయంలో తప్పనిసరిగా రూపొందించబడాలి.

ఎగువ మాడ్యూల్-టు-మాడ్యూల్ కమ్యూనికేషన్ ఉదాహరణలో, విస్తరణ వెలుపల రహస్యాన్ని పంచుకోవడం మంచిది కాదు. అందువల్ల, హెల్మ్ నేరుగా రహస్యాన్ని పేర్కొనకుండా స్వయంచాలకంగా రూపొందించడానికి యంత్రాంగాలను కలిగి ఉండటం చాలా అవసరం.

హుక్స్

ఇన్‌స్టాలేషన్ ప్రక్రియలో నిర్దిష్ట స్థానాల్లో కోడ్‌ని అమలు చేయడానికి హుక్స్ మిమ్మల్ని అనుమతిస్తాయి. మొదటి ఇన్‌స్టాలేషన్ తర్వాత అమలు చేయాల్సిన కాన్ఫిగరేషన్ జాబ్ ఉండవచ్చు లేదా ఏదైనా అప్‌డేట్ చేసే ముందు క్లీనప్ చేయాల్సి ఉంటుంది.

ఇన్‌స్టాలేషన్ సమయంలో ఉత్పత్తి చేయబడిన కీని జోడించడంలో మా సమస్యను పరిష్కరించడానికి, ప్రీ-ఇన్‌స్టాలేషన్ హుక్స్ అనువైనవి. కానీ ఒక క్యాచ్ ఉంది: మీరు నవీకరణలో ఒకసారి రహస్యాన్ని స్వయంచాలకంగా రూపొందించలేరు. ప్రతి అప్‌డేట్‌లో హుక్స్ పని చేస్తాయి.

మీరు మీ రహస్యాన్ని రూపొందించి, మీ మొదటి ఇన్‌స్టాల్ ఇంకా జరగనట్లయితే, చదవడం ఆపివేయండి, ప్రీ-ఇన్‌స్టాల్ హుక్ మీకు బాగా పని చేస్తుంది.

అయితే రహస్యం నవీకరణలో భాగమైతే (బహుశా ఇన్‌స్టాలేషన్ సమయంలో లేని కొత్త ఫీచర్), అప్పుడు మీరు ఒకసారి మాత్రమే పనిచేసే ప్రీ-ఇన్‌స్టాలేషన్ హుక్‌ని సృష్టించలేకపోవడం సిగ్గుచేటు.

విధులు

హెల్మ్ ఫంక్షన్‌లు మీ డిప్లాయ్‌మెంట్ స్క్రిప్ట్‌లకు వివిధ స్క్రిప్టింగ్ ఎలిమెంట్‌లను జోడించడానికి మిమ్మల్ని అనుమతిస్తాయి.

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 అని ఈ ఉదాహరణ చూపిస్తుంది.

హెల్మ్ నిజంగా విస్తృతమైన ఫీచర్ లైబ్రరీని కలిగి ఉంది, ఇది అద్భుతమైన GO టెంప్లేట్ ఫీచర్‌లను మరియు స్ప్రిగ్ యొక్క ఫీచర్ లైబ్రరీని కస్టమ్ విస్తరణలను రూపొందించడానికి ప్రభావితం చేస్తుంది.

లుక్అప్ ఫంక్షన్

హెల్మ్ 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 }}

సర్వర్‌కి కొత్త అప్‌డేట్ వర్తింపజేసినప్పుడల్లా, హెల్మ్ కొత్త రహస్య విలువను ఉత్పత్తి చేస్తుంది (ఇంకా రహస్యం లేకపోతే) లేదా ఇప్పటికే ఉన్న విలువను మళ్లీ ఉపయోగిస్తుంది.

గుడ్ లక్!

అంశంపై ఇంకా ఏమి చదవాలి:

  1. కుబెర్నెట్స్‌లో మూడు స్థాయిల ఆటోస్కేలింగ్ మరియు వాటిని ఎలా సమర్థవంతంగా ఉపయోగించాలి.
  2. అమలు కోసం టెంప్లేట్‌తో పైరసీ స్ఫూర్తితో కుబెర్నెట్స్.
  3. టెలిగ్రామ్‌లో కుబెర్నెట్స్ చుట్టూ ఉన్న మా ఛానెల్.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి