Claude Code Hub
April 23, 2026 · View on GitHub
本目录是 Kubernetes 部署清单模板,由 scripts/deploy-k8s.sh 在部署时做占位符替换后下发到集群。
不建议直接 kubectl apply -f 本目录 — 文件中包含 {{VAR}} 占位符,需先渲染。
目录结构
deploy/k8s/
├── namespace.yaml # 命名空间
├── app/ # 应用层
│ ├── deployment.yaml # Deployment (2 副本基线;迁移由 PG advisory lock 串行化)
│ ├── service.yaml # Service (可渲染为 ClusterIP/NodePort)
│ ├── hpa.yaml # HPA (CPU 70% / 内存 80%)
│ ├── pdb.yaml # PodDisruptionBudget (maxUnavailable=1)
│ └── networkpolicy.yaml # NetworkPolicy (仅在 Ingress 模式应用)
├── postgres/ # PostgreSQL StatefulSet
│ ├── statefulset.yaml
│ ├── service.yaml # ClusterIP (不对外)
│ └── networkpolicy.yaml # 仅允许 app 访问
├── redis/ # Redis StatefulSet
│ ├── statefulset.yaml # 密码保护 + AOF
│ ├── service.yaml # ClusterIP (不对外)
│ └── networkpolicy.yaml # 仅允许 app 访问
└── ingress/
├── ingress.yaml # 标准 Ingress (nginx/traefik/其他)
└── traefik-ingressroute.yaml # Traefik IngressRoute 备选 (k3s 默认)
客户端 IP 透传
ingress/ingress.yaml不默认依赖configuration-snippet; 标准 Ingress 路径要求你在 controller 级别打开 forwarded-header / real-ip 配置,避免被allow-snippet-annotations=false的默认安装直接拒绝。- 若你还希望应用优先信任
X-Real-IP,请先在 ingress controller / 上游 LB 上正确配置 trusted proxies / real-ip(use-forwarded-headers、proxy-real-ip-cidr等)。 ingress/traefik-ingressroute.yaml依赖 Traefik 默认透传X-Forwarded-For;X-Real-Ip是否可信取决于forwardedHeaders.trustedIPs等 entrypoint 配置。- 应用侧的默认提取链仍等价于
{ headers: [{ name: "x-real-ip" }, { name: "x-forwarded-for", pick: "rightmost" }] }。
占位符参考
| 占位符 | 含义 | 默认值 |
|---|---|---|
{{NAMESPACE}} | K8s namespace | claude-code-hub |
{{APP_IMAGE}} | 应用镜像 | ghcr.io/ding113/claude-code-hub:latest |
{{APP_REPLICAS}} | 基线副本数 | 2 |
{{APP_HPA_MIN}} / {{APP_HPA_MAX}} | HPA 上下限 | 2 / 6 |
{{APP_SERVICE_TYPE}} | Service 类型 | ClusterIP (有 Ingress) / NodePort (回落) |
{{STORAGE_CLASS}} | PVC storageClassName | k3s local-path / 其他空串 |
{{PG_STORAGE_SIZE}} / {{REDIS_STORAGE_SIZE}} | PVC 大小 | 50Gi / 10Gi |
{{INGRESS_HOST}} | 绑定域名 | 用户参数 |
{{INGRESS_CLASS}} | Ingress className | 自动探测 |
{{TIMEZONE}} | 容器时区 | Asia/Shanghai |
NodePort 回落模式下,
scripts/deploy-k8s.sh会自动跳过app/networkpolicy.yaml, 避免默认的 Ingress 命名空间白名单阻断外部访问。
Secret 约定
所有 manifest 都引用 claude-code-hub-secrets 里的以下 key,由 deploy-k8s.sh 自动生成:
pg-password— PostgreSQL 密码redis-password— Redis 密码admin-token— Dashboard 管理员 Tokendsn— PostgreSQL 连接串 (由pg-password拼装)redis-url— Redis 连接串 (由redis-password拼装)
典型调用
# 集群侧一键部署 (推荐)
# 默认等价 main 分支发布镜像 -> ghcr.io/ding113/claude-code-hub:latest
bash scripts/deploy-k8s.sh -y
# 自定义 namespace / 镜像 / 域名
bash scripts/deploy-k8s.sh \
-n my-hub -i ghcr.io/ding113/claude-code-hub:dev \
--ingress-host hub.example.com -y
# 仅渲染不部署 (用于审阅)
bash scripts/deploy-k8s.sh --dry-render --deploy-dir /tmp/cch-k8s -y
详见 docs/k8s-deployment.md。