コマンドラインのキーと値のペアからConfigMapまたは汎用Secretを作成する。
→`kubectl create configmap <name> --from-literal=<key>=<value>`または`kubectl create secret generic <name> --from-literal=<key>=<value>`を使用します。
理由: `--from-literal`は、直接キーと値を入力するためのものです。複数のキーに対しては、このフラグを複数回使用します。これは、単純なケースでYAMLファイルを作成するよりも高速です。
リファレンス↗
ConfigMapまたはSecretのすべてのキーと値のペアを環境変数としてコンテナに注入する。
→コンテナのspecで`envFrom`と`configMapRef`または`secretRef`を使用します。例: `envFrom: [{configMapRef: {name: my-config}}]`。
理由: `envFrom`は、ソースからのすべてのキーを環境変数にマッピングする一括操作です。これにより、各キーを手動でリストアップする手間が省けます。
リファレンス↗
ConfigMapまたはSecretから単一の特定の値を環境変数として注入する。
→`env.valueFrom`を使用します。例: `env: [{name: LOG_LEVEL, valueFrom: {configMapKeyRef: {name: my-config, key: log_level}}}]`。
理由: `valueFrom`は選択的な注入を提供し、ソースキーを異なる環境変数名にマッピングすることを可能にします。
ConfigMapまたはSecretをPodにファイルとしてマウントし、ライブ更新を可能にする。
→`configMap`または`secret`タイプの`volume`を定義します。`volumeMounts`を使用してコンテナにマウントします。ファイル名はキーと同じになります。
理由: ConfigMap/Secretからマウントされたファイルは、ソースが変更されると自動的に更新されます。環境変数は更新されず、Podの再起動が必要です。
リファレンス↗
セキュリティのベストプラクティスを強制する: rootでの実行を防ぐ、rootファイルシステムを読み取り専用にする、またはユーザーIDを指定する。
→Podまたはコンテナレベルで`securityContext`を使用します。`runAsNonRoot: true`、`readOnlyRootFilesystem: true`、および/または`runAsUser: <UID>`を設定します。
理由: SecurityContextは、コンテナの権限に対するきめ細かく宣言的な制御を提供し、アプリケーションの堅牢化とセキュリティポリシーへの準拠に不可欠です。
リファレンス↗
PodにKubernetes APIへの最小限のアクセス権限を付与する。
→1. カスタムの`ServiceAccount`を作成します。2. 必要なAPI権限(例: Podのリスト表示)のみを持つ`Role`を作成します。3. `RoleBinding`を作成してServiceAccountとRoleをリンクします。4. `spec.serviceAccountName`を介してServiceAccountをPodに割り当てます。
理由: 最小権限の原則に従い、Podが侵害された場合の攻撃対象領域を最小限に抑えます。
APIアクセスを必要としないPodへのServiceAccountトークンの自動マウントを防ぐ。
→PodのspecまたはServiceAccount自体で`automountServiceAccountToken: false`を設定します。
理由: APIクレデンシャルを必要としないコンテナに提供しないことで、攻撃対象領域を減らします。
Ingressまたはその他のセキュアなサービスでのTLSターミネーションに使用するSecretを作成する。
→`kubectl create secret tls <secret-name> --cert=<path/to/cert.pem> --key=<path/to/key.pem>`を使用します。
理由: これにより、Ingressコントローラーが期待する標準の`tls.crt`および`tls.key`データキーを持つ正しいタイプ`kubernetes.io/tls`のSecretが作成されます。
Podのメタデータ(名前、Namespace、ラベル、ノードIPなど)をコンテナに公開する。
→Downward APIを使用して、メタデータを環境変数または`downwardAPI`ボリューム内のファイルとして投影します。例: `valueFrom: {fieldRef: {fieldPath: metadata.name}}`。
理由: コンテナがKubernetes APIをクエリすることなく自己認識できるようにし、設定を簡素化し、RBAC要件を減らします。
リファレンス↗
Namespace内のすべてのPodにデフォルトのCPU/メモリリクエストと制限を設定する。
→Namespaceに`LimitRange`オブジェクトを作成します。リソースの`default`および`defaultRequest`値を定義します。
理由: 開発者が指定を忘れた場合でも、すべてのPodにリソース制約が設定されるようにし、スケジューリングと安定性を向上させます。ResourceQuotaと連携して機能します。
Namespace内で消費できるリソース(CPU、メモリ、オブジェクト数)の総量を制限する。
→`ResourceQuota`オブジェクトを作成します。`spec.hard`で厳密な制限(例: `requests.cpu: "4"`, `pods: "10"`)を定義します。
理由: あるNamespaceまたはチームがクラスターのすべてのリソースを消費するのを防ぎ、公平なリソース割り当てを保証します。