Helmを使用して実行するコンテナのいくつかの環境変数を含むHelmチャートのテンプレートディレクトリ内に、deployment.yamlファイルがあります。
ヘルムが実行されているどのマシンからでも環境変数をローカルにプルできるようにしたいので、その方法で秘密を隠すことができます。
Helmを使用してアプリケーションを実行するときに、これを渡して、環境変数をローカルで取得するにはどうすればよいですか?
ここに私のdeployment.yamlファイルの一部があります
...
...
spec:
restartPolicy: Always
containers:
- name: sample-app
image: "sample-app:latest"
imagePullPolicy: Always
env:
- name: "USERNAME"
value: "app-username"
- name: "PASSWORD"
value: "28sin47dsk9ik"
...
...
Helmを実行するときに、ローカル環境変数からUSERNAMEとPASSWORDの値を取得するにはどうすればよいですか?
これは可能ですか?はいの場合、どのようにこれを行うのですか?
export
変数をhelm install
の実行中に使用できます。
その前に、インストール中に値がset
になるようにチャートを変更する必要があります。
テンプレートフィールドの設定方法がわかっている場合は、この部分をスキップしてください。
データを公開したくないので、kubernetesに秘密として保存することをお勧めします。
まず、Values
ファイルにこの2行を追加して、これらの2つの値を外部から設定できるようにします。
username: root
password: password
次に、template
フォルダー内にsecret.yaml
ファイルを追加します。そして、このコードスニペットをそのファイルにコピーします。
apiVersion: v1
kind: Secret
metadata:
name: {{ .Release.Name }}-auth
data:
password: {{ .Values.password }}
username: {{ .Values.username }}
次に、展開yamlテンプレートを微調整し、env
セクションで次のように変更します。
...
...
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
...
...
--set
フラグ用にテンプレートを正しく変更した場合は、環境変数を使用してこれを設定できます。
$ export USERNAME=root-user
ヘルムインストールの実行中にこの変数を使用して、
$ helm install --set username=$USERNAME ./mychart
このhelm install
をdry-run
モードで実行すると、変更を確認できます。
$ 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
秘密のユーザー名のデータがroot-user
に変更されていることがわかります。
この例 をgithubリポジトリに追加しました。
これに関する kubernetes/helm リポジトリにもいくつかの議論があります。 この問題 を見ると、環境変数を使用する他のすべての方法を知ることができます。
質問は、-setでこれを渡すのではなく、env変数自体を見てチャート内のenv変数を検索する方法だと思います。
たとえば、キー「my_db_password」を設定し、evn変数の値を見て値を変更したい場合はサポートされていません。
gOテンプレートについてはよくわかりませんが、ヘルムのドキュメントで説明されているように、これは無効になっていると思います。 「セキュリティ上の理由から、envとexpandenvの2つを削除しました(これにより、チャート作成者はTillerの環境にアクセスできます)。」 https://helm.sh/docs/developing_charts/#know-your-template-functions