【问题标题】:Mapping ports in Kubernetes to two Flask apps (Front & Back-end)将 Kubernetes 中的端口映射到两个 Flask 应用程序(前端和后端)
【发布时间】:2018-12-03 11:15:51
【问题描述】:

我正在运行两个 Flask 应用程序,一个用于前端,一个用于后端。我已经将前端映射到端口 8001,后端映射到端口 8002,使用 docker-compose 时都运行良好。但是,我很难将我的 docker 图像传输到 kubernetes(使用 minikube 在本地运行)。我已经阅读了文档,并且我认为我已经正确映射了我的端口,但我仍然收到错误

Error: 'dial tcp 172.17.0.5:8002: getsockopt: connection refused'
Trying to reach: 'http://172.17.0.5:8002/'

当尝试通过

访问前端或后端 pod 时
http://127.0.0.1:8001/api/v1/namespaces/default/pods/hello-57d6475c59-ghmhs/proxy/

我觉得我在映射端口的方式上做错了,但我对 kubernetes 的经验不足,不知道是什么。如果有人能发现我失踪了,我将不胜感激。

它说我的两个 pod 都在运行。

NAME                        READY   STATUS    RESTARTS   AGE
frontend-66d5699888-bbbct   1/1     Running   0          48m
hello-57d6475c59-ghmhs      1/1     Running   0          49m

很抱歉用代码轰炸你,但我不知道如何更好地表达我的努力。大多数你可以忽略,这只是为了上下文。

前端

from flask import Flask, jsonify
import requests
import json

app = Flask(__name__)


@app.route("/")
def home():
    url = "http://backend:5000/"
    res = requests.get(url)
    dictFromServer = res.json()
    return dictFromServer['message']


if __name__=='__main__':
    app.run(debug=True, host='0.0.0.0')

后端

from flask import Flask, jsonify

app = Flask(__name__)


@app.route('/')
def hello_world():
    return jsonify({ 'message': 'Hello World v1 - Demo'})


if __name__=='__main__':
    app.run(debug=True, host='0.0.0.0')

Dockerfile(前后端内容相同)

FROM python:3.6-alpine
WORKDIR /app
COPY requirement=s.txt /app
COPY app.py /app
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python"]
CMD ["app.py"]

前端配置文件

upstream hello {
    server hello;
}

server {
    listen 8001;

    location / {
        proxy_pass http://hello;
    }
}

前端.yaml

apiVersion: v1
kind: Service
metadata:
  name: frontend
spec:
  selector:
    app: hello
    tier: frontend
  ports:
  - protocol: "TCP"
    port: 8001
    targetPort: 8001
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  selector:
    matchLabels:
      app: hello
      tier: frontend
      track: stable
  replicas: 1
  template:
    metadata:
      labels:
        app: hello
        tier: frontend
        track: stable
    spec:
      containers:
      - name: nginx
        image: "jor2/hello-world-kubernetes_frontend"
        lifecycle:
          preStop:
            exec:
              command: ["/usr/sbin/nginx","-s","quit"]

hello-service.yaml

kind: Service
apiVersion: v1
metadata:
  name: hello
spec:
  selector:
    app: hello
    tier: backend
  ports:
  - protocol: TCP
    port: 8002
    targetPort: http

你好.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello
spec:
  selector:
    matchLabels:
      app: hello
      tier: backend
      track: stable
  replicas: 1
  template:
    metadata:
      labels:
        app: hello
        tier: backend
        track: stable
    spec:
      containers:
        - name: hello
          image: "jor2/hello-world-kubernetes_backend"
          ports:
            - name: http
              containerPort: 8002

【问题讨论】:

  • 您提到您正在使用 Docker Compose,您尝试过 Kompose 吗?它可以帮助您将 Docker Compose 转换为 Kubernetes。在此处查看更多信息:kubernetes.io/docs/tasks/configure-pod-container/…
  • @jasonlock 有史以来最好的工具。
  • 很高兴它成功了!只需对我的上述评论投赞成票即可为未来的用户投票。谢谢!
  • @jasonlock 我认为我没有权限投票评论评论,哈哈。将在我的回答中引用您的评论。

标签: docker kubernetes minikube


【解决方案1】:

正如 jasonlock 在他的评论中所说,您可以使用 Kompose。

我以前从未听说过 Kompose,https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/,但在一个命令中我可以将它从 docker-compose 转换为 kubernetes。

【讨论】:

    猜你喜欢
    • 2020-06-16
    • 2016-03-22
    • 1970-01-01
    • 2019-01-26
    • 2021-05-05
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多