Att*_*ila 3 yaml kubernetes kustomize argocd sealedsecret
我正在尝试使用ArgoCD和Kustomize配置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”状态而继续同步?(这似乎是由未密封秘密中的解密数据引起的 - 如上面屏幕截图中的差异所示。)
可以忽略一些差异。
这可以在 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
秘密)。
避免应用更改也很重要。这可以使用RespectIgnoreDifferences
syncOption 来定义。
添加 Secret 类型的ignoreDifferences 条目并将RespectIgnoreDifferences 设置为true 后,应用程序的同步状态显示为“已同步”,同步的无限循环已停止。