Secrets 一元管理チャート secret-manager v0.1.0 を実装
Helm Chart Release / release-chart (push) Successful in 6s
Helm Chart Release / release-chart (push) Successful in 6s
クラスター横断で使う認証情報を1チャートで管理し、複数ネームスペースへ 同一 Secret として配布する仕組みを実装。 - distribution: namespaces への複製 / kubernetes-reflector 自動同期 / stakater-Reloader 連携を選択可能 - common: namePrefix・共通ラベル/アノテーション・immutable - mail.providers: SMTP/IMAP/POP3 のサーバ情報 + パスワードを一元管理。 source 可能な smtp.env と任意の msmtprc スニペットを Secret に同梱 - api.credentials: 任意のキー/値集合を Opaque Secret 化(envFrom 向け) - generic.secrets: 任意 type(dockerconfigjson / tls / basic-auth 等) - values.schema.json による厳格バリデーション - examples/(Gmail・M365・SendGrid・SES・Mailgun・reflector) - .gitea/workflows/helm-release.yaml で Package Registry へ自動発行 - README.md にセキュリティモデル・values リファレンス・参照方法を記載 - 平文資格情報の混入防止に .gitignore を整備
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
# CLAUDE.md — secret-manager Helm Chart
|
||||
|
||||
## リポジトリ概要
|
||||
|
||||
クラスター内の複数プロジェクトで横断的に使う「認証情報」を 1 つの Helm チャートで
|
||||
一元管理する。外部メールの SMTP/IMAP 設定・API キー・汎用資格情報を定義し、
|
||||
指定した複数ネームスペースへ同一の Kubernetes Secret として配布する。
|
||||
|
||||
**設計目標**: 認証情報の変更が発生したら、このチャートの values を更新して
|
||||
`helm upgrade` するだけで、クラスター上の全プロジェクトに反映される。
|
||||
|
||||
- **Gitea リポジトリ**: `ssh://git@192.168.9.65/helmchart/secret-manager`
|
||||
- **Helm リポジトリ**: `https://git.cafepieters.com/api/packages/helmchart/helm`
|
||||
|
||||
## 作業ルール(必読)
|
||||
|
||||
1. **機能を追加・変更したら、必ず `README.md` を更新してから作業完了とする。**
|
||||
- 追加・変更した機能・パラメータ・挙動を README.md に反映する。
|
||||
2. **変更は必ず Git Commit / Push すること。**
|
||||
- 作業単位ごとにコミットし、`origin(main)` へ push するまでが作業完了。
|
||||
3. **コミットメッセージに Claude クレジット(`Co-Authored-By` 等)を追記することは禁止。**
|
||||
- `user.name = Claude` でコミットされるため、ユーザー名で判別可能。
|
||||
4. `git pull` で取り込まれた変更は常に尊重する。revert して push することは禁止。
|
||||
不適切に見える場合はユーザーに改善提案を提示し、承認を得てから対応する。
|
||||
|
||||
## バージョン方針
|
||||
|
||||
- このチャートには「主アプリ」となる外部プロダクトが存在しない(チャート自身がアプリ)。
|
||||
そのため `Chart.yaml` の `version` / `appVersion` は **チャート独自に SemVer で採番**する。
|
||||
(他チャートの「主アプリのバージョンと同一」ルールは適用対象外)
|
||||
- 破壊的変更 = メジャー、機能追加 = マイナー、修正 = パッチ。
|
||||
- 改修作業で臨時の手動リリースが必要な場合は末尾にアルファベットを付与する
|
||||
(例: `0.2.0` → `0.2.0-a`)。
|
||||
|
||||
## リリースフロー
|
||||
|
||||
- `main` への push で `.gitea/workflows/helm-release.yaml` が発火し、
|
||||
`helm lint` → `helm package` → Gitea Package Registry へ発行する。
|
||||
- 正式リリース時は `Chart.yaml` のバージョンを上げ、Git タグと Gitea リリースも作成する。
|
||||
|
||||
## 必要な Gitea Secrets
|
||||
|
||||
| シークレット名 | 用途 |
|
||||
|---|---|
|
||||
| `GITEA_TOKEN` | Gitea API(リリース作成・タグ操作) |
|
||||
| `REGISTRY_USER` | Gitea Package Registry ユーザー名 |
|
||||
| `REGISTRY_TOKEN` | Gitea Package Registry トークン |
|
||||
|
||||
## Git Configuration (local)
|
||||
|
||||
| 項目 | 値 |
|
||||
|---|---|
|
||||
| user.name | Claude |
|
||||
| user.email | claude@cafepieters.com |
|
||||
| core.sshCommand | `ssh -i P:/Claude/.ssh/id_claude -o StrictHostKeyChecking=no` |
|
||||
|
||||
## 実行環境
|
||||
|
||||
- **Helm はローカル未インストール**。テンプレートのレンダリング確認は CI(`helm lint`)に依存する。
|
||||
ローカルでは YAML 構文・Go テンプレート構文を目視で慎重に確認すること。
|
||||
- OS: Windows 11 Pro
|
||||
|
||||
## アーキテクチャ要点
|
||||
|
||||
- `templates/_helpers.tpl` の `secret-manager.secret` が中核。
|
||||
1 論理 Secret を受け取り、実効ネームスペースごとに複製した Secret マニフェストを出力する。
|
||||
- 配布先の決定順:
|
||||
1. エントリの `namespacesOverride`(非空ならそれを使用)
|
||||
2. `distribution.reflector.enabled` が true → リリース先ネームスペースのみに作成し reflector アノテーション付与
|
||||
3. それ以外 → `distribution.namespaces` (+ `includeReleaseNamespace`) を重複排除した一覧
|
||||
- Helm はリリースマニフェストに含まれる別ネームスペースの Secret も追跡するため、
|
||||
`namespaces` からネームスペースを外して `helm upgrade` するとそのコピーは削除される。
|
||||
- 資格情報は `stringData` で書き込む(テンプレート側で全値を文字列へ強制)。
|
||||
|
||||
## チャート改修履歴
|
||||
|
||||
### 初版設計・実装(2026-08-31, v0.1.0)
|
||||
|
||||
空リポジトリから初期実装。`distribution`(namespaces 複製 / reflector / reloader)、
|
||||
`common`(namePrefix・labels・annotations・immutable)、`mail.providers`(SMTP/IMAP/POP3 +
|
||||
`smtp.env` + 任意の `msmtprc`)、`api.credentials`、`generic.secrets`(任意 type)を実装。
|
||||
`values.schema.json`、`examples/`、`.gitea/workflows/helm-release.yaml` を追加。
|
||||
|
||||
**対象ファイル**: `Chart.yaml`, `values.yaml`, `values.schema.json`, `templates/*`,
|
||||
`examples/*`, `.gitea/workflows/helm-release.yaml`, `README.md`, `.gitignore`, `CLAUDE.md`
|
||||
Reference in New Issue
Block a user