Kubernetes мне нужно включить порт при направлении? - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть приложение, работающее в K8s. Он имеет 3 микросервиса и nginx перед ними. Каждое перенаправление проходит сначала через nginx и проксируется как указано. У моего приложения фляги есть проблемы перенаправления без номера порта. Я запускаю k8s локально через миникубе. Всякий раз, когда я перенаправляю на другую страницу, в URL не указывается номер порта, что выдает ошибку.

if usernamedata == None:
    print("Could not log in")   
else:
    if passworddata == password:
        print("Logged in")
        return redirect("/user/{0}".format(username))

Nginx - единственный доступный сервис, а его URL - http://192.168.99.107:31699 При перенаправлении в фляге я получаюперенаправлен на http://192.168.99.107/user/David, который мне выбрасывает соединение отказано. Если я добавлю номер порта и сделаю его http://192.168.99.107:31699/user/David, он будет работать нормально. Нужно ли указывать номер порта при перенаправлении? Что делать, если сервис не работает и воссоздан? Кроме того, это мое определение сервиса для nginx:

kind: Service
apiVersion: v1
metadata:
  name: nginx
  labels:
    svc: nginx
spec:
  selector:
    app:  nginx-app
  type: LoadBalancer
  ports:
   - port:  80

Как сделать так, чтобы перенаправление в приложении колбы работало?

1 Ответ

0 голосов
/ 03 ноября 2019

Если служба не работает и воссоздается, и вы хотите сохранить для своего сервиса тот же самый высокий номер порта, вам нужно указать nodePort и изменить тип службы на NodePort.

apiVersion: v1
kind: Service
metadata:
  name: my-service
  labels:
    svc: nginx
spec:
  type: NodePort # type is set to NodePort
  ports:
  - port: 80 # Service's internal cluster IP
    targetPort: 80 # target port of the backing pods
    nodePort: 31699 # service will be only available via this port for each cluster node if recreated
  selector:
    app:  nginx-app

в вашем Pythonкод (если служба запускается до Pod):

import os 

...
service_host = os.environ.get("NGINX_SERVICE_HOST")
service_port = os.environ.get("NGINX_SERVICE_PORT")
...
redirect(f"http://{service_host}:{service_port}/user/{username}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...