LoginSignup
31
18

More than 5 years have passed since last update.

Kubernetes Secret

Last updated at Posted at 2018-10-01

Kubernetes の Secret 使い方メモ。

Secret とは? Kubernetes で秘密にしたい設定を Pod 定義とは別に分ける。秘密設定は BASE64 で保存される。Pod からはファイルまたは環境変数で参照する。

Secret の作り方

例として、secretfile と secretenv という二つの秘密を作ります。データを作るには base64 でエンコードします。

$ echo -n 'This is a secret file.' | base64
VGhpcyBpcyBhIHNlY3JldCBmaWxlLg==
$ echo -n 'This is a secret env.' | base64
VGhpcyBpcyBhIHNlY3JldCBlbnYu

これを yaml 書けば良い。二つの秘密を topsecret という名前の Secret リソースに保存します。

# secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: topsecret
type: Opaque
data:
  secretfile: VGhpcyBpcyBhIHNlY3JldCBmaWxlLg==
  secretenv: VGhpcyBpcyBhIHNlY3JldCBlbnYu

読み込んで内容を確認します。

$ kubectl apply -f secret.yaml 
secret "topsecret" created
$ kubectl get secret topsecret -o yaml
apiVersion: v1
data:
  secretenv: VGhpcyBpcyBhIHNlY3JldCBlbnYu
  secretfile: VGhpcyBpcyBhIHNlY3JldCBmaWxlLg==
...

Secret の使い方

作成した Secret はファイルか環境変数を通じて取り込む事が出来ます。

  • 環境変数として取り込むには、.spec.containers[].env[].valueFrom.secretKeyRef を指定します。
  • ファイルとして取り込むには、.spec.volumes[].secret を指定します。
# run.yaml

apiVersion: v1
kind: Pod
metadata:
  name: run
spec:
  containers:
  - name: run-container
    image: debian
    command: ["bin/bash"]
    args: ["-c", "echo ${SECRET_ENV} ; cat /etc/secret/secret"]
    env:
    - name: SECRET_ENV # 環境変数名
      valueFrom:
        secretKeyRef:
          name: topsecret # 環境変数として取り込みたい secret の名前
          key: secretenv # 環境変数として取り込みたい値の名前、この場合 secretenv が SECRET_ENV に割り当てられる。
    volumeMounts:
    - name: secretdir
      mountPath: "/etc/secret" # マウントしたいディレクトリを指定する。
  volumes:
  - name: secretdir
    secret:
      secretName: topsecret
      items:
      - key: secretfile
        path: secret # マウントしたいファイルを指定する。この場合 secretfile が /etc/secret/secret にマウントされる。

試してみます。

% kubectl create -f run.yaml
pod "run" created
tyamamiya@ducttape:~/doc/docker/secret% kubectl logs run 
This is a secret env.
This is a secret file.%

ファイルから Secret を作る

このように手動で base64 して Secret を作るのは非常に面倒臭いので、ファイルから作る方法がいろいろあります。特に、env file (キー=値 形式のファイル) から読み込むと簡単です。

kubectl create secret generic my-secret --from-env-file=path/to/bar.env

Secret は、似たような機能の ConfigMaps と似たオプションが使えるらしく、詳しくは Create ConfigMaps from files 参照。

31
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
18