【问题标题】:run flask app kubernetes运行烧瓶应用程序 kubernetes
【发布时间】:2018-12-13 08:46:02
【问题描述】:

这可能是一个愚蠢的问题,但我怎样才能让我的 https://localhost:5000 通过我的烧瓶 kuberenetes 应用程序工作以确保它返回正确的信息?

这是我目前的工作流程:

$ eval $(minikube docker-env)
$ docker build ...
$ kubectl apply -f deploy.yaml (contains deployment & service)
$ kubectl set image...

kubectl logs... 在下面返回:我的 pod 也已启动并运行,所以没有任何故障

 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on https://0.0.0.0:5000/  (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 443-461-677

唯一的问题是,当我在浏览器中访问该地址时,它显示无法访问该站点。当我curl https://localhost:5000curl https://0.0.0.0:5000/ 出现连接失败错误。我觉得我的环境/设置在某种程度上是错误的。任何提示/建议? 谢谢!

还有我的 deploy.yaml 文件:

apiVersion: apps/v1beta1 
kind: Deployment
metadata:
  name: myapp
  namespace: test-space
spec:
  selector:
    matchLabels:
      app: myapp
  replicas: 3 
  template: 
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: secret-volume
          mountPath: /etc/secret-volume
        ports: 
        - containerPort: 80
        env:
        - name: "SECRET_KEY"
          value: /etc/secret-volume/secret-key
        - name: "SECRET_CRT"
          value: /etc/secret-volume/secret-crt
      volumes:
        - name: secret-volume
          secret: 
            secretName: my-secret3
---
apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: test-space
spec:
  type: NodePort
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 5000
    nodePort: 30000

Dockerfile:

FROM python:2

RUN mkdir -p /usr/src/app

WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app/

RUN pip install --no-cache-dir -r requirements.txt

COPY . /usr/src/app

EXPOSE 5000

CMD ["python", "app.py"]

【问题讨论】:

  • 您是否将主机端口暴露给容器?你的 deploy.yaml 是什么样的?
  • @DavidMaze 我在我的 app.run 中有它,但遗憾的是它仍然无法正常工作:/
  • @Skam 添加了它!我的 nodePort 实际上是 30000,但由于某种原因,卷曲 localhost:30000 或 80 仍然会出现连接失败错误。
  • 实际上,忘了提,我在我的 dockerfile 中暴露了 5000 端口

标签: python docker flask kubernetes minikube


【解决方案1】:

由于您在 Dockerfile 中公开了Port 5000,因此您需要在部署中的容器中公开相同的端口。之后,您需要配置您的服务以使用此端口。

应该是这样的:

apiVersion: apps/v1beta1 
kind: Deployment
metadata:
  name: myapp
  namespace: test-space
spec:
  selector:
    matchLabels:
      app: myapp
  replicas: 3 
  template: 
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: secret-volume
          mountPath: /etc/secret-volume
        ports: 
        - containerPort: 5000 #<<<PORT FIXED
        env:
        - name: "SECRET_KEY"
          value: /etc/secret-volume/secret-key
        - name: "SECRET_CRT"
          value: /etc/secret-volume/secret-crt
      volumes:
        - name: secret-volume
          secret: 
            secretName: my-secret3
---
apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: test-space
spec:
  type: NodePort
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 5000 #<<<PORT FIXED
    targetPort: 5000
    nodePort: 30000

之后,您可以通过&lt;any-kubernetes-node-IP&gt;:30000联系您的申请

【讨论】:

    【解决方案2】:

    您需要使用标签选择器 myapp 创建服务。 但是还有另一种方法可以卷曲 通过登录到正在运行的 pod 并从 pod 内部执行 curl。

    做吧

    kubectl exec -it podname /bin/bash 这将打开 bash shell 然后你可以做 curl localhost:5000

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-18
      • 2015-07-05
      • 2018-10-25
      • 2021-12-22
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2020-04-16
      相关资源
      最近更新 更多