ほぼほぼ独力で調べ切った後に全く同じ悩みにヒットした方の記事が出てきた。
問題
ArgoCDは自分自身でSecret(argo-secret
)を作成します。
それとは別にSSOの設定などをExternalSecretで用意しようとすると、ExternalSecretによってargo-secret
が再作成されるためArgoCDによって追加された設定が削除されてしまうために正しく起動しなくなります。
- エラー内容 :
Unable to load data: server.secretkey is missing
以下のYamlで規定するやつらが上書きの可能性があるものです。
特にserver.secretkey
はrequiredのため自分自身で追記する必要があります。
解消方法
以下はGCPのSecretManagerを利用している例です。
apiVersion: kubernetes-client.io/v1 kind: ExternalSecret metadata: name: argocd-secret spec: backendType: gcpSecretsManager projectId: XXXX data: - key: argocd-client-secret name: clientSecret version: latest # server.secretkey # 本来はArgoCDによって自動で作成されるのだが、作成したものがExternalSecretによってSecretを再作成 # されたタイミングで消えることでArgoCDが起動しなくなるため適当な値をSecretManagerから受け取る # 値の生成は https://play.golang.org/p/2jsTCzpAkXl で行う # ※ArgoCD本体が生成する関数を移植しただけ - key: argocd-server-secretkey name: server.secretkey version: latest template: metadata: labels: app.kubernetes.io/instance: argocd app.kubernetes.io/name: argocd-secret app.kubernetes.io/part-of: argocd
どんな値を設定すれば良いの?についてはGo PlaygroundにArgoCDで使われていたServerKey
の生成関数を貼り付けておいたので、実行してもらえれば値を入手することができます。
https://play.golang.org/p/2jsTCzpAkXl
別の対応方法
External Secrets Operator を利用するとSecretファイルのMergeが利用できるようです!