2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Kubernetes]Secretの作成方法を確認する

Posted at

はじめに

Secretはユーザー名やパスワードなどの機密情報を定義しておき、Podから読み込むリソースの一つです。
Podに機密情報を入れないことで、Podは外部のGitリポジトリなどで管理し、Secretは別で管理することができます。
今回はSecretの作成方法を確認したいと思います。

genericタイプ

Secretの作成方法はいくつかあります。まずはGenericタイプのSecretを作成したいと思います。

--from-file

ユーザー名とパスワードのファイルを作成して、それをkubectlコマンドで参照して作成します。

まずはユーザー名とパスワードのファイルをそれぞれ平文で作成します。
このとき、改行コードを入れないように注意する必要があります。

$ echo -n user01 > ./username
$ echo -n user01password > ./password

このファイルをそれぞれ指定してSecretを作成します。

$ kubectl create secret generic --save-config sample-auth --from-file=./username --from-file=./password
secret/sample-auth created
$ kubectl get secrets sample-auth
NAME          TYPE     DATA   AGE
sample-auth   Opaque   2      20s

yaml形式でSecretを表示すると、エンコードされたパスワードが確認できます。
なお、Secretはbase64でエンコードされていますが、暗号化されているわけではありません。

$ kubectl get secrets sample-auth -o yaml
apiVersion: v1
data:
  password: dXNlcjAxcGFzc3dvcmQ=
  username: dXNlcjAx
kind: Secret
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"kind":"Secret","apiVersion":"v1","metadata":{"name":"sample-auth","creationTimestamp":null},"data":{"password":"dXNlcjAxcGFzc3dvcmQ=","username":"dXNlcjAx"}}
  creationTimestamp: "2020-04-18T13:00:44Z"
  name: sample-auth
  namespace: default
  resourceVersion: "915723"
  selfLink: /api/v1/namespaces/default/secrets/sample-auth
  uid: ea98b686-4615-44b1-b0a9-e0af6dc0cc3d
type: Opaque

--from-env-file

次は1つのファイルにユーザー名とパスワードを記載して、Secretを作成します。
この場合も平文でファイルを作成します。

secret.file
username=user01
password=user01password

このファイルを元にSecretを作成します。

$ kubectl create secret generic --save-config sample-auth2 --from-env-file ./secret.file
secret/sample-auth2 created
$ kubectl get secrets
NAME                  TYPE                                  DATA   AGE
default-token-nstst   kubernetes.io/service-account-token   3      52d
sample-auth           Opaque                                2      10m
sample-auth2          Opaque                                2      10s
$ kubectl get secrets sample-auth2 -o yaml
apiVersion: v1
data:
  password: dXNlcjAxcGFzc3dvcmQ=
  username: dXNlcjAx
kind: Secret
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"kind":"Secret","apiVersion":"v1","metadata":{"name":"sample-auth2","creationTimestamp":null},"data":{"password":"dXNlcjAxcGFzc3dvcmQ=","username":"dXNlcjAx"}}
  creationTimestamp: "2020-04-18T13:10:50Z"
  name: sample-auth2
  namespace: default
  resourceVersion: "917150"
  selfLink: /api/v1/namespaces/default/secrets/sample-auth2
  uid: 9740c7e0-7f28-4fe3-bbb2-34d617a10689
type: Opaque

--from-literal

今度はファイルを作成せずに、kubectlで直接値を指定してSecretを作成します。
この場合も、平文で値を指定します。

$ kubectl create secret generic --save-config sample-auth3 --from-literal=username=user01 --from-literal=password=user01password
secret/sample-auth3 created
$ kubectl get secrets
NAME                  TYPE                                  DATA   AGE
default-token-nstst   kubernetes.io/service-account-token   3      53d
sample-auth           Opaque                                2      18h
sample-auth2          Opaque                                2      17h
sample-auth3          Opaque                                2      17s
$ kubectl get secrets sample-auth3 -o yaml
apiVersion: v1
data:
  password: dXNlcjAxcGFzc3dvcmQ=
  username: dXNlcjAx
kind: Secret
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"kind":"Secret","apiVersion":"v1","metadata":{"name":"sample-auth3","creationTimestamp":null},"data":{"password":"dXNlcjAxcGFzc3dvcmQ=","username":"dXNlcjAx"}}
  creationTimestamp: "2020-04-19T07:04:53Z"
  name: sample-auth3
  namespace: default
  resourceVersion: "919342"
  selfLink: /api/v1/namespaces/default/secrets/sample-auth3
  uid: 137b03b5-b5fc-40d8-8322-f7c9eaddfdd4
type: Opaque

マニフェストから作成

マニフェストを作成して、applyすることでSecretを作成することもできます。マニフェストにはbase64でエンコードした値を記載する必要があります。

まずはエンコードした値を作成します。

$ echo -n user01 |base64
dXNlcjAx
$ echo -n user01password |base64
dXNlcjAxcGFzc3dvcmQ=

これらをマニフェストに直接書き込みます。

secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: sample-auth4
type: Opaque
data:
  username: dXNlcjAx
  password: dXNlcjAxcGFzc3dvcmQ=

このマニフェストをapplyしてSecretを作成します。

$ kubectl apply -f secret.yaml
secret/sample-auth4 created
$ kubectl get secrets
NAME                  TYPE                                  DATA   AGE
default-token-nstst   kubernetes.io/service-account-token   3      53d
sample-auth           Opaque                                2      18h
sample-auth2          Opaque                                2      18h
sample-auth3          Opaque                                2      6m1s
sample-auth4          Opaque                                2      6s
$ kubectl get secrets sample-auth4 -o yaml
apiVersion: v1
data:
  password: dXNlcjAxcGFzc3dvcmQ=
  username: dXNlcjAx
kind: Secret
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"password":"dXNlcjAxcGFzc3dvcmQ=","username":"dXNlcjAx"},"kind":"Secret","metadata":{"annotations":{},"name":"sample-auth4","namespace":"default"},"type":"Opaque"}
  creationTimestamp: "2020-04-19T07:10:48Z"
  name: sample-auth4
  namespace: default
  resourceVersion: "920184"
  selfLink: /api/v1/namespaces/default/secrets/sample-auth4
  uid: 27baeb7f-a7d6-410d-a36a-d2fa875e8ef3
type: Opaque

TLSタイプ

証明書として利用するSecretはTLSタイプで作成します。

まずは自己署名証明書を作成します。

$ openssl req -x509 -nodes -days 999 -newkey rsa:2048 -keyout ./tls.key -out ./tls.crt -subj "/CN=foo.bar.com"
Generating a 2048 bit RSA private key
......................+++
........................................................+++
writing new private key to './tls.key'
-----
$ ls
tls.crt  tls.key

作成した秘密鍵と証明書からSecretを作成します。

$ kubectl create secret tls --save-config sample-tls --key ./tls.key --cert ./tls.crt
secret/sample-tls created
$ kubectl get secrets sample-tls
NAME         TYPE                DATA   AGE
sample-tls   kubernetes.io/tls   2      2m10s
$ kubectl get secrets sample-tls -o yaml
apiVersion: v1
data:
  tls.crt: LS0tLS1CRUdJTiBDRVJUSU・・・
ind: Secret
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"kind":"Secret","apiVersion":"v1","metadata":{"name":"sample-tls","creationTimestamp":null},"data":{"tls.crt":"LS0tLS1CRUdJT・・・

まとめ

今回はSecretの作成方法を確認しました。作成したSecretの使用方法は次回確認したいと思います。

2
5
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
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?