ロードバランサーのチュートリアルに従いました: 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
からカスタムヘッダーを削除すると、動作し始めました!どうもありがとう。
ReadinessProbeを追加する必要があります(livenessProbeをコピーするだけです)。
GCE L7 Ingress Docs で説明されています。
ヘルスチェック
現在、すべてのサービスバックエンドは、GCEロードバランサーから送信されたHTTPヘルスチェックに合格するには、次の要件のいずれかを満たす必要があります。1.「/」に200を指定して応答します。コンテンツは関係ありません。 2.サービスをサポートするポッドの準備プローブとして任意のURLを公開します。
また、readinessProbeがIngressに公開するのと同じポートを指していることを確認してください。ポートが1つしかないので問題ありませんが、別のポートを追加すると問題が発生する可能性があります。
私は同じ問題を抱えていました。 Texのヒントに従いましたが、引き続きそのメッセージを見ました。サービスの正常性を検証するために、イングレスの前に数分待たなければならなかったことがわかりました。誰かが同じことをしてreadinessProbe
やlinvenessProbe
などのすべてのステップを実行する場合は、イングレスがNodePort
であるサービスを指していることを確認し、黄色の警告アイコンが緑色に変わるまで数分かかります。また、StackDriverのログを確認して、何が起こっているのかをよりよく理解してください。