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 статус синхронизации приложения отображается как «Синхронизировано», и бесконечный цикл синхронизации останавливается.