proxy-pool/deploy/kubernetes/overlays/development-mtls/README.md

3.3 KiB
Raw Blame History

Kubernetes development mTLS overlay

该 Overlay 在 base 资源之上启用 Controller 控制面 mTLS并启动一个 Gateway 和 Checker。进程通过 PROXY_POOL_AUTO_IDENTITY=true 从各自证书的 URI SAN 派生身份; 它只用于开发或预发布的单副本控制面验证,不是生产弹性身份方案。

Prepare certificates

先生成未提交的开发证书。输出目录必须为空;生成器的 controller 证书包含 DNS:controllerOverlay 中的客户端也只拨号 controller:8443

./scripts/generate-local-controlplane-certs.ps1
kubectl apply -f deploy/kubernetes/base/namespace.yaml

将生成的三组证书写入 Kubernetes Secret。下面的命令可重复执行只更新对应 Secret

kubectl -n proxy-pool create secret generic proxy-pool-controlplane-server-tls `
  --from-file=tls.crt=deploy/.control-plane-tls/controller/tls.crt `
  --from-file=tls.key=deploy/.control-plane-tls/controller/tls.key `
  --from-file=ca.crt=deploy/.control-plane-tls/controller/ca.crt `
  --dry-run=client -o yaml | kubectl apply -f -

kubectl -n proxy-pool create secret generic proxy-pool-controlplane-gateway-tls `
  --from-file=tls.crt=deploy/.control-plane-tls/gateway-a/tls.crt `
  --from-file=tls.key=deploy/.control-plane-tls/gateway-a/tls.key `
  --from-file=ca.crt=deploy/.control-plane-tls/gateway-a/ca.crt `
  --dry-run=client -o yaml | kubectl apply -f -

kubectl -n proxy-pool create secret generic proxy-pool-controlplane-checker-tls `
  --from-file=tls.crt=deploy/.control-plane-tls/checker-a/tls.crt `
  --from-file=tls.key=deploy/.control-plane-tls/checker-a/tls.key `
  --from-file=ca.crt=deploy/.control-plane-tls/checker-a/ca.crt `
  --dry-run=client -o yaml | kubectl apply -f -

另行从私密配置系统创建 proxy-pool-secrets。可参考 base 目录的 secret.example.yaml但不要把实际数据库、Redis、Provider 或 API 凭据写入 Git。

Deploy

kubectl apply -k deploy/kubernetes/overlays/development-mtls
kubectl -n proxy-pool rollout status deployment/proxy-controller --timeout=5m
kubectl -n proxy-pool rollout status deployment/proxy-gateway --timeout=5m
kubectl -n proxy-pool rollout status deployment/proxy-checker --timeout=5m

Overlay 的 Gateway 从 gateway-a 证书派生 worker_id=gateway-aChecker 从 checker-a 证书派生 checker_id=checker-a,并把 Gateway HPA 限制为 minReplicas=maxReplicas=1。因此不得在此 Overlay 上增加副本数或放宽 HPA重复使用 同一证书和 Worker 身份会破坏 session、ownership 和证书角色边界。

Overlay 的 proxy-pool-runtime-config 带内容哈希;修改 config.yamlKustomize 会重写三个 Deployment 的 ConfigMap volume 引用,从而触发 Kubernetes 滚动更新。控制面 TLS 与 proxy-pool-secrets 使用外部创建的固定名称 Secret轮换后仍需按运行手册显式滚动对应工作负载。

生产环境需要由工作负载身份系统为每个副本签发独立、可轮换的证书,并将该副本的 身份注入 Gateway Client TLS 或 Checker Client TLS并启用自动身份派生。应用会在每次新 控制面 TLS 握手读取更新后的叶证书和信任根;已有 gRPC 流仍按原会话保留,根轮换时先投放 新旧根的重叠信任包,再按 PDB 滚动排空旧连接。