
我正在使用 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 看起來不錯