gateway(nginx) + manager(python 標準ライブラリ) + セッションごとの使い捨て Pod + reaper CronJob の構成。ブラウザ(PC/スマホ)からアクセスし、セッション単位で 独立した Alpine コンテナに Git リポジトリ(GitHub/Gitea など)をチェックアウトして 編集・検証・プッシュする。無操作が続いたセッションは Pod ごと自動破棄。 - セキュリティ: セッション NS 分離 / restricted PodSecurity / RBAC はセッション NS の pods,services のみの Role / セッション Pod は SA トークン非マウント・非 root・ readOnlyRootFilesystem・drop ALL caps・seccomp / NetworkPolicy で egress を DNS+HTTPS+SSH に限定 / Git ホスト allow-list / ResourceQuota+LimitRange - ライフサイクル: idleTimeout(Pod 内ウォッチドッグ + manager 回収) / maxLifetime (activeDeadlineSeconds) / maxSessions / 予備の孤児掃除 CronJob - 認証: token(既定) / basic / forward(外部SSO) / none。WebSocket は Cookie トークン - Claude 認証: ANTHROPIC_API_KEY または CLAUDE_CODE_OAUTH_TOKEN - CI: helm-release.yaml(未リリース版のみ tag+release+publish) / image-update-and-release.yaml(週次 npm 追従) / session-image.yaml(multi-arch build) - files/ 実体を .Files.Get で ConfigMap 化。helm lint / template 検証済み
42 lines
2.7 KiB
Markdown
42 lines
2.7 KiB
Markdown
# CHANGELOG 2.1.259 — 初版
|
||
|
||
claude-code Helm チャートの新規作成。
|
||
|
||
## 追加
|
||
|
||
- **制御プレーン(Deployment)**
|
||
- `gateway`(nginx-unprivileged / Alpine): 単一入口。`auth.mode` に応じて
|
||
token / basic / forward / none の認証、`/s/<id>/` のセッションへの WebSocket
|
||
リバースプロキシ、`auth_request` によるアクセス時刻の更新。
|
||
- `manager`(python / Alpine, 標準ライブラリのみ): セッション CRUD API、
|
||
モバイル対応の Web UI(ビルド不要)、アイドル / 最大寿命の回収ループ。
|
||
in-cluster ServiceAccount で Kubernetes API を直接操作。
|
||
- **セッション(使い捨て Pod)**
|
||
- `files/session-entrypoint.sh`: git 認証(SSH 鍵 / HTTPS トークン)、許可済み
|
||
リポジトリの clone、`claude` 用意、`ttyd` 起動、アイドルウォッチドッグ。
|
||
- `claude-verify` / `claude-push`(保護ブランチ・`--force` 禁止の安全 push)。
|
||
- `files/Dockerfile.session`: git + ttyd + claude-code 同梱の事前ビルドイメージ
|
||
(CI で multi-arch publish、コールドスタート短縮)。
|
||
- **ライフサイクル**
|
||
- `session.idleTimeoutSeconds` 無通信で Pod 自動破棄(Pod 内ウォッチドッグ + manager 回収)。
|
||
- `session.maxLifetimeSeconds` を `activeDeadlineSeconds` として強制。
|
||
- `session.maxSessions` で同時セッション数を制限。
|
||
- 予備の孤児掃除 CronJob(`manager --reap-once`)。
|
||
- **セキュリティ**
|
||
- セッション NS を制御プレーンから分離(`sessionsNamespace`, PodSecurity `restricted`)。
|
||
- manager RBAC はセッション NS の `pods` / `services` に限定した Role のみ。
|
||
- セッション Pod は SA トークン非マウント(API サーバー到達不可)、非 root /
|
||
`readOnlyRootFilesystem` / drop ALL caps / seccomp `RuntimeDefault`。
|
||
- NetworkPolicy: セッションの ingress は gateway からのみ、egress は DNS + HTTPS(443)
|
||
+ SSH(22)、`blockedEgressCIDRs`(既定でクラウドメタデータ IP)を except。
|
||
- Git ホスト allow-list(`git.allowedHosts`)。既定は allow-list 外を拒否。
|
||
- `ResourceQuota` / `LimitRange` でセッション NS のブラスト半径を制限。
|
||
- **CI**
|
||
- `helm-release.yaml`(main push で Package Registry へ publish、全リポジトリ共通)。
|
||
- `image-update-and-release.yaml`(毎週月曜 3:00 JST: npm の Claude Code 最新版に追従、
|
||
主アプリ更新時のみ セッションイメージ build/push + タグ + リリース + publish)。
|
||
|
||
## バージョン
|
||
|
||
`version` / `appVersion` = `2.1.259`(`@anthropic-ai/claude-code` の npm 最新版に一致)。
|