在Kubernetes入口上装有Gunicorn的烧瓶会产生502 nginx错误

时间:2018-11-01 18:52:25

标签: flask kubernetes ibm-cloud gunicorn kubernetes-ingress

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

  1. 为了使flask应用程序能够处理多个请求,我认为我会添加gunicorn。我需要这个吗,还是可以通过使用某种自动水平缩放并由入口路由层处理的方法来减轻这种情况?我是Kubernetes的新手,也许解决方案比我在下面尝试的要简单。
  2. 以我确实需要使用古尼康为前提,我继续进行并将其添加到了烧瓶泊坞窗中。我的问题是,我现在收到502 Bad Gateway Error nginx,并且pod的日志未打印任何错误。如果创建负载平衡器服务而不是与入口一起使用的clusterIP,则带有独角兽的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
    

    指定正确的映像和端口的部署也非常简单。

鉴于我需要干姜粉(或类似产品),如何解决我收到的502 Bad Gateway错误?

1 个答案:

答案 0 :(得分:1)

  1. IMO,您不需要进行大范围的缩放(这是一个过大的选择),因为如果您的单个应用程序实例已经存在,则HPA会进行缩放。这取决于CPU,内存或custom metrics

  2. 在我看来502错误似乎更多是关于配置gunicorn的问题(对工作人员是否有限制?您可以看到工作人员只测试1个吗?如何在容器内缩放?容器上的资源限制?)。在不查看日志或环境的情况下很难说出来,但可能是您的枪械工人在容器中rash动,从而返回了无效的响应。您可能要在gunicorn命令行上尝试--log-level debug

希望有帮助。