フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

ArgoCDとExternalSecretを併用するときにSecret上書き問題を解消する

f:id:lirlia:20210908212040p:plain

ほぼほぼ独力で調べ切った後に全く同じ悩みにヒットした方の記事が出てきた。

問題

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

f:id:lirlia:20210908211625p:plain

別の対応方法

External Secrets Operator を利用するとSecretファイルのMergeが利用できるようです!