Files
claude-code/examples/loadbalancer-oauth.values.yaml
claude 528a48b667
Helm Chart Release / release-chart (push) Successful in 9s
Build Session Image / build-push (push) Successful in 2m8s
feat: credentials 認証モードとトークン自動リフレッシュ CronJob を追加 (v2.1.263-b)
トークンが定期的に失効・ローテーションしても再デプロイ不要にする。

- 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)検証済み
2026-09-08 15:18:21 +09:00

67 lines
2.5 KiB
YAML

# ローカルネットワーク限定の LoadBalancer で公開し、Claude のサブスクリプション
# (API 課金なし)で動かす構成。Ingress は張らない。
#
# 前提:
# - クラスタに LB 実装(kube-vip / MetalLB / Cilium LB-IPAM 等)がある
# - 手元の PC が claude にログイン済み(~/.claude/.credentials.json が存在)
#
# 実行例:
# helm upgrade --install claude-code cafepieters/claude-code \
# -n claude-code --create-namespace \
# -f examples/loadbalancer-oauth.values.yaml \
# --set-file anthropic.credentialsJson="$HOME/.claude/.credentials.json" \
# --set-file git.identities.gitea-ssh.sshPrivateKey=P:/Claude/.ssh/id_claude \
# --set-file git.identities.gitea-ssh.knownHosts=./known_hosts.gitea
# ---- Claude 認証: API を使わずサブスクリプション(Pro / Max)で動かす ----
anthropic:
authMode: credentials # ~/.claude/.credentials.json 全体を注入(refreshToken 込み)
# credentialsJson は --set-file で注入する(平文で書かない)
refresher:
enabled: true # クラスタ内で accessToken を定期更新し Secret を書き戻す
schedule: "*/30 * * * *"
# ---- 管理画面はローカル LB の IP でアクセス(Ingress なし)----
ingress:
enabled: false
service:
type: LoadBalancer
port: 80
annotations:
# kube-vip で払い出す VIP を固定(この 192.168.9.x は空いているものを指定)
kube-vip.io/loadbalancerIPs: "192.168.9.50"
kube-vip.io/vipHost: "cpi11"
# 接続元をローカルセグメントに限定(Ingress を張らない構成での第一の防御線)
loadBalancerSourceRanges:
- 192.168.9.0/24
externalTrafficPolicy: Local # 実クライアント IP を保持(LB 実装が対応する場合)
# ---- ブラウザアクセスの認証: トークン(自動生成)----
auth:
mode: token
# token.value を空にすると install 時に自動生成される。
# 取得: kubectl -n claude-code get secret claude-code-auth -o jsonpath='{.data.token}' | base64 -d
# ---- Git 接続先 ----
git:
allowedHosts:
- github.com
- 192.168.9.65
- git.cafepieters.com
identities:
gitea-ssh:
type: ssh
# sshPrivateKey / knownHosts は --set-file で注入
# github-https:
# type: https-token
# username: "x-access-token"
session:
autoStartClaude: true
idleTimeoutSeconds: 1800
maxSessions: 5
# verifyCommand: "npm test"
# autoPush:
# enabled: true