Cenhedlaeth awtomatig o gyfrinachau yn Helm

Cenhedlaeth awtomatig o gyfrinachau yn Helm

Tîm Kubernetes aaS o Mail.ru cyfieithu nodyn byr am sut i gynhyrchu cyfrinachau Helm yn awtomatig wrth ddiweddaru. Mae'r canlynol yn destun gan awdur yr erthygl - cyfarwyddwr technegol Intoware, cwmni sy'n datblygu atebion SaaS.

Mae cynwysyddion yn oer. Ar y dechrau roeddwn i'n wrth-gynhwysydd (mae'n embaras i mi gyfaddef), ond nawr rydw i'n llwyr gefnogi'r defnydd o'r dechnoleg hon. Os ydych chi'n darllen hwn, gobeithio eich bod chi wedi mordwyo moroedd Docker yn llwyddiannus, wedi sylweddoli manteision Kubernetes, ac wedi gwneud eich bywyd yn llawer haws gyda Helm.

Fodd bynnag, mae rhai pethau yn amlwg yn anoddach nag sydd angen iddynt fod.

Sut i gynhyrchu cyfrinachau yn awtomatig wrth ddiweddaru?

Mae cyfrinach Kubernetes yn adnodd sy'n cynnwys parau allwedd/gwerth yr ydych am eu defnyddio yn eich cod. Gallai'r rhain fod yn llinynnau cysylltiad cronfa ddata, cyfrineiriau e-bost, ac ati. Trwy ddefnyddio cyfrinachau, rydych chi'n creu gwahaniad clir rhwng cod a gosodiadau, sy'n eich galluogi i addasu gwahanol leoliadau yn hawdd heb newid y cod sylfaen.

Sefyllfa gyffredin yw pan fydd yn rhaid i ddau fodiwl gyfathrebu gan ddefnyddio allwedd gyffredin. Ni ddylai unrhyw un o'r tu allan i'r clwstwr wybod yr allwedd hon, gan ei fod wedi'i fwriadu ar gyfer cyfathrebu un-i-un o fewn y clwstwr.

Gwneud cyfrinachau

Yn nodweddiadol, i greu cyfrinach yn Helm mae angen i chi:

  • disgrifio'r gyfrinach yn y ffeil gwerthoedd;
  • ei ailddiffinio yn ystod y defnydd;
  • cyfeirio ato y tu mewn i'r lleoliad/pod;
  • ... elw!

Fel arfer mae'n edrych yn rhywbeth fel hyn:

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

Cyfrinach Kubernetes syml gan ddefnyddio gwerthoedd o gwerthoedd.yml

Ond gadewch i ni ddweud nad ydych chi am nodi'ch cyfrinach yn y ffeil gwerthoedd.

Mae yna lawer o opsiynau pan fydd angen allwedd a rennir ar gyfer ei ddefnyddio, y mae'n rhaid ei gynhyrchu yn ystod y gosodiad.

Yn yr enghraifft cyfathrebu modiwl-i-modiwl uchod, nid yw'n ddymunol rhannu'r gyfrinach y tu allan i'r lleoliad. Felly, mae'n ddymunol iawn bod gan Helm fecanweithiau i gynhyrchu cyfrinach yn awtomatig heb orfod ei nodi'n uniongyrchol.

Bachau

Mae bachau yn caniatáu ichi redeg cod mewn lleoliadau penodol yn ystod y broses osod. Efallai y bydd swydd ffurfweddu y mae angen ei rhedeg ar ôl y gosodiad cyntaf, neu efallai y bydd angen glanhau cyn perfformio unrhyw ddiweddariad.

Er mwyn datrys ein problem o ychwanegu allwedd a gynhyrchir yn ystod y gosodiad, mae bachau cyn gosod yn ddelfrydol. Ond mae yna dal: ni allwch gynhyrchu'r gyfrinach yn awtomatig unwaith ar ddiweddariad. Bydd bachau yn gweithio ar bob diweddariad.

Os ydych chi wedi cynhyrchu'ch cyfrinach ac nad yw'ch gosodiad cyntaf wedi digwydd eto, rhowch y gorau i ddarllen, bydd y bachyn cyn-osod yn gweithio'n wych i chi.

Ond os yw'r gyfrinach yn rhan o ddiweddariad (efallai nodwedd newydd nad oedd yno yn ystod y gosodiad), yna mae'n drueni na allwch greu bachyn cyn gosod sydd ond yn gweithio unwaith.

Swyddogaethau

Mae swyddogaethau Helm yn caniatáu ichi ychwanegu gwahanol elfennau sgriptio at eich sgriptiau defnyddio.

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

Mae'r enghraifft hon yn dangos mai gwerth y gyfrinach apiKey fydd yr UUID newydd a gynhyrchir yn ystod y gosodiad.

Mae Helm yn cynnwys llyfrgell nodwedd wirioneddol helaeth sy'n manteisio ar y nodweddion templed GO anhygoel a llyfrgell nodwedd Sprig i greu gosodiadau arferol.

Swyddogaeth chwilio

Ychwanegwyd yn Helm 3.1 Swyddogaeth chwilio, sy'n eich galluogi i ofyn am leoliad presennol a:

  • gwirio bodolaeth adnoddau;
  • dychwelyd gwerth adnodd presennol i'w ddefnyddio'n ddiweddarach.

Gan ddefnyddio'r ddau allu hyn, gallwn greu cyfrinach un-amser, a gynhyrchir yn ddeinamig!

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

Pryd bynnag y bydd diweddariad newydd yn cael ei gymhwyso i'r gweinydd, bydd Helm naill ai'n cynhyrchu gwerth cyfrinachol newydd (os nad oes unrhyw gyfrinach eto) neu'n ailddefnyddio'r gwerth presennol.

Pob lwc!

Beth arall i'w ddarllen ar y pwnc:

  1. Tair lefel o raddio awtomatig yn Kubernetes a sut i'w defnyddio'n effeithiol.
  2. Kubernetes yn ysbryd môr-ladrad gyda thempled ar gyfer gweithredu.
  3. Ein sianel O Amgylch Kubernetes yn Telegram.

Ffynhonnell: hab.com

Ychwanegu sylw