已分配 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 我得到: 在此輸入影像描述

我不知道這是否是因為我應該堅持虛擬機器而不是實例。但我只知道它不起作用,而且我不知道如何調試它。先致謝

答案1

首先,404 not find 意味著請求正在向目標伺服器發出,但無法找到所請求的文件,我懷疑這是靜態 IP 的問題。

您可以採取一些措施來調試此問題。第一步是透過 SSH 連接到您的一個節點,並嘗試使用叢集 IP 直接連接到 pod:

列出您的 Pod 及其群集 IP

kubectl 取得 pod -o 寬

透過 GCP Console 或使用 gcloud 指令透過 SSH 連接到叢集的節點之一

gcloud 計算實例 ssh [node_name]

連接到節點後,執行curl命令以查看容器是否正確回應請求

捲曲 [pod_cluster_ip]

如果傳回 404 錯誤訊息,則表示您的容器映像有問題。伺服器根目錄下沒有文件,或者docker鏡像沒有暴露80端口

如果此測試有效,您就知道容器正在正常服務,因此服務可能有問題。

使用LB服務群集IP重複curl測試。

您也可以連接到 Pod 來觀察活動

kubectl Attach [pod_name] -i

最後,您可以檢查 GCP 負載平衡器,看看是否有任何報告的錯誤,例如後端不健康。

我不太擅長 dockerfiles,但 k8s yaml 看起來不錯

相關內容