こんにちは、vivit株式会社でインフラまわりを担当している井島です。
セルフマネージドSSLの具体的な更新手順とか、ググっても全然出てこなかったので、記事にしてみました。
なにかの参考になればと思います!
背景
あるFQDN(example.com とします。)をGKEのIngressに移行してくるというものなのですが、
移行というものは、Firebase上で動いているサイトを、GKE上に持ってきて、
DNSを変更して、切り替え、というよくある話です。
単純にAレコード切り替えれば済むんじゃね?と思っていたら、意外とマネージドSSLに癖がありました。
GCPマネージドSSLの仕様
ところが、GCPの「マネージドSSL」というものは以下制限がありました。
参考:SSL 証明書の概要 | 負荷分散 | Google Cloud
上記すべてを満たす必要があります。
移行方法
一時的にLet's Encrypt からSSL証明書を取得し、それを一時的にingressで利用することで、FirebaseからGKEに無事、無停止でDNS切替できました。
実際に行った手順を紹介します。
手順
1. https://sslnow.ml/ で example.com のSSL証明書を取得
sslnow.ml 簡単にLet's Encrypt SSL証明書を取得できます。感謝です!
2. 取得したSSL証明書をGCPにセルフマネージドSSLとしてインポート(gcloudコマンド例)
ローカルPCでコマンドを実行します。
gcloud compute ssl-certificates create example-com-ssl-temp --certificate example.com_fullchain.crt --private-key example.com.key
ポイント
- --certificate オプションでSSL証明書を指定するのですが、1つのファイル内単純にSSL証明書、中間SSL証明書の順序で2つの証明書を入れたファイルを指定します。
※中間証明書指定のオプションが無いみたいです。 - ローカルディレクトリにある証明書・鍵ファイルを指定するので、Cloud Shellではできません。
3.Ingress にSSL証明書を適用
kind: Ingress metadata: annotations: ingress.gcp.kubernetes.io/pre-shared-cert: >- example-com-ssl-temp
4. hostsファイル にIngress のIPを指定して、移行先のIngressでSSL証明書が適用されているか確認
12.34.56.78 example.com
5. example.com のAレコードをIngressのIPに変更
6. GCPマネージドSSLを作成
gcloud beta compute ssl-certificates create example-com-ssl --domains exapmle.com
7. 作成したマネージドSSLをIngressに適用
このとき、3で追加したセルフマネージドSSL証明書指定場所より前に設定する。
kind: Ingress metadata: annotations: ingress.gcp.kubernetes.io/pre-shared-cert: >- example-com-ssl,example-com-ssl-temp
こうすることで、マネージドSSLが使われていることがわかるので、この後、安心して一時的に使った証明書を削除できます。
⇢ 同じドメインのSSL証明書をIngressに適用したとき、最初に設定されているSSL証明書が参照されるようです。
8. 3で適用した一時的なSSL証明書をIngressから外す
9. 3で適用した一時的なSSL証明書をGCPから削除する
最後に
一応セルフマネージドSSLからマネージドSSLへの移行方法は、ちらっと書いてありました。 cloud.google.com