Ответы на вход только с 200 - PullRequest
0 голосов
/ 17 мая 2019

При отображении службы через inging inginx на kubernetes единственным кодом ответа http при запросе чего-либо является 200.

В основном, веб-приложение представляет собой форму, которая загружает изображения, хранит их где-то и отвечает следующим образом:для кодирования (например, неверный запрос или созданный с URI-адресом в заголовке).Он ожидает запрос с multipart / form-data на адрес API следующим образом: "http://{anyAddress}/api/images?directory={whereToStore}?processing={someProcessingTags}"

Веб-приложение работает, как ожидается, локально и в виде одного контейнера в Docker.

Поэтому, когда служба работаетдоступ через вход, сначала он отвечает с формой, как и ожидалось. Вы можете указать параметры и изображение для загрузки. После отправки запроса файл правильно загружен в веб-приложение и обработан, веб-приложение затем отправляет ожидаемый 201 созданный, ноответ, возвращаемый в браузер, всегда равен 200. Я понятия не имею, почему.

Это на докере для рабочего стола + локальный сервер kubernetes.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/proxy-body-size: 25m
spec:
  rules:
    - http:
        paths:
          - path: /image-upload
            backend:
              serviceName: image-upload-service
              servicePort: http

---

apiVersion: v1
kind: Service
metadata:
  name: image-upload-service
spec:
  type: LoadBalancer
  selector:
    run: image-upload
  ports:
    - name: http
      port: 80
      targetPort: api
      protocol: TCP
    - name: https
      port: 443
      targetPort: api
      protocol: TCP

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: image-upload-cluster
  labels:
    run: image-upload
spec:
  selector:
    matchLabels:
      run: image-upload
  replicas: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 0
  template:
    metadata:
      labels:
        run: image-upload
    spec:
      volumes:
        - name: shared-volume
          hostPath:
            path: /exports
      containers:
        - name: image-upload
          image: calyxa/image-service
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - mountPath: /exports
              name: shared-volume
          resources:
            requests:
              cpu: 10m
          ports:
            - containerPort: 3000
              name: api
          readinessProbe:
            httpGet:
              path: /
              port: 3000
            initialDelaySeconds: 5
            periodSeconds: 5
            successThreshold: 1

Я ожидаюпосле отправки запроса с файлом изображения для получения ответа с кодом состояния, то есть 400 неправильных запросов или 201 созданный (с расположением в заголовке).

Ответ всегда 200 OK, дажекогда происходит сбой веб-приложения из-за запроса.

Если само веб-приложение не запущено (например, из-за его сбоя), якак и ожидалось, получить услугу 503.

1 Ответ

0 голосов
/ 17 мая 2019

Иисус, я пытался заставить это работать весь день и нашел решение после публикации моего вопроса.Таким образом, для передачи параметров в вызовах API (в http-адресе) необходимо создать правило целевой перезаписи входа следующим образом:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/proxy-body-size: 25m
    #nginx.ingress.kubernetes.io/ingress.class: public
spec:
  rules:
    - http:
        paths:
          - path: /image-upload/?(.*)
            backend:
              serviceName: image-upload-service
              servicePort: http

с интересными частями

rewrite-target: /$1

и

path: /image-upload/?(.*)

надеюсь, что это поможет кому-то еще.ура!

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