Azure Key Vault密钥更新时如何自动重启Pod/Deployment等K8s工作负载
实现AKV密钥更新后自动重启工作负载的方案
如果你已经在使用AzureKeyVaultSecret CRD且不想通过output配置将密钥同步为Kubernetes原生Secret,可以通过以下两种方式实现AKV密钥变更时自动触发Pod/Deployment/StatefulSet滚动重启:
方案1:使用Azure Key Vault Provider for Secrets Store CSI Driver内置特性
该方案无需额外安装第三方组件,依赖官方CSI驱动的原生能力实现:
- 安装CSI驱动时开启密钥自动轮换能力,执行安装命令时添加参数
--set enableSecretRotation=true,可同时通过rotationPollInterval=2m配置AKV变更轮询间隔(默认2分钟)。 - 你的
SecretProviderClass配置无需添加同步K8s Secret的secretObjects字段,仅需在工作负载中通过volumeMount挂载对应CSI卷即可。 - 在需要自动重启的Deployment/StatefulSet的
metadata.annotations中添加配置:secrets-store.csi.k8s.io/secret-rotation-restart: "true",当CSI驱动检测到AKV内对应密钥版本更新时,会自动触发该工作负载的滚动重启,新启动的Pod会直接拉取最新的AKV密钥。
方案2:搭配Reloader组件实现自定义监听
如果需要更灵活的监听和重启规则,可以配合第三方轻量组件Reloader实现:
- 首先在集群中安装Reloader组件,该组件支持监听外部密钥存储的版本变更并触发关联工作负载重启。
- 在需要自动重启的Deployment/StatefulSet的
metadata.annotations中添加如下配置即可:
annotations: reloader.stakater.com/auto: "true" secret.reloader.stakater.com/auto-reload-azure-keyvault: "true"
- 如需仅监听指定的AzureKeyVaultSecret资源避免误重启,可以改为指定匹配规则:
annotations: reloader.stakater.com/search: "true" reloader.stakater.com/match: "你的AzureKeyVaultSecret资源名称"
- Reloader会按配置的轮询间隔检测对应AKV密钥的版本变化,检测到更新后自动触发工作负载滚动重启。
注意事项
- 两种方案都需要确保CSI驱动或Reloader对应的集群访问身份,已经被授予AKV的
secret get、secret list权限,否则无法检测到密钥变更。 - 轮询间隔不建议设置过短,避免触发AKV的请求频率限制,通常2-5分钟是比较合理的配置。
内容的提问来源于stack exchange,提问作者the_eagle
相关产品推荐
相关产品推荐

