在 Kubernetes 入口上使用 Gunicorn 的 Flask 产生 502 nginx 错误

标签 flask kubernetes ibm-cloud gunicorn kubernetes-ingress

我已经构建了一个 Flask 应用程序,我想将它添加到 Kubernetes 入口。目前,我有两个问题似乎无法解决:

  • 为了让flask 应用程序能够处理多个请求,我想我会添加gunicorn。我需要这个吗,或者我可以通过使用某种自动水平缩放和入口路由层处理它来缓解这种情况吗?我是 Kubernetes 的新手,也许解决方案比我在下面尝试的更简单。
  • 假设我确实需要 gunicorn,我继续将其添加到 flask docker 中。我遇到的问题是我现在收到 502 Bad Gateway Error nginx 并且 pod 的日志没有打印任何错误。如果我创建负载均衡器服务而不是用于入口的 clusterIP,则带有 unicorn 的flask 应用程序可以正常工作,就像flask 应用程序在入口上所做的一样没有 添加枪炮。我不知道为什么要写这个问题。 dockerfile 安装所有依赖项以运行 flask 并完成:
    EXPOSE 8080
    
    CMD ["gunicorn", "--config", "/flaskapp/gunicorn_config.py", "run:app"]
    

    我已经像这样配置了我的入口:
    apiVersion: v1
    items:
    - apiVersion: extensions/v1beta1
      kind: Ingress
     metadata:
       annotations:
         ingress.bluemix.net/client-max-body-size: 128m
         ingress.bluemix.net/rewrite-path: serviceName=flask-service rewrite=/; 
    spec:
      rules:
      - host: <my-domain>
        http:
          paths:
          - backend:
            serviceName: flask-service
            servicePort: 8080
          path: /flask/
      tls:
      - hosts:
        - <my-domain>
        secretName: <my-secret>
    status:
      loadBalancer:
        ingress:
        - ip: <ip>
    

    该服务如下所示:
    apiVersion: v1
    kind: Service
    metadata:
      name: flask-service
      labels:
        app: flask-service
    spec:
      type: ClusterIP
      ports:
      - port: 8080
        protocol: TCP
      selector:
        app: flask
    

    部署也很简单,指定正确的镜像和端口。

  • 鉴于我需要 gunicorn(或类似的),我该如何解决我收到的 502 Bad Gateway 错误?

    最佳答案

  • IMO,您不需要 gunicorn 缩放(这是一种矫枉过正),因为如果您的单个应用程序实例已经,HPA 将进行缩放。这取决于 CPU、内存或 custom metrics .
  • 在我看来,502 错误更多是 gunicorn 的配置问题(对 worker 有限制吗?你能看到 worker 只有 1 来测试吗?它如何在容器内扩展?容器上的资源限制是多少? ?)。不查看日志或环境很难判断,但可能是您的 gunicorn worker 在容器中颠簸,从而返回无效响应。您可能想尝试 --log-level debug在 gunicorn 命令行上。

  • 希望能帮助到你。

    关于在 Kubernetes 入口上使用 Gunicorn 的 Flask 产生 502 nginx 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53107579/

    相关文章:

    html - www 子域在 Google Chrome 上看起来与主域不同

    python - 属性错误: 'AnonymousUserMixin' object has no attribute 'can'

    kubernetes - Pod 如何管理 IP 地址?

    docker - 如何在kubernetes上运行docker-compose.yaml?

    debugging - 多个用户在单个 Kubernetes 集群中调试 Pod

    node.js - 使用 cloudfoundry/IBM Bluemix 从 manifest.yml 创建服务

    mapreduce - View ( map 缩减)对 CloudAnt NoSQL 限制有何影响?

    javascript - 如何使用 Flask 丑化 ES6 javascript?

    扩展 html python Flask 中无法识别 JavaScript onload

    nginx - 如何在 IBM Bluemix/Kubernetes 中为代理缓冲参数添加自定义 NGINX(入口)片段?