Сопоставление портов в Kubernetes с двумя приложениями Flask (Front & Back-end) - PullRequest
0 голосов
/ 03 декабря 2018

Я использую два приложения Flask, одно для внешнего интерфейса и одно для внутреннего.Я сопоставил внешний интерфейс с портом 8001, а внутренний - с портом 8002, все работает хорошо при использовании docker-compose.Тем не менее, я испытываю трудности с переносом изображений докеров в kubernetes (запускается локально с помощью minikube).Я прочитал документы и думал, что правильно сопоставил свои порты, но все равно получаю сообщение об ошибке

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

при попытке получить доступ к интерфейсным или внутренним модулям через

http://127.0.0.1:8001/api/v1/namespaces/default/pods/hello-57d6475c59-ghmhs/proxy/

Мне кажется, что я делаю что-то не так с тем, как я сопоставляю порты, но я не достаточно опытен с kubernetes, чтобы знать что.Я был бы признателен, если бы кто-то мог определить, что это я пропал.

Там написано, что оба моих модуля работают.

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

Извините, что засыпал вас кодом, но я неНе знаю, как лучше передать свои усилия слаженно.Большую часть этого вы можете просто проигнорировать, это просто для контекста.

Front-end

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')

Back-end

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 (то же самое содержимое для front &back-end)

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"]

frontend.conf

upstream hello {
    server hello;
}

server {
    listen 8001;

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

frontend.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

hello.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

1 Ответ

0 голосов
/ 03 декабря 2018

Как сказал Джейсонлок в своем комментарии, вы можете использовать Kompose.

Раньше я никогда не слышал о Kompose, https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/,, но одной командой я мог преобразовать его из docker-compose в kubernetes..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...