You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git推送时ArgoCD因自动生成证书/密码频繁不同步的问题求助

解决ArgoCD同步Bitnami Helm Chart时重复生成密码/证书的问题

问题核心:Bitnami的Kafka、MongoDB等Helm Chart会自动生成密码、TLS证书这类动态资源,但这类资源不会被提交到Git仓库。ArgoCD同步时会对比Git期望状态与集群实际状态,判定这些资源为out-of-sync,同步后会重新生成密码/证书,导致依赖服务连接失败。

以下是几种可行的解决方案:

方案1:提前创建Secret,让Chart复用现有敏感资源

Bitnami官方Chart提供了existingSecret、existingCertificates等参数,可以指定预先创建的Secret来存储密码、证书,避免Chart自动生成新资源。

MongoDB配置示例:

auth:
  enabled: true
  # 指定已存在的Secret,需提前在集群中创建,包含所需密码字段
  existingSecret: "mongodb-auth-secret"

Kafka配置示例:

auth:
  interBrokerProtocol: tls
  controllerProtocol: tls
  clientProtocol: tls
  sasl:
    interBrokerMechanism: scram-sha-512
  tls:
    type: pem
    autoGenerated: false
    # 指定已存在的TLS证书Secret
    existingCertificates:
      - secretName: kafka-tls-secret
        certificate: tls.crt
        key: tls.key
        caCertificate: ca.crt
  # SASL密码同样可以指定existingSecret
  sasl:
    existingSecret: "kafka-sasl-secret"

这种方式完全掌控敏感资源的生命周期,ArgoCD不会因为动态生成的内容触发不必要的同步。

方案2:配置ArgoCD忽略敏感资源的差异

在ArgoCD的Application配置中添加ignoreDifferences规则,让ArgoCD忽略自动生成的Secret/ConfigMap中的动态内容差异,不再标记为out-of-sync,同步时也不会覆盖这些内容。

Application配置示例:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: kafka-app
spec:
  destination:
    server: "https://kubernetes.default.svc"
    namespace: kafka
  project: default
  source:
    repoURL: "https://charts.bitnami.com/bitnami"
    chart: kafka
    targetRevision: 26.x.x
    helm:
      values:
        auth:
          interBrokerProtocol: tls
          controllerProtocol: tls
          clientProtocol: tls
          sasl:
            interBrokerMechanism: scram-sha-512
          tls:
            type: pem
            autoGenerated: true
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
  # 添加忽略差异规则
  ignoreDifferences:
    # 忽略Kafka TLS证书Secret的内容差异
    - group: ""
      kind: Secret
      name: kafka-tls
      jsonPointers:
        - /data/tls.crt
        - /data/tls.key
        - /data/ca.crt
    # 忽略Kafka SASL密码Secret的内容差异
    - group: ""
      kind: Secret
      name: kafka-secrets
      jsonPointers:
        - /data/client-password
        - /data/inter-broker-password

注意:需根据实际集群中Secret的名称调整name字段,可通过kubectl get secrets -n <namespace>查看。

方案3:启用ArgoCD的ReuseValues同步选项

在Application的同步策略中添加ReuseValues=true,让Helm在升级时重用之前发布的Values(包括Chart自动生成的密码/证书参数),避免重新生成。

配置示例:

spec:
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - ReuseValues=true

这种方式操作简单,但需注意:如果后续需要修改Chart的核心配置,可能需要手动清理旧Values或重新生成敏感资源,存在一定兼容性风险。

方案4:将敏感资源同步到Git(不推荐)

通过自定义脚本或工具,将集群中自动生成的Secret内容同步回Git仓库,并配合Git加密(如Git-Crypt)存储敏感信息。这种方式能让Git期望状态与集群实际状态一致,但会将敏感信息存入版本控制系统,风险较高,仅在特殊场景下考虑使用。


内容的提问来源于stack exchange,提问作者Linux Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:06:19