跳到主要内容
版本:3.7.0

更新 webhook 证书

概述

Bonree Operator 使用 webhook 证书来确保 Kubernetes 环境中服务注入的安全性。这些证书包括 CA 证书和服务端证书,用于在 Kubernetes API Server 和 Bonree Webhook 服务之间建立安全的 HTTPS 通信。

通常情况下,证书会自动管理并定期更新,但在某些特定场景下,您可能需要手动更新证书,例如:

  • 证书过期且自动更新失败时
  • 安全策略要求定期手动更新证书时
  • 使用 kubernetes-webhook-only.yaml 部署且部署在非 bonree-agent 命名空间时(不支持自动更新证书)
  • Operator 无权限修改 MutatingWebhookConfiguration

本文档将详细介绍证书的构成、过期策略以及如何手动更新证书。


Webhook 证书构成

CA 证书(caBundle)

存储在 MutatingWebhookConfigurationclientConfig.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。


证书生成

  1. 下载 bonree-certs.zip

  2. 运行脚本

    在 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
  • 脚本会在生成新证书后,将新的 caBundletls.crttls.key 自动更新到指定 YAML 文件对应字段中