4年ほど本番運用してきたGoogle Kubernetes Engine。4年の間で変化し続けてきた弊社のIngress周りの歴史

きづけば2021年ですね。12月末に書いたこの記事は年末休暇の関係で、公開がこのタイミングになりました。あけましておめでとうございます。 今回は、マネーフォワードケッサイが利用しているGCP/GKEのIngreeまわりを振り返ってみたいとおもいます。

創業初期

2017年3月時点ではGCPには証明書を自動的に作成する仕組みがなかった事もありますが、まだまだ証明証は信用の為にEVを買うという考えが強かったので、EV証明書とワイルドカード証明書を購入してIngressに設定してました。

証明書の自動作成と更新できるように

ユーザが利用するドメインのみ購入した証明書を使い、社内利用のドメインは、cert-managerを利用して作成したLet’s Encriptの証明書を利用する形に変更しました。

Google Managed SSLの利用開始

Google Managed SSLのサポートが始まりましたので、cert-manager卒業しました。これでGKEのリソースを少しは解放できましたね。

WAFサービスCloud Armorを導入

WEBサイトは常に、DDoS攻撃やSQLインジェクション攻撃など多くのリスクにさらされています。脆弱性診断等である程度のリスクを事前に検出できるものの、日々変更されるアプリケーションで常に完璧を維持し続けることは簡単ではありません。そこで補助的なツールとして、WAFに任せられる範囲はまかせてしまおうという考えでCloud Armorを導入しました。

DNS管理をCloudflareに変更

これまではHTTPSリダイレクトを始めとする様々なネットワーク関連の課題を、アプリケーションレイヤで解決していました。しかし可能であればHTTPSリダイレクトやWAFなどはアプリケーションへの到達する前に解決したいと考えました。そこでそのための手段としてCloudflareの採用を決めて、まずDNS管理をCloud DNSからCloudflareに変更しました。 DNS管理だけなら無料なんですねと驚いた記憶。

ネットワーク周りの課題をCloudflare Proxyに任せる

ネットワークレイヤで解決したい課題を解決する為に、まずはCloudflare Proxy経由に変更する必要があります。基本変更するだけでOKなので、気軽にON。特に副作用なく移行はできました。

Proxyの利用によってGoogle Managed SSLに課題が生まれた

移行は問題なかったのですが、Google Managed SSLが更新されなくなりました。理由は簡単でDNSに登録されているレコード名とIPの組み合わせが、GCP LBを指していない事が原因です。Proxyを利用し続ける為には、GCP Managed SSLを卒業する必要が生まれました。

cert-managerの復活

そしておかえりcert-managerのDNS-01チャレンジを行う事で名前解決後のIPがLBである必要も、HTTPを開けておく必要も無いため、今回の目的としては最適だと判断してcert-managerを復活させました。これで証明書が常に更新されるため、UAとCloudflare間はもちろん、CloudflareからオリジンサーバであるGCPまでもHTTPS通信が継続的に行える状態となりました。

Cloudflare Origin CAを利用する

Cloudflareに署名された証明書に関して説明がありますが、CFによって署名された証明書を利用する事で、CloudflareとOrigin間でのHTTPS通信が発生する際のコストが最小化されるためProxy経由でもパフォーマンスを大幅に劣化させること無く運用することが可能になります。

この構成ではGCP LBのIPが知られて迂回されてリクエストされるリスクは当然存在していますが、その場合のリスクはCloudflareを経由させてない状態とは変わらないという考えです。もともとhttpを許可していてLBより先のk8s側でhttpsリダイレクトを実現していた事を考えると、多少はリスク軽減と言えるのかもしれませんが。

そしてここまでの構成を実現しても無料です。驚きです。

オリジンへのアクセス経路を封鎖して、Cloudflareからのみ受け付ける

これはまだ未来ですが最終的にはオリジンに直接アクセスできる道は無いほうが安全です。そのためCloudflareが提供している Argo Tunnelを利用してよりセキュアにアプリケーションを提供できる状態にしたいと思っています。

さすがに、Argo Tunnelを使うレベルは有料ですが、それでもオリジンをセキュアに出来るメリットは良いと思いました。

最後に

クラウドネイティブやコンテナネイティブという言葉が使われるようになり、SaaSやKubernetesの利用企業がますます増えてきていると思っています。今回のCloudflareを使うまでの流れなどが良くも悪くも参考になればとても嬉しいです。 今年もよろしくおねがいします。