我正在使用 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 未找到意味着请求正在向目标服务器发出,但无法找到请求的文件,我怀疑这是静态 IP 的问题。
有几种方法可以调试此问题。第一步是通过 SSH 进入其中一个节点,然后尝试使用集群 IP 直接连接到 pod:
列出你的 Pod 及其 CLuster IP
kubectl 获取 pod -o wide
通过 GCP 控制台或使用 gcloud 命令通过 SSH 连接到集群的某个节点
gcloud 计算实例 ssh [节点名称]
连接到节点后,运行 curl 命令查看容器是否正确响应请求
curl [pod_cluster_ip]
如果返回 404 错误消息,则表示容器镜像存在问题。服务器根目录中没有文件,或者docker 镜像没有暴露 80 端口。
如果这个测试成功,您就知道容器正在正确服务,因此服务可能存在问题。
使用 LB 服务集群 IP 重复 curl 测试。
你也可以连接到 pod 来观察活动
kubectl 附加 [pod名称] -i
最后,您可以检查 GCP 负载均衡器,看看那里是否有任何报告的错误,例如不健康的后端。
我不太擅长使用 dockerfile,但 k8s yaml 看起来不错