OpenShift集群中ArgoCD+Kustomize结合AVP配置遇阻求助
ArgoCD + Kustomize + argocd-vault-plugin 配置修复指南
问题概述
在OpenShift集群中使用ArgoCD结合Kustomize管理项目时,无法通过argocd-vault-plugin(AVP)从Vault读取Secrets数据:
- Secrets中的数据始终显示为
<password>,未被Vault值替换 - 出现错误提示:
cmp-server plugin with name "argocd-vault-plugin" supporting the given repository
当前使用的AVP CMP插件ConfigMap配置如下:
kind: ConfigMap apiVersion: v1 metadata: name: cmp-plugin namespace: argocd data: avp.yaml: | apiVersion: argoproj.io/v1alpha1 kind: ConfigManagementPlugin metadata: name: argocd-vault-plugin spec: allowConcurrency: true discover: find: command: - sh - "-c" - "find . -name '*.yaml'" generate: command: - argocd-vault-plugin - generate - "." lockRepo: false
故障分析
- Discover规则冲突:当前插件的
discover命令匹配所有YAML文件,与Kustomize默认处理流程冲突,ArgoCD无法区分需AVP处理的文件。 - 插件部署不完整:AVP的CMP插件未正确挂载到argocd-repo-server的Pod中,导致ArgoCD无法发现该插件。
- 应用未指定使用AVP插件:ArgoCD Application未配置调用
argocd-vault-plugin,AVP未被触发执行。 - AVP环境配置缺失:未提供Vault连接所需的地址、认证信息等环境变量,AVP无法访问Vault。
修复步骤
1. 修正CMP插件的Discover规则
修改ConfigMap中的discover命令,仅匹配包含AVP注解的YAML文件,避免与Kustomize冲突:
kind: ConfigMap apiVersion: v1 metadata: name: cmp-plugin namespace: argocd data: avp.yaml: | apiVersion: argoproj.io/v1alpha1 kind: ConfigManagementPlugin metadata: name: argocd-vault-plugin spec: allowConcurrency: true discover: find: command: - sh - "-c" - "find . -type f \\( -name '*.yaml' -o -name '*.yml' \\) | xargs grep -l 'avp\\.kubernetes\\.io/' || true" generate: command: - argocd-vault-plugin - generate - "." lockRepo: false
执行更新:
oc apply -f cmp-plugin.yaml -n argocd
2. 确保AVP插件挂载到argocd-repo-server
检查argocd-repo-server的Deployment,确认已挂载上述ConfigMap到CMP插件目录:
apiVersion: apps/v1 kind: Deployment metadata: name: argocd-repo-server namespace: argocd spec: template: spec: volumes: - name: cmp-plugin configMap: name: cmp-plugin containers: - name: argocd-repo-server volumeMounts: - name: cmp-plugin mountPath: /home/argocd/cmp-server/plugins/avp.yaml subPath: avp.yaml
更新Deployment:
oc apply -f argocd-repo-server.yaml -n argocd
3. 配置ArgoCD应用使用AVP插件
在ArgoCD Application的spec.source中指定使用argocd-vault-plugin:
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: your-app-name namespace: argocd spec: source: repoURL: <你的Git仓库地址> targetRevision: HEAD path: <项目路径> plugin: name: argocd-vault-plugin destination: server: https://kubernetes.default.svc namespace: <目标命名空间>
应用配置:
oc apply -f your-app.yaml -n argocd
4. 配置AVP的Vault连接参数
在argocd-repo-server的Deployment中添加Vault所需的环境变量(以Kubernetes auth为例):
apiVersion: apps/v1 kind: Deployment metadata: name: argocd-repo-server namespace: argocd spec: template: spec: containers: - name: argocd-repo-server env: - name: VAULT_ADDR value: "https://your-vault-address:8200" - name: VAULT_K8S_ROLE value: "argocd-role" - name: VAULT_AUTH_PATH value: "kubernetes"
如果使用Token认证,可将Token存储在Secret中并挂载:
env: - name: VAULT_TOKEN valueFrom: secretKeyRef: name: vault-token key: token
5. 验证OpenShift权限
确保argocd-repo-server使用的ServiceAccount具有访问Vault的权限:
- 在Vault中绑定Kubernetes角色到argocd的ServiceAccount
- 确保argocd-repo-serviceaccount有足够权限读取挂载的Secret/ConfigMap
验证方法
- 查看CMP插件日志,确认AVP执行情况:
oc logs -n argocd deployment/argocd-repo-server -c cmp-server
- 本地测试AVP生成命令,验证Vault值是否能正确替换:
argocd-vault-plugin generate /path/to/your/git/repo
- 查看ArgoCD应用同步状态,检查Secrets是否已正确填充Vault中的值:
oc get secret your-secret-name -n <目标命名空间> -o jsonpath='{.data.password}' | base64 -d
内容的提问来源于stack exchange,提问作者Rafael Ferreira
相关产品推荐
相关产品推荐

