
私は 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は良さそうだ