web-dev-qa-db-ja.com

kubernetesの異常なイングレスバックエンド

ロードバランサーのチュートリアルに従いました: https://cloud.google.com/container-engine/docs/tutorials/http-balancer Nginxイメージを使用すると正常に動作します、バックエンドが異常な状態に切り替わりますが、自分のアプリケーションイメージを使用しようとすると。

私のアプリケーションは/にリダイレクトします(302を返します)が、ポッド定義にlivenessProbeを追加しました:

    livenessProbe:
      httpGet:
        path: /ping
        port: 4001
        httpHeaders:
          - name: X-health-check
            value: kubernetes-healthcheck
          - name: X-Forwarded-Proto
            value: https
          - name: Host
            value: foo.bar.com

私のイングレスは次のようになります:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: foo
spec:
  backend:
    serviceName: foo
    servicePort: 80
  rules:
  - Host: foo.bar.com

サービス構成は次のとおりです。

kind: Service
apiVersion: v1
metadata:
  name: foo
spec:
  type: NodePort
  selector:
    app: foo
  ports:
    - port: 80 
      targetPort: 4001

ingress describe ingのバックエンドの状態は次のようになります。

backends:       {"k8s-be-32180--5117658971cfc555":"UNHEALTHY"}

イングレスのルールは次のようになります。

Rules:
  Host  Path    Backends
  ----  ----    --------
  * *   foo:80 (10.0.0.7:4001,10.0.1.6:4001)

ポインタが大いに受け取られた、私は運なしで何時間もこれを解決しようとしてきた。

更新

readinessProbeを展開に追加しましたが、何かが/にヒットしているように見え、イングレスはまだ不健康です。私のプローブは次のようになります:

    readinessProbe:
      httpGet:
        path: /ping
        port: 4001
        httpHeaders:
          - name: X-health-check
            value: kubernetes-healthcheck
          - name: X-Forwarded-Proto
            value: https
          - name: Host
            value: foo.com

サービスを次のように変更しました:

kind: Service
apiVersion: v1
metadata:
  name: foo
spec:
  type: NodePort
  selector:
    app: foo
  ports:
    - port: 4001
      targetPort: 4001

Update2

readinessProbeからカスタムヘッダーを削除すると、動作し始めました!どうもありがとう。

19
Will Pink

ReadinessProbeを追加する必要があります(livenessProbeをコピーするだけです)。

GCE L7 Ingress Docs で説明されています。

ヘルスチェック

現在、すべてのサービスバックエンドは、GCEロードバランサーから送信されたHTTPヘルスチェックに合格するには、次の要件のいずれかを満たす必要があります。1.「/」に200を指定して応答します。コンテンツは関係ありません。 2.サービスをサポートするポッドの準備プローブとして任意のURLを公開します。

また、readinessProbeがIngressに公開するのと同じポートを指していることを確認してください。ポートが1つしかないので問題ありませんが、別のポートを追加すると問題が発生する可能性があります。

34
tex

私は同じ問題を抱えていました。 Texのヒントに従いましたが、引き続きそのメッセージを見ました。サービスの正常性を検証するために、イングレスの前に数分待たなければならなかったことがわかりました。誰かが同じことをしてreadinessProbelinvenessProbeなどのすべてのステップを実行する場合は、イングレスがNodePortであるサービスを指していることを確認し、黄色の警告アイコンが緑色に変わるまで数分かかります。また、StackDriverのログを確認して、何が起こっているのかをよりよく理解してください。

4
Mauricio