ArgoCD 具有密封秘密和 Kustomize

Att*_*ila 3 yaml kubernetes kustomize argocd sealedsecret

我正在尝试使用ArgoCDKustomize配置Bitnami SealedSecrets

我已成功使用 kubeseal CLI 对机密进行加密,这些机密已作为密封机密部署在 Kubernetes 集群上,并且可以通过集群上运行的密封机密控制器来解封。未密封的 Secret 包含预期值。我已经使用 Kustomize Secret Generators 定义了秘密 - 如本教程中所述:使用 Kustomize 密封秘密。这也工作正常,因为 ArgoCD 认识到应该生成 Secret。

但是,ArgoCD 希望机密为空,因为它们在应用程序的 kustomization.yaml 的 Secret Generator 部分中被定义为空:

secretGenerator:
- name: secret1
  type: Opaque
- name: secret2
  type: Opaque
- name: secret3
  type: Opaque
... 

Run Code Online (Sandbox Code Playgroud)

由于 ArgoCD 期望秘密为空,因此在密封秘密控制器解封并解密秘密后,它们被检测为“不同步”:

秘密不同步

由于 ArgoCD 认为秘密应该为空,因此这些秘密被替换为空秘密。然后,Sealed Secrets Operator 再次更新 Secret,并用解密的数据填充数据字段 - 导致 ArgoCD 同步的无限循环。

这些秘密被标记为由 Bitnami Sealed Secrets 使用注释进行管理sealedsecrets.bitnami.com/managed: "true"。因此,它们正在由“密封的秘密”控制器进行更新。

我如何更改清单以确保未密封的秘密被识别为“同步”,并且 ArgoCD 不会由于未密封的秘密的“OutOfSync”状态而继续同步?(这似乎是由未密封秘密中的解密数据引起的 - 如上面屏幕截图中的差异所示。)

Att*_*ila 6

可以忽略一些差异。

这可以在 ArgoCD 应用程序清单中定义:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
...
spec:
  project: my-project
  ...
  syncPolicy:
    ...
    syncOptions:
    ...
    - RespectIgnoreDifferences=true
  ...
  ignoreDifferences:
  - kind: Secret
    jsonPointers:
    - /data
Run Code Online (Sandbox Code Playgroud)

规范ignoreDifferences告诉 ArgoCD 忽略指定路径中的差异。(在我们的例子中,一切都是/data秘密)。

避免应用更改也很重要。这可以使用RespectIgnoreDifferencessyncOption 来定义。

添加 Secret 类型的ignoreDifferences 条目并将RespectIgnoreDifferences 设置为true 后,应用程序的同步状态显示为“已同步”,同步的无限循环已停止。