web-dev-qa-db-ja.com

GCPロードバランサのバックエンドステータスが不明です

私はびっくりしました。

ステージングおよび実稼働環境があります。どちらの環境にも同じデプロイ、サービス、上り、ファイアウォールルールがあり、どちらも200/を提供します。

ただし、ステージング環境をオンにして同じ入力をプロビジョニングした後、ステージングサービスはSome backend services are in UNKNOWN stateで失敗します。生産はまだライブです。

フロントエンドポッドとバックエンドポッドの両方がGKEで準備されています。ヘルスチェックを手動でテストしましたが、/にアクセスするとパスします。

ログやgcpドキュメントに正しい方向を示しているものは何もありません。何が壊れたのでしょうか?

ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fanout-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "STATIC-IP"
spec:
  backend:
    serviceName: frontend
    servicePort: 8080
  tls:
  - hosts:
    - <DOMAIN>
    secretName: staging-tls
  rules:
  - Host: <DOMAIN>
    http:
      paths:
      - path: /*
        backend:
          serviceName: frontend
          servicePort: 8080
      - path: /backend/*
        backend:
          serviceName: backend
          servicePort: 8080

frontend.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: frontend
  name: frontend
  namespace: default
spec:
  ports:
  - nodePort: 30664
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: frontend
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  generation: 15
  labels:
    app: frontend
  name: frontend
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  selector:
    matchLabels:
      app: frontend
  minReadySeconds: 5
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - image: <our-image>
        name: frontend
        ports:
        - containerPort: 8080
          protocol: TCP
        readinessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 30
          timeoutSeconds: 3
        livenessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 30
          timeoutSeconds: 3
9
Mike

昨日もこのガイド https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer

うまくいきませんでした。何が起こったのかわからないが、30分待機していても、イングレスはバックエンドのUNKNOWN状態を報告していた。

24時間後、状況は改善されたようです。 L7 httpイングレスは機能しますが、正常なバックエンドのレポートに大きな遅延が生じます。

4
Yannis

これはバグだと思います。新しいクラスターを作成しましたが、再現できませんでした。誰かが再びこれにぶつかった場合は、新しいクラスターを試すことをお勧めします。

1
Mike

まだこの問題が発生していますか?

私は次のGoogle公開ドキュメントに従って再現を試みました: IngressでのHTTP負荷分散の設定 展開:

ポート8080でHTTPサーバーをリッスンするサンプルWebアプリケーションコンテナーイメージを使用するWebアプリ:

ただし、現在は機能しているようです。したがって、この問題が引き続き発生する場合は、 Google issue-tracking tool を使用して、kubernetes/ingress-gceに対して public issue を提出することを検討してください。この問題がより良い可視性とより多くのサンプリングを得ることができるように再現するための手順を含む、できるだけ多くの詳細を含めてください。

ご注意ください:

Issue Tracker ユーザーコンテンツおよび行動のポリシー は、機密の個人情報やスパムなどを含む、Issue Trackerへの送信に不適切な情報の種類を詳しく説明しています。 Issue Trackerで不適切なコンテンツを送信しないでください。

レポ出力$ kubectl describe ing

sunny@test-dev:~$ kubectl describe ing basic-ingress
Name:             basic-ingress
Namespace:        default
Address:          xx.xxx.xxx.228
Default backend:  web:8080 (10.8.2.6:8080)
Rules:
Host  Path  Backends
----  ----  --------
*     *     web:8080 (10.8.2.6:8080)
Annotations:
target-proxy:     k8s-tp-default-basic-ingress--f5636f071d87exxx
url-map:          k8s-um-default-basic-ingress--f5636f071d87exxx
backends:         {"k8s-be-31544--f5636f071d87exxx":"HEALTHY"}
forwarding-rule:  k8s-fw-default-basic-ingress--f5636f071d87exxx
Events:
Type    Reason   Age                From                     Message
----    ------   ----               ----                     -------
Normal  Service  7m (x376 over 2d)  loadbalancer-controller  default backend set to web:31544
0
arp-sunny.