ಹೆಲ್ಮ್‌ನಲ್ಲಿ ರಹಸ್ಯಗಳ ಸ್ವಯಂ-ಜನರೇಷನ್

ಹೆಲ್ಮ್‌ನಲ್ಲಿ ರಹಸ್ಯಗಳ ಸ್ವಯಂ-ಜನರೇಷನ್

ತಂಡದ Mail.ru ನಿಂದ Kubernetes aaS ಸಣ್ಣ ಟಿಪ್ಪಣಿಯನ್ನು ಅನುವಾದಿಸಲಾಗಿದೆ ನವೀಕರಿಸುವಾಗ ಹೆಲ್ಮ್ ರಹಸ್ಯಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹೇಗೆ ರಚಿಸುವುದು ಎಂಬುದರ ಕುರಿತು. ಕೆಳಗಿನವು ಲೇಖನದ ಲೇಖಕರಿಂದ ಪಠ್ಯವಾಗಿದೆ - Intoware ನ ತಾಂತ್ರಿಕ ನಿರ್ದೇಶಕ, SaaS ಪರಿಹಾರಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವ ಕಂಪನಿ.

ಕಂಟೇನರ್ಗಳು ತಂಪಾಗಿವೆ. ಮೊದಲಿಗೆ ನಾನು ಕಂಟೇನರ್ ವಿರೋಧಿ (ನಾನು ಅದನ್ನು ಒಪ್ಪಿಕೊಳ್ಳಲು ಮುಜುಗರಕ್ಕೊಳಗಾಗಿದ್ದೇನೆ), ಆದರೆ ಈಗ ನಾನು ಈ ತಂತ್ರಜ್ಞಾನದ ಬಳಕೆಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಬೆಂಬಲಿಸುತ್ತೇನೆ. ನೀವು ಇದನ್ನು ಓದುತ್ತಿದ್ದರೆ, ನೀವು ಆಶಾದಾಯಕವಾಗಿ ಡಾಕರ್ ಸಮುದ್ರಗಳನ್ನು ಯಶಸ್ವಿಯಾಗಿ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿದ್ದೀರಿ, ಕುಬರ್ನೆಟ್ಸ್‌ನ ಪ್ರಯೋಜನಗಳನ್ನು ಅರಿತುಕೊಂಡಿದ್ದೀರಿ ಮತ್ತು ಹೆಲ್ಮ್‌ನೊಂದಿಗೆ ನಿಮ್ಮ ಜೀವನವನ್ನು ಹೆಚ್ಚು ಸುಲಭಗೊಳಿಸಿದ್ದೀರಿ.

ಆದಾಗ್ಯೂ, ಕೆಲವು ವಿಷಯಗಳು ಅಗತ್ಯಕ್ಕಿಂತ ಹೆಚ್ಚು ಕಷ್ಟಕರವಾಗಿರುತ್ತವೆ.

ನವೀಕರಿಸುವಾಗ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರಹಸ್ಯಗಳನ್ನು ಹೇಗೆ ರಚಿಸುವುದು?

ಕುಬರ್ನೆಟ್ಸ್ ರಹಸ್ಯವು ನಿಮ್ಮ ಕೋಡ್‌ನಲ್ಲಿ ನೀವು ಬಳಸಲು ಬಯಸುವ ಕೀ/ಮೌಲ್ಯ ಜೋಡಿಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಸಂಪನ್ಮೂಲವಾಗಿದೆ. ಇವುಗಳು ಡೇಟಾಬೇಸ್ ಸಂಪರ್ಕ ತಂತಿಗಳು, ಇಮೇಲ್ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಇತ್ಯಾದಿ ಆಗಿರಬಹುದು. ರಹಸ್ಯಗಳನ್ನು ಬಳಸುವ ಮೂಲಕ, ನೀವು ಕೋಡ್ ಮತ್ತು ಸೆಟ್ಟಿಂಗ್‌ಗಳ ನಡುವೆ ಸ್ಪಷ್ಟವಾದ ಪ್ರತ್ಯೇಕತೆಯನ್ನು ರಚಿಸುತ್ತೀರಿ, ಕೋಡ್‌ಬೇಸ್ ಅನ್ನು ಬದಲಾಯಿಸದೆಯೇ ವಿಭಿನ್ನ ನಿಯೋಜನೆಗಳನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಲು ಸುಲಭವಾಗುತ್ತದೆ.

ಎರಡು ಮಾಡ್ಯೂಲ್‌ಗಳು ಸಾಮಾನ್ಯ ಕೀಲಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಸಂವಹನ ನಡೆಸಬೇಕಾದಾಗ ಸಾಮಾನ್ಯ ಪರಿಸ್ಥಿತಿ. ಕ್ಲಸ್ಟರ್‌ನ ಹೊರಗಿನ ಯಾರೂ ಈ ಕೀಲಿಯನ್ನು ತಿಳಿದಿರಬಾರದು, ಏಕೆಂದರೆ ಇದು ಕ್ಲಸ್ಟರ್‌ನೊಳಗೆ ಒಬ್ಬರಿಂದ ಒಬ್ಬರಿಗೆ ಸಂವಹನ ನಡೆಸಲು ಉದ್ದೇಶಿಸಲಾಗಿದೆ.

ರಹಸ್ಯಗಳನ್ನು ಮಾಡುವುದು

ವಿಶಿಷ್ಟವಾಗಿ, ಹೆಲ್ಮ್‌ನಲ್ಲಿ ರಹಸ್ಯವನ್ನು ರಚಿಸಲು ನಿಮಗೆ ಅಗತ್ಯವಿದೆ:

  • ಮೌಲ್ಯಗಳ ಫೈಲ್‌ನಲ್ಲಿನ ರಹಸ್ಯವನ್ನು ವಿವರಿಸಿ;
  • ನಿಯೋಜನೆಯ ಸಮಯದಲ್ಲಿ ಅದನ್ನು ಮರು ವ್ಯಾಖ್ಯಾನಿಸಿ;
  • ನಿಯೋಜನೆ/ಪಾಡ್ ಒಳಗೆ ಅದನ್ನು ಉಲ್ಲೇಖಿಸಿ;
  • ... ಲಾಭ!

ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ