GKE Ingressが「Quota ‘SSL_CERTIFICATES’ exeeded. Limit: 30.0」で作れなくなった話

こんにちは、GMOアドマーケティングのmizkichです。
アドテクなマイクロサービスをGCPのKubernetesで運用しています。

いままで問題なく動いていたGKE Ingressが、本日から急に動かなくなりました。
軽くハマったので、その解決策を共有します。

障害内容

弊社のGKEな検証環境は、毎週週末にクラスタ毎削除され、週明けに新規で作成しています。

今週も同じようにクラスタから作成しようと環境構築スクリプトを実行したところ、以下のエラーでIngressが起動しなくなりました。

Error during sync: Error running load balancer syncing routine: Cert creation failures – k8s-ssl-2abe7bb9e64f07e4-bd531138b8f2c9f9–bb9132f549849d79 Error:googleapi: Error 403: Quota ‘SSL_CERTIFICATES’ exceeded. Limit: 30.0 globally., quotaExceeded,k8s-ssl-2abe7bb9e64f07e4-598ecb166b350f45–bb9132f549849d79 Error:googleapi: Error 403: Quota ‘SSL_CERTIFICATES’ exceeded. Limit: 30.0 globally., quotaExceeded,k8s-ssl-2abe7bb9e64f07e4-d6cd43e07c2ff6ab–bb9132f549849d79 Error:googleapi: Error 403: Quota ‘SSL_CERTIFICATES’ exceeded. Limit: 30.0 globally., quotaExceeded

Error 403: Quota ‘SSL_CERTIFICATES’ exceeded. Limit: 30.0 globally.」と出ているので、
SSL証明書の登録が規定の30件に達したためにIngressが作れないと読み取れます。

GKEはクラスタから新規作成しています。
このGCPプロジェクトには、今回新規作成したクラスタ以外の用途には利用していません。
このGKEでは、IngressのSSL証明書は3つしか登録していません。

この問題は、GCPに何かしらのゴミが残っているのが原因だと推測しました。

 

調査

調査をしやすくするため、まずはGKE Clusterを削除しました。
完全にクラスタが削除されたのを確認し、GCP内のゴミを確認します。

(GKE – Kubernetes clusters)

(GLB – Load balancing)

(GCE – Instance groups)

ゴミが残りがちなサービスは、全て空でした。

次に、検索窓から「SSL」を検索してみます。
すると、大量のSSLのゴミが見つかりました。

検索結果からSSL証明書に飛んでみます。

(GLB – Certificate details)

SSL CertificateがLoad balancingに所属していることがわかります。
しかしLoad balancing画面には”Load balancers”, “Backends”, “Frontends”の三つのカテゴリしか表示されていません。

Load balancing画面にSSLが居ないかを探していたところ、”advanced menu“モードの存在に気がつきました!

 

解決

advanced menu modeを有効にすると、GLBに”Certificates”のカテゴリが表示されます。

全部で29個、SSL certificatesのゴミが存在していました。
本システムではSSLを2つ使うため、30個の上限を超え、Ingressが作れない事象が発生していました。

 

まとめ

GKEの再構築を繰り返していると、LBの残骸が名前競合を起こすことが多々あります。

その時に手動でLBやHealthCheckやGCE Instance groupなどを削除していましたが、それだけでは消し足りていなかったようです。

GCPを使っていると、心当たりのないquotaExceededが発生することがよくあると思います。
その時にはadvanced menuの存在を疑ってみると解決できるかもしれません。