状況
外部アプリケーション LB 経由で 502。LB のログは failed_to_pick_backend、バックエンドは全台 UNHEALTHY。VM 内の curl localhost は 200 だが、アクセスログにヘルスチェックの要求が来ていない。昨日、不要そうなファイアウォールルールを整理して消した。
調べる順番として最も適切なものは?
- ACloud DNS の A レコードが LB の IP を指しているか
- Bヘルスチェックの送信元(35.191.0.0/16 等)を許可するルール
- Cインスタンスグループの VM をすべて作り直す
- Dヘルスチェックのポートと、アプリの待ち受けポート
正答
- B → D → A → C
- A → B → D → C
- C → B → D → A
- D → C → B → A
解説
502 と failed_to_pick_backend は、LB までは届いたが正常なバックエンドが 1 台も無いという意味。VM 内では 200 が返るのでアプリは動いており、ヘルスチェックの要求がアクセスログに来ていないことから、要求が VM に届いていないと分かる。届かない原因で最も疑わしいのは、昨日消したファイアウォールルール(B)。ヘルスチェックは 35.191.0.0/16 と 130.211.0.0/22 から来るので、その許可が残っているかを先に見る。直前に変えたものを疑う原則どおり。次にヘルスチェックのポート設定(D)。LB の応答が返っている以上、DNS(A)は正しく LB を指しているので後回し。VM の作り直し(C)は時間がかかるうえ、ファイアウォールが原因なら作り直しても直らない。
この問題を含む Google Cloud のテストを制限時間つきで解く
Google Cloudクイズへ