Документы FastAPI не работают с nginx Ingress controller - PullRequest
0 голосов
/ 25 февраля 2020

Я написал приложение, которое запускает сервер FastAPI внутри модуля Kubernetes. Внешняя связь с модулем проходит через входной контроллер nginx в отдельном модуле. Я запускаю nginx: 1.17.0.

Когда все готово, я могу использовать curl вызовы для взаимодействия с сервером приложений через входной адрес и доступа ко всем простым путям GET как а также адрес / openapi. json в моем браузере. Я также могу получить доступ к странице интерактивной документации, если я использую внутренний ip службы приложений в Kubernetes. Однако при попытке перейти на страницу интерактивной документации ( address / docs # / default / ) возникает ошибка, связанная с / openapi. json.

enter image description here

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.17.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80

---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: my-host.info
    http:
      paths:
      - path: /server(/|$)(.*)
        backend:
          serviceName: my-app-service # This is the service that runs my fastAPI server pod
          servicePort: 80

РЕДАКТИРОВАТЬ
Это файл service.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  type: ClusterIP
  selector:
    app: server
  ports:
    - protocol: "TCP"
      port: 80
      targetPort: 80

Так как сервис является ClusterIP внутри моего локального кластера, я мог бы свернуться прямо к нему, хотя я не пробовал. Когда я скручиваюсь, я использую такие команды, как

curl -X GET "http://my-host.info/server/subpath/" -H "accept: application/json"
curl -X POST "http://my-host.info/server/subpath/update/" -H "accept: application/json"

извне локального кластера.

Это все запущенные службы:

NAMESPACE              NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
default                kubernetes                  ClusterIP   10.96.0.1       <none>        443/TCP                  11d
default                my-app-service              ClusterIP   10.96.68.29     <none>        80/TCP                   18h
kube-system            kube-dns                    ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   28d
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.96.114.1     <none>        8000/TCP                 28d
kubernetes-dashboard   kubernetes-dashboard        ClusterIP   10.96.249.255   <none>        80/TCP                   28d

и внутри моего /etc/hosts файл, который я подключил 10.0.0.1 (кластерный «внешний» IP) к my-host.info .

Есть идеи, почему это происходит?

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