はじめに
タイトルの通り、Web Applicationで502が出た話です。
実は、2度目で、1度目とは別の原因だったのでlogとして。
E2E Testsにて
サービスインに向けて、テストをしていました。
以前の記事でも書いていますが、レガシーなmonolithicなsystemをCloudにLift & Shiftしています。
一部、30sec以上経過してもResponseがないものもあります。
Excelを作成中だったり、画面からbatchを動かしていたり。
30sec経過したところで、「502 Bad Gateway」が出てしまいます、、。
調査
前回の502で、loadbalancerのerrorをロギングする設定に変更したのを思い出しました。
k8sのclusterを月に1回、delete & createしている関係で、Terraformの設定が漏れているのか?
調べてみると、前回とは違う502でした。
前回は、CloudからVPNを経由して、オンプレに繋いているところで出たもので、Cloud VPNの問題でした。これは、また別に記事を書きます。
でも、確かに、502がロギングに残っています。
loadbalancerの設定を見ていくと、バックエンドに30secという記載があります。
ですが、画面からは、変更できない、、。
ここから、半日、調べに調べると、Resourceで定義する必要があるようです。
対応策
その名もBackendConfig
という、カスタム リソース定義(CRD)。
sampleはこちら。
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: my-backendconfig
spec:
timeoutSec: 40
connectionDraining:
drainingTimeoutSec: 60
これを、front-endのsvcに、アノテーションとして宣言してあげる。
apiVersion: v1
kind: Service
metadata:
name: web-svc
annotations:
beta.cloud.google.com/backend-config: '{"ports": {"80":"my-bsc-backendconfig"}}'
これで、502は、解消しました。
まとめ
k8sについては、アンテナを張って、さまざまなPracticeを呼んでいるつもりでしたが、まだまだ、知らないことが多いことを知らされました。
以上。
皆さんの参考になれば幸いです。