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