argocdでSSOしたいときにclientSecretをSealedSecretで保持したい

忘れないうちに概要だけでもメモする。

Motivation

argocdでSSOするときにSSO先のcredential情報を平文でリポジトリにcommitしたくない。

解決方法

argocdのconfigmapからSecretを参照する機能を用い、 さらに参照先のSecretはSealedSecretで管理する。

段取り

  • argocdをシュッと立ち上げる。
  • argocd-secret から server.secretkey を採取する(A)。
  • 使いたいSSOの clientSecret からSecretを生成する(B)。
  • (A)と(B)をマージしたSecretからSealedSecretを生成する。
    • このとき、複合されるSecretの名前が argocd-secret となるように記述する。
  • argocdに元からある argocd-secret にpatchを当て、 sealedsecrets.bitnami.com/managed: "true" のannotationを付与する。
  • argocd-cmclientSecret の値の先頭に $ をつけて、Secretの値を参照できるようにする。
  • applyする。

ハマりポイント

sealedsecrets.bitnami.com/managed: "true" で勝つると思いきや生成タイミングの問題か server.secretkey が消えてしまい、 Unable to load data: server.secretkey is missing と怒られる。

Appendix

argocdのconfigmapからsecretsを参照する機能
https://github.com/argoproj/argo-cd/blob/6d44c4de413c2a5bbc6faf027a86d54a3e2ac8d0/docs/operator-manual/user-management/index.md#2-configure-argo-cd-for-sso

デフォルトで生成される server.secretkey について
https://github.com/argoproj/argo-cd/blob/v1.6.1/docs/operator-manual/argocd-secret.yaml#L21-L23

既存のSecretsを上書きしてSealedSecretでマネージする
github.com