Member-only story

2022年におけるKubernetesのシークレットマネジメントの状況(前半)

gavin.zhou
Feb 16, 2023

--

Kubernetesのシークレットマネジメントに関する記事です。

長い記事なので、前半と後半の2つに分けて投稿いたします。今回は前半です。

シークレットはすでに現代のソフトウェア開発ライフサイクル (SDLC) の基本的な構成要素になっています。アプリケーション、CI/CD システム、API アクセス、データベースなど、すべて何らかの形でシークレット/トークン/認証情報を必要とします。シークレットは、SDLC のすべての段階に関与しています。そして、セキュリティ上の理由から、バージョン管理システムにシークレットを置くことはできません(SOPSのように、ソースコード管理システムを使用してシークレットを共有することを可能にするツールはありますが)。こういった理由から、シークレットを適切は適切に管理すべきなのです。

一方、Kubernetes (K8s) は、特にThe Twelve-Factor App methodology の方法論に従って、できる限りクラウドネイティブに近づきたいウという場合に、コンテナ化したワークロードを実行するデファクトの場となっています。

この記事では、シークレットとK8sについて深く掘り下げます。具体的には、K8sのシークレット管理について概要を説明します。

それでは、始めましょう。

1 K8sシークレットの活用と課題

1.1 K8sシークレットに関して~おさらい~

簡単におさらいすると、基本的にK8s環境においてPod内のコンテナがシークレットを消費する方法は、大きく分けて2つあります。

- データボリュームとしてマウントされる

- 環境変数として公開される

そして、Pod内では、ファイルを読み込んでシークレットの内容を読み込む方法(シークレットをデータボリュームとしてマウントする場合)と、環境変数として読み込む方法(シークレットをenv varsとして公開する場合)のいずれかを選択することができます。

1.2 ファイルからコンフィグ/シークレットを読み込む

ファイルから読み込む方法は、使いやすく、ローカル開発に有利かもしれません。ローカルでのテストに必要なすべてのシークレットを含むローカルファイルを準備し、アプリに特別な修正を加えることなくK8sで同じように動作するからです。

しかし、これは比較的古い方法で、おそらく古いアプリだけが最初にこの方法で書かれており、12ファクターアプリの方法論に反しています。

--

--

No responses yet