Frage Wie man Umgebungsvariablen mit Helmkarten zieht


Ich habe meine deployment.yaml-Datei im Templates-Verzeichnis von Helm-Charts mit mehreren Umgebungsvariablen für den Container, den ich mit Helm benutzen werde.

Jetzt möchte ich in der Lage sein, die Umgebungsvariablen von jedem Rechner, auf dem das Ruder läuft, lokal zu ziehen, damit ich die Geheimnisse auf diese Weise verbergen kann.

Wie gebe ich das ein und habe Helm Umgebungsvariablen lokal greifen, wenn ich Helm verwende, um die Anwendung auszuführen?

Hier ist ein Teil meiner deployment.yaml-Datei

...
...
    spec:
      restartPolicy: Always
      containers:
        - name: sample-app
          image: "sample-app:latest"
          imagePullPolicy: Always
          env:          
            - name: "USERNAME"
              value: "app-username"
            - name: "PASSWORD"
              value: "28sin47dsk9ik"
...
...

Wie kann ich den Wert von USERNAME und PASSWORD von lokalen Umgebungsvariablen ziehen, wenn ich Helm führe?

Ist das möglich? Wenn ja, wie mache ich das?


5
2018-04-19 19:27


Ursprung


Antworten:


Sie können export die Variable und benutze sie beim Laufen helm install.

Zuvor müssen Sie Ihr Diagramm ändern, so dass der Wert sein kann set während der Installation.

Überspringen Sie diesen Teil, wenn Sie bereits wissen, wie Sie Vorlagenfelder einrichten.


Da Sie die Daten nicht offen legen wollen, ist es besser, sie in kubernetes als geheim zu speichern.

Fügen Sie zuerst diese zwei Zeilen in Ihrem ein Values Datei, so dass diese beiden Werte von außen festgelegt werden können.

username: root
password: password

Fügen Sie jetzt a hinzu secret.yaml Datei in Ihrem template Mappe. Kopieren Sie dieses Code-Snippet in diese Datei.

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-auth
data:
  password: {{ .Values.password }}
  username: {{ .Values.username }}

Passen Sie jetzt Ihre Bereitstellungs-YAML-Vorlage an und nehmen Sie Änderungen vor env Abschnitt, so

...
...
    spec:
      restartPolicy: Always
      containers:
        - name: sample-app
          image: "sample-app:latest"
          imagePullPolicy: Always
          env:          
          - name: "USERNAME"
            valueFrom:
              secretKeyRef:
                key:  username
                name: {{ .Release.Name }}-auth
          - name: "PASSWORD"
            valueFrom:
              secretKeyRef:
                key:  password
                name: {{ .Release.Name }}-auth
...
...

Wenn Sie Ihre Vorlage korrekt für geändert haben --set Flagge, Sie können dies mithilfe der Umgebungsvariablen festlegen.

$ export USERNAME=root-user

Benutze nun diese Variable während der Installation von helm,

$ helm install --set username=$USERNAME ./mychart

Wenn Sie das ausführen helm install im dry-run Modus können Sie die Änderungen überprüfen,

$ helm install --dry-run --set username=$USERNAME --debug ./mychart
[debug] Created tunnel using local port: '44937'

[debug] SERVER: "127.0.0.1:44937"

[debug] Original chart version: ""
[debug] CHART PATH: /home/maruf/go/src/github.com/the-redback/kubernetes-yaml-drafts/helm-charts/mychart

NAME:   irreverant-meerkat
REVISION: 1
RELEASED: Fri Apr 20 03:29:11 2018
CHART: mychart-0.1.0
USER-SUPPLIED VALUES:
username: root-user

COMPUTED VALUES:
password: password
username: root-user

HOOKS:
MANIFEST:

---
# Source: mychart/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: irreverant-meerkat-auth
data:
  password: password
  username: root-user
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: irreverant-meerkat
  labels:
    app: irreverant-meerkat
spec:
  replicas: 1
  template:
    metadata:
      name: irreverant-meerkat
      labels:
        app: irreverant-meerkat
    spec:
      containers:
      - name: irreverant-meerkat
        image: alpine
        env:
        - name: "USERNAME"
          valueFrom:
            secretKeyRef:
              key:  username
              name: irreverant-meerkat-auth
        - name: "PASSWORD"
          valueFrom:
            secretKeyRef:
              key:  password
              name: irreverant-meerkat-auth

        imagePullPolicy: IfNotPresent
      restartPolicy: Always
  selector:
    matchLabels:
      app: irreverant-meerkat

Sie können sehen, dass sich die Daten des geheimen Benutzernamens geändert haben root-user.

Ich habe hinzugefügt Dieses Beispiel in Github Repo.

Es gibt auch einige Diskussionen in Kubernetes / Helm repo diesbezüglich. Du kannst sehen dieses Problem über alle anderen Möglichkeiten, Umgebungsvariablen zu verwenden.


8
2018-04-19 21:27