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

64 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Kubernetes development mTLS overlay
该 Overlay 在 base 资源之上启用 Controller 控制面 mTLS并启动一个 Gateway 和
Checker。进程通过 `PROXY_POOL_AUTO_IDENTITY=true` 从各自证书的 URI SAN 派生身份;
它只用于开发或预发布的单副本控制面验证,不是生产弹性身份方案。
## Prepare certificates
先生成未提交的开发证书。输出目录必须为空;生成器的 `controller` 证书包含
`DNS:controller`Overlay 中的客户端也只拨号 `controller:8443`
```powershell
./scripts/generate-local-controlplane-certs.ps1
kubectl apply -f deploy/kubernetes/base/namespace.yaml
```
将生成的三组证书写入 Kubernetes Secret。下面的命令可重复执行只更新对应 Secret
```powershell
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
```powershell
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-a`Checker 从
`checker-a` 证书派生 `checker_id=checker-a`,并把 Gateway HPA 限制为
`minReplicas=maxReplicas=1`。因此不得在此 Overlay 上增加副本数或放宽 HPA重复使用
同一证书和 Worker 身份会破坏 session、ownership 和证书角色边界。
Overlay 的 `proxy-pool-runtime-config` 带内容哈希;修改 `config.yaml`Kustomize 会重写三个
Deployment 的 ConfigMap volume 引用,从而触发 Kubernetes 滚动更新。控制面 TLS 与
`proxy-pool-secrets` 使用外部创建的固定名称 Secret轮换后仍需按运行手册显式滚动对应工作负载。
生产环境需要由工作负载身份系统为每个副本签发独立、可轮换的证书,并将该副本的
身份注入 Gateway Client TLS 或 Checker Client TLS并启用自动身份派生。应用会在每次新
控制面 TLS 握手读取更新后的叶证书和信任根;已有 gRPC 流仍按原会话保留,根轮换时先投放
新旧根的重叠信任包,再按 PDB 滚动排空旧连接。