お元気そうで残念です

もんじゃ焼きが転がってるところにいます。

GKE-Ingress 証明書 更新戦略

更新生存戦略
https://open.spotify.com/album/2Fw3VZd6KUqysskSzyV4px?autoplay=true&v=L

概要

GKE-Ingressを利用するサービスで、サーバ証明書をどのように管理・更新するのか検討した際の覚書です。
GKE-Ingressでの証明書には2パターンあり、セルフマネージド証明書を利用するパターンと、GCPのマネージド証明書を利用するパターンがあります。

Creating and Using SSL Certificates

注意点としては、GCPのマネージド証明書ではワイルドカード証明書が発行できないため、ワイルドカード証明書を利用するサービスでは選択肢は一つしか無いということですね。

セルフマネージド証明書を利用する場合、
GCPにアップロードしてmanifestでそちらを見に行く方法と、secretリソースとしてapplyしてそちらを見に行く方法の2種類がありますが、ここではsecretリソースとして利用する方法のみに言及します。
理由としては、GCPにアップロードしても更新手順は大差がないこと、secretリソースにしたほうがカスタマイズがしやすいことなどです。

結論としては、

  • 普通のDV証明書でいいならGCPのマネージド証明書を利用するパターンが断然楽。
  • ワイルドカード証明書が必要であれば、セルフマネージド証明書を利用するパターンしかない。

メリット

セルフマネージド証明書を利用するパターン

GCPのマネージド証明書を利用するパターン

  • CRDを利用することで自動更新してくれる。

デメリット

セルフマネージド証明書を利用するパターン

  • 自動更新は自分で頑張る必要あり。
  • 期限切れをしっかり監視しましょう。

GCPのマネージド証明書を利用するパターン

登録方法

セルフマネージド証明書を利用するパターン

  • 証明書を購入します。
  • 証明書をsecretリソースとしてGKEにapplyします。cert-2020-02-20のように有効期限をリソース名に入れておきましょう。
  • 静的IPをTerraformなどで確保 & 静的IPとドメインの対応付けをTerraformでやっておきます。
  • secretの証明書を利用するようにIngressのmanifestを書いてGKEにApplyします。

GCPのマネージド証明書を利用するパターン

  • 静的IPをTerraformなどで確保 & 静的IPとドメインの対応付けをTerraformでやっておきます。
  • CRDであるManagedCertificateをGKEにapplyします。
  • ManagedCertificateのannotationをつけてIngressをapplyします。

参考: Google マネージド SSL 証明書の使用

更新方法

セルフマネージド証明書を利用するパターン

  • 新しい証明書を購入します。
  • 新しくsecretリソースとしてapplyします。
  • 新しい証明書を利用するようにingressに書き加えてapplyします。古い証明書をここで削除しないように注意してください。
  • ingressが更新されたことを確認します。
  • 古い証明書への参照をingressから消してapplyします。
  • ingressが更新されたことを確認します。
  • 古い証明書のsecretリソースを削除します。

GCPのマネージド証明書を利用するパターン

すべてManagedCertificateがやってくれました。

その他

証明書の期限監視

  • mackarelやdatadogの外形監視などが有能。

セルフマネージド証明書の更新時に同じ名前でapplyするのは危険

新しい証明書をIngressと紐付ける際に同じ名前でapplyすると、付替え時に一時的に証明書が存在しない時間が発生する可能性があるので注意してください。

参考