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
+37 -3
View File
@@ -153,18 +153,52 @@ auth:
# anthropic: Claude Code の認証情報
# --------------------------------------------------------------------------
anthropic:
# apiKey : ANTHROPIC_API_KEY を使う
# oauth : CLAUDE_CODE_OAUTH_TOKEN を使う(`claude setup-token` で発行)
authMode: apiKey
# authMode:
# credentials : ~/.claude/.credentials.json 全体(refreshToken 込み)を注入(推奨)。
# 各セッションはこのファイルを $HOME/.claude/.credentials.json に配置し、
# claude が自身でアクセストークンをリフレッシュする。加えて下記
# refresher CronJob がクラスタ内で Secret を最新に保つ。
# → API 課金なし。トークンが定期的に変わっても再デプロイ不要。
# oauth : CLAUDE_CODE_OAUTH_TOKEN を注入(`claude setup-token` の単発トークン。
# refreshToken を含まないため自動更新されない)。
# apiKey : ANTHROPIC_API_KEY を注入(API 従量課金)。
authMode: credentials
apiKey: ""
oauthToken: ""
# credentials モード: claude ログイン済みマシンの ~/.claude/.credentials.json の中身。
# 例: {"claudeAiOauth":{"accessToken":"...","refreshToken":"...","expiresAt":...,
# "scopes":["user:inference","user:profile"],"subscriptionType":"max"}}
# 注入は平文で書かず: --set-file anthropic.credentialsJson=$HOME/.claude/.credentials.json
credentialsJson: ""
# 上記の代わりに既存 Secret を参照
existingSecret: ""
existingSecretKeyApiKey: "ANTHROPIC_API_KEY"
existingSecretKeyOauthToken: "CLAUDE_CODE_OAUTH_TOKEN"
existingSecretKeyCredentials: ".credentials.json"
# 全セッションへ渡す追加環境変数(例: ANTHROPIC_BASE_URL / ANTHROPIC_MODEL)
extraEnv: {}
# ---- refresher: credentials モードのトークン自動更新 CronJob ----
# Secret 内の refreshToken を使って新しい accessToken を取得し、Secret を書き戻す。
# これで自マシンがオフラインでも新規セッションは常に有効なトークンで起動できる。
# ⚠ Claude Code CLI の OAuth クライアント値(tokenUrl / clientId)に依存する。
# これらは非公式であり、仕様変更で動かなくなる可能性がある。その場合でも
# セッション内 claude の自己リフレッシュは独立して機能する。
refresher:
enabled: true
schedule: "*/30 * * * *" # 30 分ごと
# 期限まで残りこの秒数を切っていたら更新する(十分な余裕を持たせる)
refreshIfExpiresInSeconds: 3600
tokenUrl: "https://console.anthropic.com/v1/oauth/token"
clientId: "9d1c250a-e61b-44d9-88ed-5944d1962f5e"
resources:
requests:
cpu: 10m
memory: 32Mi
limits:
cpu: 200m
memory: 96Mi
# --------------------------------------------------------------------------
# git: 接続先ホストと認証アイデンティティ
# --------------------------------------------------------------------------