【发布时间】: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 日志显示错误。你知道为什么吗?
【问题讨论】:
-
不是 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