ArgoCD с Sealed Secrets и Kustomize

Я пытаюсь настроить Bitnami SealedSecrets с помощью ArgoCD и Kustomize.

Мне удалось зашифровать секреты с помощью интерфейса командной строки kubeseal, они уже развернуты в кластере Kubernetes как запечатанные секреты и могут быть распечатаны с помощью контроллера запечатанных секретов, работающего в кластере. Незапечатанные секреты содержат ожидаемые значения. Я определил секреты с помощью генераторов секретов Kustomize — как описано в этом руководстве: Запечатывание секретов с помощью Kustomize. Это также работает нормально, так как ArgoCD распознает, что должны быть сгенерированы секреты.

Однако ArgoCD ожидает, что секреты будут пустыми, поскольку они определены как пустые в части генератора секретов моего kustomization.yaml для приложения:

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

Поскольку ArgoCD ожидает, что секреты будут пустыми, они обнаруживаются как «несинхронизированные» после того, как Контроллер запечатанных секретов распечатывает и расшифровывает секреты:

Поскольку ArgoCD считает, что секреты должны быть пустыми, они заменяются пустыми секретами. Затем оператор запечатанных секретов еще раз обновляет секреты и заполняет поля данных расшифрованными данными, что приводит к бесконечному циклу синхронизации ArgoCD.

Секреты помечены для управления Bitnami Sealed Secrets с использованиемsealedsecrets.bitnami.com/managed: "true"аннотация. Поэтому они обновляются контроллером Sealed Secrets.

Как я могу изменить манифест, чтобы убедиться, что незапечатанные секреты распознаются как «синхронизированные», а ArgoCD не продолжает синхронизацию из-за статуса «OutOfSync» незапечатанных секретов? (Похоже, это вызвано расшифрованными данными в незапечатанных секретах — как показано в разнице на скриншоте выше.)

1 ответ

На некоторые отличия можно не обращать внимания.

Это можно определить в манифесте приложения ArgoCD:

      apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
...
spec:
  project: my-project
  ...
  syncPolicy:
    ...
    syncOptions:
    ...
    - RespectIgnoreDifferences=true
  ...
  ignoreDifferences:
  - kind: Secret
    jsonPointers:
    - /data

The ignoreDifferencesСпецификация указывает ArgoCD игнорировать различия в указанном пути. (В нашем случае все под/dataдля секретов).

Также важно избегать применения изменений. Это можно определить с помощьюRespectIgnoreDifferencesопция синхронизации.

После добавления записи ignoreDifferences для типа Secret и установки для RespectIgnoreDifferences значения true статус синхронизации приложения отображается как «Синхронизировано», и бесконечный цикл синхронизации останавливается.

Другие вопросы по тегам