使用akv2k8s同步AKV密钥到K8s时出现secret-inject@azurekeyvault无限等待问题
问题原因
- 首先AKVS(AzureKeyVaultSecret)资源同步失败,从
kubectl get akvs的输出可以看到SYNCHED列为空,说明控制器没有成功将Azure Key Vault中的密钥同步为Kubernetes Secret,导致后续引用该Secret的Pod无法启动。 - AKVS配置与实际资源不匹配:
- 配置中声明的密钥保管库名称为
akv2k8s-butfa,但实际查询到的关联保管库为akv2k8s-test-butfa - 配置中声明的密钥对象名为
myusername,但实际查询到的关联密钥对象为mysecret
- 配置中声明的密钥保管库名称为
- 命名空间不匹配:AKVS资源创建在
akv-test-butfa命名空间,但查询命令使用的是-n akv-test,控制器可能无法正确识别跨命名空间的资源权限。 - Deployment配置逻辑矛盾,同时混用了akv2k8s的两种使用方式:
- 既使用了
xxx@azurekeyvault的直接注入语法,但引用的AKVS名称secret-inject与实际创建的secret-sync不符 - 又配置了
envFrom引用未生成的my-secret-from-butfaSecret,且标记为非可选(Optional: false),Secret不存在时Pod会直接启动失败
- 既使用了
- 测试镜像
spvest/akv2k8s-env-test:2.0.1要求TEST_SECRET环境变量必须存在有效值,否则会直接退出报错,触发CrashLoopBackOff。
解决方法
- 修正AKVS资源配置
调整AzureKeyVaultSecret的yaml文件,保证所有字段和实际资源匹配:
apiVersion: spv.no/v2beta1 kind: AzureKeyVaultSecret metadata: name: secret-sync namespace: akv-test-butfa spec: vault: name: akv2k8s-test-butfa # 修正为实际的密钥保管库名称 object: name: mysecret # 修正为实际的密钥对象名称 type: secret output: secret: name: my-secret-from-butfa dataKey: secret-value
重新应用配置:
kubectl apply -f <your-akvs-yaml-file-path> -n akv-test-butfa
- 验证AKVS同步状态
执行以下命令查看同步状态,等待SYNCHED列显示为True再进行后续操作:
kubectl get akvs -n akv-test-butfa
如果长期未同步成功,查看akv2k8s控制器日志排查权限问题:
kubectl logs -l app.kubernetes.io/name=akv2k8s-controller -n akv2k8s
- 修正Deployment配置,二选一使用akv2k8s能力
不要混用两种密钥获取方式,选择其中一种即可:
- 方案A:使用同步生成的Kubernetes Secret
apiVersion: apps/v1 kind: Deployment metadata: name: akvs-secret-app namespace: akv-test-butfa labels: app: akvs-secret-app spec: selector: matchLabels: app: akvs-secret-app template: metadata: labels: app: akvs-secret-app spec: containers: - name: akv2k8s-env-test image: spvest/akv2k8s-env-test:2.0.1 args: ["TEST_SECRET"] env: - name: TEST_SECRET valueFrom: secretKeyRef: name: my-secret-from-butfa key: secret-value - 方案B:使用akv2k8s直接环境变量注入(无需提前创建AKVS资源)
首先开启目标命名空间的注入开关:
调整Deployment配置:kubectl label namespace akv-test-butfa azure-key-vault-env-injection=enabledapiVersion: apps/v1 kind: Deployment metadata: name: akvs-secret-app namespace: akv-test-butfa labels: app: akvs-secret-app spec: selector: matchLabels: app: akvs-secret-app template: metadata: labels: app: akvs-secret-app spec: containers: - name: akv2k8s-env-test image: spvest/akv2k8s-env-test:2.0.1 args: ["TEST_SECRET"] env: - name: TEST_SECRET value: "mysecret@azurekeyvault?vault=akv2k8s-test-butfa"
- 重新部署验证
应用修改后的Deployment配置,查看Pod状态:
kubectl apply -f <your-deployment-yaml-path> -n akv-test-butfa kubectl get pods -n akv-test-butfa
内容的提问来源于stack exchange,提问作者Thanh Nguyen Van
相关产品推荐
相关产品推荐

