gcloud 静的 IP が割り当てられましたが、サーバーから 404 が返されます。どうすればデバッグできますか?

gcloud 静的 IP が割り当てられましたが、サーバーから 404 が返されます。どうすればデバッグできますか?

私は kubernet を使用してアプリケーションをデプロイしています。サービスの説明は次のとおりです。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: flaskgql
  labels:
    name: flaskgql
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: flaskgql
    spec:
      containers:
      - name: flaskgql
        image: cryptodraco/flask_gql
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
        volumeMounts:
          - name: secrets
            mountPath: /etc/secrets
            readOnly: true
      volumes:
      - name: secrets
        secret:
          secretName: db-passwords
---

apiVersion: v1
kind: Service
metadata:
  name: flaskgql
  labels:
    name: flaskgql
spec:
  type: LoadBalancer
  #loadBalancerIP: 35.189.238.42
  ports:
  - port: 80
    targetPort: 8080
  selector:
    name: flaskgql

サービスをリストすると、すべて問題ありません。

flaskgql  LoadBalancer   10.59.251.206   35.189.238.42   80:30677/TCP   6m

私の Docker ファイルは次のとおりです。

FROM gcr.io/google_appengine/python

RUN virtualenv /env

# source venv/bin/activate
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

# no database - SQL only
#ENV NODB 1

ADD . /app

CMD gunicorn -b :$PORT wsgi:app

しかし、割り当てられた静的 IP にアクセスしようとすると、機能しません。注: 以前にも同じことをしましたが、問題ありませんでした。しかし、今度は静的 IP にアクセスすると、404 エラーが発生します。私の gunicorn サーバーは IP にポート転送されていないようです。gcloud から次のエラーが返されます: ここに画像の説明を入力してください

インスタンスではなく VM を貼り付ける必要があるためかどうかはわかりません。ただし、動作していないことと、それをデバッグする方法がわからないことだけはわかっています。よろしくお願いします。

答え1

まず、404 が見つからないということは、リクエストが目的のサーバーに対して行われているが、要求されたファイルが見つからないことを意味します。これは静的 IP の問題ではないと思います。

これをデバッグするには、いくつかの方法があります。最初のステップは、ノードの 1 つに SSH で接続し、クラスター IP を使用してポッドに直接接続してみることです。

ポッドとそのクラスターIPを一覧表示します

kubectl ポッドを取得 -o ワイド

GCP コンソールまたは gcloud コマンドを使用して、クラスタのノードの 1 つに SSH で接続します。

gcloud コンピューティング インスタンス ssh [ノード名]

ノードに接続したら、curlコマンドを実行して、コンテナがリクエストに適切に応答しているかどうかを確認します。

curl [ポッドクラスタIP]

404エラーメッセージが返された場合は、コンテナイメージに問題があることを意味します。サーバーのルートにファイルがないか、docker イメージはポート 80 を公開していません

このテストが成功すれば、コンテナが正しく機能していることがわかり、サービスに問題がある可能性があります。

LB サービス クラスター IP を使用して curl テストを繰り返します。

ポッドに取り付けてアクティビティを監視することもできます

kubectl アタッチ [ポッド名] -i

最後に、GCP ロードバランサをチェックして、バックエンドの異常などのエラーが報告されているかどうかを確認できます。

私はdockerfilesはあまり得意ではないが、k8s yamlは良さそうだ

関連情報