広告

Ingress使用時のトラブルについて

GCP

Ingressを使ってみた時に、トラブルに会って時間が掛かったので、同じような遭遇をした人の役に立ってればと思って、この記事を更新しました。

ヘルスチェック失敗

Ingressを正しく作成しているのに、backendのヘルスチェックがずっと失敗しっぱなし

現象

サイト表示時のエラーメッセージ:

Error: Server Error
The server encountered a temporary error and could not complete your request.
Please try again in 30 seconds.

Ingressが返ってくるステータスコード:

502 Server Error

Ingress状態:

Some backend services are in UNKNOWN state

原因

Ingressはヘルスチェックは、Containerの<ip>:<port>/パスへのアクセスがステータスコード200で返ってくることが必須です。
普通のヘルスチェックは200~399の間でOKと判断するが、Ingressは200しか受け付けない。しかもデフォルトは/ディレクトリのみを確認する仕様になっています。

Status Codeの確認方法:kubenetesの内部ネットワークから(VPCネイティブの場合、同じネットワークのGCEでも可)、PodのIPに対して、以下のコマンドでステータスコードを取得します。
200以外の場合、よく302(redirect to login)が返ってきます。

curl -LI <podのIP>:<port>/

解決方法

Podのヘルスチェックを明示的に定義することで、Ingressがそちらのヘルスチェックを認識してくれます。
readinessProbeに、httpGetタイプのヘルスチェックを入れましょう。
詳しく設定方法を知りたい方は、以前の記事を参考にしていただければと思います。

また、Pod(deployment)のヘルスチェックの設定は、Ingress作成前に設定しておく必要があります。

参考

wordpressの場合は、<ip>:<port>/は301が返ってくるため、Podのヘルスチェックを定義する必要があります。

コメント

タイトルとURLをコピーしました