web-dev-qa-db-ja.com

Ingressを使用したGoogle Container EngineのHTTPロードバランサー

私は次のチュートリアルに従ってみました: https://cloud.google.com/container-engine/docs/tutorials/http-balancer

すべてが最後までやっているようです

kubectl describe ingress basic-ingress

戻り値

 Name:          basic-ingress
Namespace:      default
Address:        {hidden_external_ip}
Default backend:    nginx:80 ({hidden_internal_ip}:80)
Rules:
  Host  Path    Backends
  ----  ----    --------
  * *   nginx:80 ({hidden_internal_ip}:80)
Annotations:
  backends:     {"k8s-be-00000--0000000000000000":"Unknown"}
  forwarding-rule:  k8s-fw-default-basic-ingress--0000000000000000
  target-proxy:     k8s-tp-default-basic-ingress--0000000000000000
  url-map:      k8s-um-default-basic-ingress--0000000000000000
Events:
  FirstSeen LastSeen    Count   From                SubobjectPath   Type        Reason  Message
  --------- --------    -----   ----                -------------   --    ------    ------  -------
  1m        1m      1   {loadbalancer-controller }          Normal          ADD default/basic-ingress
  23s       23s     1   {loadbalancer-controller }          Normal          CREATE  ip: {hidden_external_ip}

バックエンド行が「不明」で終わることに注意してください

さらに、外部IPを丸めると次のようになります。

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<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>

そのような問題を引き起こす可能性のあるアイデアはありますか?

3
Nepoxx

私は2つのことを理解しました:

  1. ロードバランサーは/(これはドキュメントに記載されていません)のヘルスチェックを行うため、バックエンドがそのパスで200を返すことを確認する必要があります。

  2. ロードバランサーが作成されてから「アクティブ」になるまでにかなりの遅延があります(約10分程度)。その場合、行backends: {"k8s-be-00000--0000000000000000":"Unknown"}backends: {"k8s-be-00000--0000000000000000":"Healthy"}またはbackends: {"k8s-be-00000--0000000000000000":"Unhealthy"}になります。この遅延が、質問にリンクされたチュートリアルが機能しなかった理由でした(実際にそこに文書化する必要があります...)

6
Nepoxx

バックエンドの「不明」は、バックエンドが正常ではないため、502サーバーエラーが発生していることを意味します。バックエンドで実行されているサービスと同じポートでリッスンするようにヘルスチェックを構成しましたか?バックエンドを正常に戻すことで問題が解決するはずです。ヘルスチェックのデバッグの詳細については、この ブログ投稿 を参照してください。

3
George