【问题标题】:502 (Bad Gateway) when trying to access to my Flask api with kubernetes尝试使用 kubernetes 访问我的 Flask api 时出现 502(错误网关)
【发布时间】:2020-10-08 18:13:04
【问题描述】:

我尝试在 GCP 上部署我的应用程序。我有一个 Vuejs 前端和一个带有 Flask 和 Postgre 数据库的 api

一切都部署在 GCP 上的 Kubernetes 集群中。 我可以毫无问题地访问我的前端,但我无法访问 api,我有一个 502 错误网关。 我认为我的配置有误。 这是我的配置:

**flask-service.yml**

apiVersion: v1
kind: Service
metadata:
  name: flask
  labels:
    service: flask
spec:
  type: NodePort
  selector:
    app: flask
  ports:
  - protocol: TCP
    port: 5000
    targetPort: 5000

vue-service.yml 文件

**vue-service.yml**

apiVersion: v1
kind: Service
metadata:
  name: vue
  labels:
    service: vue
spec:
  type: NodePort
  selector:
    app: vue
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080

ingress.yml 文件

ingress.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: vue
          servicePort: 8080
      - path: /api/*
        backend:
          serviceName: flask
          servicePort: 5000

我的烧瓶应用程序是使用 gunicord 部署的

gunicorn -b 0.0.0.0:5000 manage:app

你知道我哪里做错了吗?我是 Kubernetes 的初学者

这是我的 Dockerfile

FROM python:3.8.1-slim

# install netcat
RUN apt-get update && \
    apt-get -y install netcat && \
    apt-get clean

# set working directory
WORKDIR /usr/src/app

# add and install requirements
RUN  pip install --upgrade pip
RUN pip install -U gunicorn
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

# add entrypoint.sh
COPY ./entrypoint.sh /usr/src/app/entrypoint.sh
RUN chmod +x /usr/src/app/entrypoint.sh

# add app
COPY . /usr/src/app

# run server
CMD ["/usr/src/app/entrypoint.sh"]

还有我的 entrypoint.sh

echo "Waiting for postgres..."

while ! nc -z postgres 5432; do
  sleep 0.1
done

echo "PostgreSQL started"

gunicorn -b 0.0.0.0:5000 manage:app

再修改一次。在 GCP 中,当我检查后端服务时,有 3 个后端,其中一个不起作用 但为什么我有 3 个后端?我应该只有两个没有(flask 和 vue)?

当我检查时,我有 2 个使用 Flask 的后端服务,其中一个不起作用

The backend services (flask) with problems

the other backend services (flask)

GCP 中的我的 Flask Image 日志显示错误。你知道为什么吗?

GCP log of my flask image

【问题讨论】:

  • 不是 kubernetes 的问题,是 docker 容器的问题,好像是应用服务器没有在 docker 中运行,所以返回 502,你也可以分享一下 Dockerfile 吗?
  • 更改类型 ClusterIP 而不是 NodePort in service 。如果没有错,这应该可以工作
  • 我认为你是对的,我的 Flask Image 的 que GCP 日志出错了。我认为有一个错误。我添加了我的日志的新屏幕截图
  • 我尝试使用 ClusterIP 进行更改,但是当我尝试创建入口时出现此错误:error while evaluating the ingress spec: service "default/flask" is type "ClusterIP", expected "NodePort" or "LoadBalancer" 也许解决方案在 Flask Image 日志中(我的问题末尾的屏幕截图)
  • ClusterIp 在服务中,不是入口,入口规则似乎很好

标签: flask kubernetes google-cloud-platform


【解决方案1】:

我创建了解决方案。这是我的入口有问题,我忘了添加入口控制器。 (我对 Ingress Controler 一无所知...)

现在我添加了一个 Nginx 入口控制器,一切正常!

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 2011-06-04
    • 1970-01-01
    • 2021-05-21
    • 2020-02-17
    • 2022-01-02
    • 2019-12-17
    • 1970-01-01
    • 2022-08-15
    相关资源
    最近更新 更多