feat: credentials 認証モードとトークン自動リフレッシュ CronJob を追加 (v2.1.263-b)
Helm Chart Release / release-chart (push) Successful in 9s
Build Session Image / build-push (push) Successful in 2m8s

トークンが定期的に失効・ローテーションしても再デプロイ不要にする。

- anthropic.authMode: credentials(新既定)
  ~/.claude/.credentials.json 全体(refreshToken 込み)を Secret に格納。
  セッション Pod にはファイルとしてマウントし $HOME/.claude へコピー(書き込み可)、
  セッション内 claude が refreshToken で自己更新
- anthropic.refresher CronJob(credentials 時・既定有効, files/token-refresher.py)
  Secret 内 refreshToken で OAuth トークンを更新し Secret を書き戻す。
  専用 SA + resourceNames 限定 Role で該当 Secret の get/patch のみ。
  tokenUrl/clientId は Claude Code CLI の非公式値(values 上書き可)
- manager.py build_pod: credentials は envFrom を使わずファイルマウント +
  SEED_CREDENTIALS_FILE。apiKey/oauth は従来どおり envFrom
- Secret に helm.sh/resource-policy: keep(credentials 時)で refresher の書込を保持
- fix: values.schema.json の $schema 行を削除(一部の Helm で
  "no schema with key or ref https://json-schema.org/draft-07/schema#" エラー)
- helm lint / template(credentials/apiKey/oauth)検証済み
This commit is contained in:
2026-09-08 15:18:21 +09:00
parent cd7092be17
commit 528a48b667
15 changed files with 503 additions and 46 deletions
+46
View File
@@ -0,0 +1,46 @@
# CHANGELOG 2.1.263-b — 手動リリース
v2.1.263-a の上に適用する手動リリース。
## 背景
`claude setup-token` / サブスクリプションのアクセストークンは定期的に失効・ローテーション
される。単発トークン(`authMode: oauth`)注入では、失効のたびに `helm upgrade` が必要だった。
## 追加
- **`anthropic.authMode: credentials`(新既定)**
- `~/.claude/.credentials.json` 全体(`accessToken` + `refreshToken` + `expiresAt`)を Secret に
格納し、セッション Pod にファイルとしてマウント → 起動時に `$HOME/.claude/.credentials.json`
へコピー(書き込み可能)。セッション内 `claude` が `refreshToken` で自己更新する。
- `--set-file anthropic.credentialsJson=$HOME/.claude/.credentials.json` で注入。
- `anthropic.existingSecretKeyCredentials`(既定 `.credentials.json`)で既存 Secret のキー名を指定可。
- **refresher CronJob(`anthropic.refresher`、`credentials` モード時・既定有効)**
- `files/token-refresher.py`(Python 標準ライブラリのみ)。Secret 内の `refreshToken` で
OAuth トークンエンドポイントを叩き、新しい `accessToken` / `refreshToken` / `expiresAt` を
Secret に書き戻す。既定 30 分ごと、残り寿命 1h 未満で更新。
- 専用 ServiceAccount + Role(**セッション NS の認証情報 Secret 1 個への `get` / `patch` のみ**、
`resourceNames` で限定)+ RoleBinding。
- `tokenUrl` / `clientId` は Claude Code CLI の公開値(非公式)。仕様変更時は values で上書き。
壊れてもセッション内 `claude` の自己更新は独立して機能する。`enabled: false` で無効化。
- Secret に `helm.sh/resource-policy: keep`(`credentials` モード時)。`helm upgrade` で
`--set-file` を付けない限り refresher が書いた値を Helm が上書きしない。
## 変更
- `anthropic.authMode` の既定を `apiKey` → **`credentials`**。既存の `apiKey` / `oauth` 運用は
values で明示指定すれば従来どおり。
- `templates/secret-anthropic.yaml` / `deployment.yaml` / `files/manager.py`(`build_pod` の
認証情報注入分岐)/ `files/session-entrypoint.sh`(seed 処理)/ `values.schema.json` /
`templates/NOTES.txt` / `examples/loadbalancer-oauth.values.yaml` を更新。
## 修正
- `values.schema.json` の `$schema` に `https://json-schema.org/draft-07/schema#` を指定して
いたため、一部の Helm バージョンで
`no schema with key or ref "https://json-schema.org/draft-07/schema#"` エラーが出ていた。
`$schema` 行を削除(他チャートと同じ・Helm は draft-07 で検証)。
## バージョン
`version` = `2.1.263-b` / `appVersion` = `"2.1.263"`。