Я написал приложение, которое запускает сервер FastAPI внутри модуля Kubernetes. Внешняя связь с модулем проходит через входной контроллер nginx в отдельном модуле. Я запускаю nginx: 1.17.0.
Когда все готово, я могу использовать curl
вызовы для взаимодействия с сервером приложений через входной адрес и доступа ко всем простым путям GET как а также адрес / openapi. json в моем браузере. Я также могу получить доступ к странице интерактивной документации, если я использую внутренний ip службы приложений в Kubernetes. Однако при попытке перейти на страницу интерактивной документации ( address / docs # / default / ) возникает ошибка, связанная с / openapi. json.
![enter image description here](https://i.stack.imgur.com/yKAT6.png)
Поскольку вызовы 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 .
Есть идеи, почему это происходит?