更新 webhook 证书
概述
Bonree Operator 使用 webhook 证书来确保 Kubernetes 环境中服务注入的安全性。这些证书包括 CA 证书和服务端证书,用于在 Kubernetes API Server 和 Bonree Webhook 服务之间建立安全的 HTTPS 通信。
通常情况下,证书会自动管理并定期更新,但在某些特定场景下,您可能需要手动更新证书,例如:
- 证书过期且自动更新失败时
- 安全策略要求定期手动更新证书时
- 使用
kubernetes-webhook-only.yaml部署且部署在非bonree-agent命名空间时(不支持自动更新证书) - Operator 无权限修改
MutatingWebhookConfiguration时
本文档将详细介绍证书的构成、过期策略以及如何手动更新证书。
Webhook 证书构成
CA 证书(caBundle)
存储在 MutatingWebhookConfiguration 的 clientConfig.caBundle 字段中,用于 Kubernetes ApiServer 在通过 Service 回调 Webhook 服务时校验证书并签名 HTTPS 请求。
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
webhooks:
- admissionReviewVersions:
- v1beta1
- v1
clientConfig:
caBundle: {CABUNDLE}
service:
name: bonree-webhook
namespace: bonree-agent
path: /inject
服务端证书与私钥(tls.crt、tls.key)
用于 bonree-webhook Deployment 校验 Mutating 请求的合法性,存储于 Secret bonree-webhook-certs 中:
apiVersion: v1
kind: Secret
metadata:
name: bonree-webhook-certs
namespace: bonree-agent
type: Opaque
data:
tls.crt: {tls.crt}
tls.key: {tls.key}
证书过期策略
根据权限的不同,分以下2种场景。
具备当前命名空间下的Secret读写权限
如果没有提前配置Secret证书,证书会在运行时动态生成:
- CA 证书有效期:1 年
- 服务端证书(tls.crt)有效期:7 天
控制器每 6 小时检测一次证书有效性,若证书即将过期或已失效,则会自动更新。
也可通过手动删除 Secret 触发更新:
kubectl delete secret bonree-webhook-certs -n bonree-agent
无当前命名空间下的Secret读写权限
部署 Webhook 时,命名空间固定为 bonree-agent。如需修改命名空间,必须重新生成证书。
默认生成的CA证书有效期为 10 年,到期后需手动重新生成并更新部署 YAML。
证书生成
-
运行脚本
在 linux amd64环境下执行脚本# 解压工具包
tar xf bonree-certs.zip
cd bonree-certs
# 生成用于命名空间 <namespace> 中 <expireYears> 年到期的证书,保存至 certs/ 目录,并同步更新配置至 <yamlFilePathToUpdate>
bash renewCerts.sh <namespace> <expireYears> <yamlFilePathToUpdate>
参数说明
<namespace>
- 默认值:
bonree-agent - 指定证书所属的命名空间
- 如果在其他命名空间部署 Webhook(如
test-namespace),则需要使用该命名空间重新签发证书
<expireYears>
- 默认值:10
- 证书有效期(单位:年)
<yamlFilePathToUpdate> 【可选】
- webhook 部署YAML文件路径,如
kubernetes-webhook-only.yaml - 脚本会在生成新证书后,将新的
caBundle、tls.crt、tls.key自动更新到指定 YAML 文件对应字段中