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-ийн утгыг ашиглан энгийн Kubernetes нууц

Гэхдээ та утгын файлд нууцаа зааж өгөхийг хүсэхгүй байна гэж бодъё.

Байрлуулалтад суулгах явцад үүсгэгдэх ёстой хуваалцсан түлхүүр шаардлагатай үед олон сонголт байдаг.

Дээрх модулээс модулиар харилцах жишээн дээр байршуулалтаас гадуур нууцыг хуваалцахыг хүсэхгүй байна. Тиймээс 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. Кубернетес дэх автомат масштабын гурван түвшин ба тэдгээрийг хэрхэн үр дүнтэй ашиглах талаар.
  2. Хэрэгжүүлэх загвар бүхий далайн дээрэмчлэлийн сүнстэй Кубернетес.
  3. Telegram дахь Kubernetes-ийн эргэн тойронд манай суваг.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх