TT Lab
はじめる
学ぶ 学習パス コース

本番バックエンドAPIキャップストーン

デプロイ宣言もパースし実行の意味を確かめよ

TT Labで続きを見る

一言でいうと

安全なデプロイは、ダイジェストで固定されたイメージ、非root実行、権限昇格の禁止、読み取り専用のルートファイルシステム、リソースのリクエスト・制限、意味の異なるreadinessとlivenessのプローブ、Secretの参照を、構造化されたオブジェクトとして宣言します。

なぜ文字列の検索が危険なのか

コメントにrunAsNonRoot: trueと書いても、Kubernetesは何のセキュリティ設定も受け取りません。インデントが崩れたYAMLや、誤ったネストのパスも、文字列はすべて含められます。今回のラボでは、YAML 1.2の厳密な部分集合であるJSON形式でdeployment.yamlを作成します。Pythonの標準ライブラリで実際のオブジェクトをパースして、spec.template.spec.containersの下の値を確認するので、追加のインターネット依存がありません。

イメージは、変更可能なタグではなく、sha256ダイジェストで固定します。PodのセキュリティコンテキストはrunAsNonRootとRuntimeDefaultのseccompを、コンテナのセキュリティコンテキストはallowPrivilegeEscalation: falseとreadOnlyRootFilesystem: trueを持ちます。CPU・メモリのrequestsとlimitsをどちらも置いて、/readyzと/healthzを分離します。readinessの失敗は新しいトラフィックから除外し、livenessの失敗はプロセスの再起動を促します。

現場でシークレットを注入する方法

DATABASE_URLの値をマニフェストに直接書くと、Gitの履歴とレビュー画面に資格情報が残ります。valueFrom.secretKeyRefで名前とキーだけを参照して、実際のシークレットは、デプロイシステムが提供します。DockerfileはPython 3.12ベースのイメージをダイジェストで固定して、数値のUIDで実行します。CMDは、サーバーがすべてのインターフェースの8080ポートで起動するよう明示します。

実務での判断基準

パースの成功は、最初の一歩です。セレクターとPodのラベルの一致、単一責任のコンテナ、プローブのパス、リソースの値、Secretの参照の形を、構造的に検査します。実際のクラスターでは、ポリシーエンジンとサーバー側のdry-runを加えます。キャップストーンのチェックは、クラスターがないオフラインのセッションでも、改ざんしにくい中核の構造を検証し、最後のモジュールでは、この選択と障害からの学びを、採用に使える証拠として整理します。