HTTPS L7ロードバランサー を使用してGKEのHTTPSロードバランサーを設定しようとしていますが、何らかの理由で機能しません。 HTTPロードバランシングウォークスルー のHTTPロードバランサーでも。転送ルールのIPアドレスが作成され、ポート80にpingおよびtelnetで接続できます。しかし、curlを介した要求時にエラーが発生します。
<title>502 Server Error</title> </head> <body text=#000000
bgcolor=#ffffff> <h1>Error: Server Error</h1> <h2>The server
encountered a temporary error and could not complete your request.
<p>Please try again in 30 seconds.</h2> <h2></h2> </body></html>
すべての手順は問題なく、$ {NODE_PORT}のタグなしでファイアウォールを作成しましたが、機能しませんでした。
誰もこの問題に遭遇しましたか?
私のアプリケーションにも同じ問題がありました。問題は、「成功」を返すエンドポイントがなく、ヘルスチェックが常に失敗していたことです。
ヘルスチェックに合格していない場合、HTTP/HTTPSロードバランサーはリクエストをクラスターノードに送信しないようです。そのため、私の解決策は、常に200 OKを返すエンドポイントを作成し、ヘルスチェックに合格するとすぐに、 LBが機能し始めました。
私はちょうど例を通して歩きました、そして($ NODE_PORTのためにファイアウォールを開く前に)同じ502エラーを見ました。
クラウドコンソールを見ると
https://console.developers.google.com/project/<project>/loadbalancing/http/backendServices/details/web-map-backend-service
バックエンドは、$ {num_nodes_in_cluster}のうち0個が正常であると表示するはずです。
ファイアウォールの定義では、ソースフィルターを130.211.0.0/22
に 負荷分散サービスからのトラフィックを許可 に設定し、許可されたプロトコルとポートをtcp:$NODE_PORT
に設定してください。
私はGKEを使用し、 example をたどっただけで正常に機能しますが、自分のサービスにルーティングすると機能しません。 (私のサービスはREST APIサービスです)
私のサービスと例の最大の違いは、例がルートエンドポイント( "/")を取得したことですが、サポートしていません。
そこで、この方法でこの問題を解決しました:ルートエンドポイント( "/")をサービスに追加し、成功(何も返さない空のエンドポイント)を返すだけで、イングレスを再作成し、数分間待機しました。そして、イングレスが動作します!!
この問題の原因は健全なチェッカーUNHEALTHY instances do not receive new connections
。
健全性チェックのリンクは次のとおりです。 https://cloud.google.com/compute/docs/load-balancing/health-checks
私の場合、数分(5〜10分)後に問題は解決しました。
イングレスを使用する場合、イングレスに関連するイベントに追加情報がある場合があります。これらを表示するには:
kubectl describe ingress example
ロードバランサーの背後でnginxを使用している場合、default_serverが200または他の2 **を返すことが重要です。つまり、たとえば、301を返す書き換えルールがある場合、失敗します。
解決策は、メインサーバーでdefault_serverを設定することです。
server {
# Rewrite calls to www
listen 443;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 default_server;
server_name www.example.com;
...
私の場合、ネットワークリクエストを処理するためのインスタンスおよびインスタンスグループで実行されているWebサーバーがないため、ロードバランサーはこのエラーを返していました。
すべてのマシンにnginxをインストールし、動作し始めました。
これからは、vm/instanceの作成中に、スタートアップスクリプトにnginxを追加するように指示しました。