web-dev-qa-db-ja.com

Google Container EngineのHTTPSロードバランサー

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}のタグなしでファイアウォールを作成しましたが、機能しませんでした。

誰もこの問題に遭遇しましたか?

28
lucas.coelho

私のアプリケーションにも同じ問題がありました。問題は、「成功」を返すエンドポイントがなく、ヘルスチェックが常に失敗していたことです。

ヘルスチェックに合格していない場合、HTTP/HTTPSロードバランサーはリクエストをクラスターノードに送信しないようです。そのため、私の解決策は、常に200 OKを返すエンドポイントを作成し、ヘルスチェックに合格するとすぐに、 LBが機能し始めました。

25
andresk

私はちょうど例を通して歩きました、そして($ 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に設定してください。

10
Robert Bailey

私はGKEを使用し、 example をたどっただけで正常に機能しますが、自分のサービスにルーティングすると機能しません。 (私のサービスはREST APIサービスです)

私のサービスと例の最大の違いは、例がルートエンドポイント( "/")を取得したことですが、サポートしていません。

そこで、この方法でこの問題を解決しました:ルートエンドポイント( "/")をサービスに追加し、成功(何も返さない空のエンドポイント)を返すだけで、イングレスを再作成し、数分間待機しました。そして、イングレスが動作します!!

この問題の原因は健全なチェッカーUNHEALTHY instances do not receive new connections

健全性チェックのリンクは次のとおりです。 https://cloud.google.com/compute/docs/load-balancing/health-checks

5
Bruce

私の場合、数分(5〜10分)後に問題は解決しました。

イングレスを使用する場合、イングレスに関連するイベントに追加情報がある場合があります。これらを表示するには:

kubectl describe ingress example

2

ロードバランサーの背後で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;
    ...
1
Christoffer

私の場合、ネットワークリクエストを処理するためのインスタンスおよびインスタンスグループで実行されているWebサーバーがないため、ロードバランサーはこのエラーを返していました。

すべてのマシンにnginxをインストールし、動作し始めました。

これからは、vm/instanceの作成中に、スタートアップスクリプトにnginxを追加するように指示しました。

1
Pulkit Pahwa