Kubernetes Secretsの紹介

Kubernetes Secretsの紹介

  • ITOps・DevOps
6分で読めます 更新日 Jan 17, 2019

ポイント: Kubernetes Secretsは、パスワードやトークンなどの機密データを安全に保存し、プレーンテキストでの露出を防ぎます。このガイドでは、秘密を作成および管理する方法を説明し、それらをポッド内の環境変数またはボリュームとして使用する方法を説明します。

  • 秘密は手動またはKubernetesによって自動的に作成できます。
  • ポッド内のボリュームマウントまたは環境変数を介してアクセスできます。

このブログ投稿では、K8sの秘密について説明します。これには以下が含まれます:

  • 秘密とは何か
  • 秘密の作成方法
  • 秘密の操作方法

Kubernetesや、、などの概念に関する基本的な理解があることを前提としています。続けて学ぶには、kubectlとminikubeをインストールする必要があります。

K8sの秘密とは?

秘密とは、その名の通り、パスワードやトークンなど、機密として保持する必要のある情報です。技術的には、資格情報をプレーンテキストでポッド仕様に直接記述できますが、それはあまり安全ではありません。これを解決するために、Kubernetesは秘密という概念を持っており、機密情報を安全に保存し、ポッドがそれをどのように消費するかを制御できます。

秘密を作成する方法

一般的に、ユーザーとKubernetesそのものの両方が秘密を作成できます。APIに安全にアクセスするだけが必要な場合、K8sはサービスアカウントに関連付けられた秘密を自動的に作成します。この秘密にはAPIにアクセスするための資格情報が含まれています。これはAPIにアクセスするための推奨方法です。他の用途のために独自の秘密を作成する必要がある場合も、私たちはそれを行うことができます。例えば、アプリケーションを実行しているポッドが「example-user」というユーザー名と「example-password」というパスワードで別のシステムにアクセスする必要があるとします。秘密を作成し、ポッドが資格情報を認識して使用する方法は?手動で作成するか、yamlファイルを使用するか、「kubectl create」を使用できます。

手動で秘密を作成する

秘密を手動で作成するには、まず文字列をbase64に変換する必要があります。

    $ echo -n 'example-user' | base64
4oCYZXhhbXBsZS11c2Vy4oCZ

$ echo -n 'example-password' | base64
4oCYZXhhbXBsZS1wYXNzd29yZOKAmQ==

次に、秘密仕様を持つyamlファイル(example.yaml)を作成します。

    apiVersion: v1
kind: Secret
metadata:
  name: demo
type: Opaque
data:
  username: 4oCYZXhhbXBsZS11c2Vy4oCZ
  password: 4oCYZXhhbXBsZS1wYXNzd29yZOKAmQ==

秘密が作成されたかどうかを確認できます

    $ kubectl get secret
NAME                  TYPE                                  DATA      AGE
default-token-v8gqd   kubernetes.io/service-account-token   3         6m
demo                  Opaque                                2         11s

ご覧のとおり、システム生成の秘密と私たちが作成した秘密があります。秘密がプレーンテキストでないことを確認するために、秘密を説明することもできます。

    Type:  Opaque

Data
====
username:  18 bytes
password:  22 bytes

kubectlで秘密を作成

資格情報を含むファイルから秘密を作成することもできます。たとえば、ユーザー名をusername.txtというファイルに保存し、パスワードをpassword.txtに保存することで、同じ秘密を作成できます。その後、「kubectl create secret generic demo-creds --from-file=./username.txt --from-file=./password.txt」を実行できます。

秘密を使用する方法

上記で作成した秘密を消費する方法は2つあります:

  • データボリューム
  • 環境変数

簡単な例で両方を示します。

ボリューム内で秘密を消費

ボリューム内で秘密を消費するには、まずポッドマニフェストでボリュームが定義されていることを確認し、コンテナが使用できるように秘密の名前が指定されている必要があります。ファイルパスや権限を変更することもできます。

    apiVersion: v1
kind: Pod
metadata:
  name: volume-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    volumeMounts:             #We mount our volume
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:                    #We use the volume and defined our secret
  - name: foo
    secret:
      secretName: demo

秘密が使用されていることが確認できます

    Volumes:
  foo:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  demo
    Optional:    false
  default-token-v8gqd:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-v8gqd
    Optional:    false

秘密が上記で定義したものであることを確認するために、「kubectl exec」を使用してコンテナに入って確認できます。

    $ kubectl exec -ti mypod bash
root@mypod:/data# cat /etc/foo/username 
'Example-user'
root@mypod:/data# cat /etc/foo/password 
‘example-password’

ポッド内のコンテナが、上記で作成した資格情報を実際に使用していることが確認できます。次に、環境変数で同じ秘密を使用する様子を見てみましょう。

環境変数内で秘密を消費

    apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    env:
      - name: SECRET_USERNAME        
        valueFrom:
          secretKeyRef:
            name: demo                #Name of secret
            key: username             #secret key
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: demo
            key: password
  restartPolicy: Never

ご覧のとおり、ボリュームの代わりに、env[].valueFrom.secretKeyRefが秘密内のキーを参照しています。このポッドが作成された後、どのようになるか見てみましょう。

    root@secret-env-pod:/data# env | grep SECRET
SECRET_PASSWORD='example-password'
SECRET_USERNAME='example-user'

K8sの秘密に関する最終的なヒント

考慮すべき他の点がいくつかあります:

  • すでに消費されている秘密を更新すると、Kubeletはキーが自動的に更新されることを確認します。
  • ポッドは秘密を使用する唯一のオブジェクトではなく、システムの他の部分も秘密を使用できます。
  • 秘密は1つ以上のポッドによって消費されることができます。

追加リソース

Kubernetesに関する詳細は、次のリソースを参照してください:

これらの投稿は私自身の意見であり、BMCの立場、戦略、または意見を必ずしも表すものではありません。

ITOps・DevOpsの関連記事

The Briefを購読する

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ありがとう

あなたはThe Briefに登録されました
The Briefはメインフレームとエンタープライズオーケストレーション—BMC AMIとControl-M—および、両者に関するアナリストの研究、顧客の展開、イベントをカバーしています。