Azure AKS中Key Vault CSI驱动同步Kubernetes Secret的配置问题解析
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
在Azure Kubernetes Service (AKS)中使用Key Vault CSI驱动时,许多开发者会遇到一个常见问题:尽管在集群配置中启用了Secret同步功能,但预期的Kubernetes Secret并未自动创建。本文将深入分析这一问题的技术背景和解决方案。
问题现象
当开发者在AKS集群中部署azureKeyvaultSecretsProvider插件时,通常会通过配置参数syncSecret.enabled: 'true'
来期望实现自动将Key Vault中的Secret同步为Kubernetes原生Secret的功能。然而实际部署后发现,即使配置了该参数,预期的Secret同步行为并未发生。
技术原理分析
Key Vault CSI驱动在AKS中的工作流程包含两个关键组件:
- CSI驱动本身:负责将Secret挂载到Pod中
- Secret同步功能:将Key Vault中的Secret转换为Kubernetes原生Secret
通过分析发现,AKS插件配置中的syncSecret.enabled
参数实际上仅控制RBAC权限的配置,而非直接启用Secret同步功能。真正的Secret同步需要在SecretProviderClass资源中显式定义。
正确配置方法
要实现Key Vault Secret到Kubernetes Secret的同步,需要在SecretProviderClass资源中配置secretObjects
部分。以下是一个典型示例配置:
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: azure-tls
namespace: ingress
spec:
provider: azure
secretObjects:
- secretName: ingress-tls-csi
type: kubernetes.io/tls
data:
- objectName: ingresscert
key: tls.key
- objectName: ingresscert
key: tls.crt
parameters:
useVMManagedIdentity: "true"
userAssignedIdentityID: "托管身份客户端ID"
keyvaultName: "密钥保管库名称"
objects: |
array:
- |
objectName: ingresscert
objectType: secret
resourceGroup: "资源组名称"
subscriptionId: "订阅ID"
tenantId: "租户ID"
关键配置说明
-
secretObjects:定义要创建的Kubernetes Secret的规格
secretName
:指定创建的Kubernetes Secret名称type
:定义Secret类型,如普通Secret或TLS证书data
:映射Key Vault对象到Secret中的键值
-
parameters:配置与Azure Key Vault的连接参数
- 身份验证方式(托管身份、Pod身份等)
- Key Vault资源信息
- 要同步的Secret对象定义
最佳实践建议
- 明确区分CSI驱动挂载和Secret同步两种使用场景
- 为不同类型的Secret(如证书、密钥等)创建专门的SecretProviderClass
- 合理规划命名空间布局,将SecretProviderClass与使用它的工作负载部署在同一命名空间
- 定期检查同步状态,可通过Kubernetes事件或CSI驱动日志进行监控
通过正确理解Key Vault CSI驱动的工作机制并合理配置SecretProviderClass,开发者可以灵活地在AKS中实现Key Vault Secret到Kubernetes原生Secret的自动同步,从而满足不同应用场景的需求。
AKS Azure Kubernetes Service 项目地址: https://gitcode.com/gh_mirrors/ak/AKS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考