Включить проблемы с входом CORS Kubernetes

У меня есть Laravel backend API и Angular frontend. Я развертываю их с помощью Kubernetes ⎈ на Миникуб.

NAME                                      READY   STATUS    RESTARTS      AGE
pod/backend-deployment-bd4f98697-c2scp    1/1     Running   1 (22m ago)   23m
pod/frontend-deployment-8bc989f89-cxj67   1/1     Running   0             23m
pod/mysql-0                               1/1     Running   0             23m

NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/backend-service    NodePort    10.108.40.53    <none>        8000:30670/TCP   23m
service/frontend-service   NodePort    10.105.57.226   <none>        4200:32353/TCP   23m
service/kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP          25m
service/mysql              ClusterIP   None            <none>        3306/TCP         23m

NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/backend-deployment    1/1     1            1           23m
deployment.apps/frontend-deployment   1/1     1            1           23m

NAME                                            DESIRED   CURRENT   READY   AGE
replicaset.apps/backend-deployment-bd4f98697    1         1         1       23m
replicaset.apps/frontend-deployment-8bc989f89   1         1         1       23m

NAME                     READY   AGE
statefulset.apps/mysql   1/1     23m

Я могу получить доступ как к переднему, так и к заднему сервису с помощью minikube service SERVICE-NAME.

  • Эта работа отлично. ✅

У меня также есть Ingress для интерфейса.

NAME               CLASS    HOSTS                          ADDRESS     PORTS   AGE
frontend-ingress   <none>   kubiapp-frontend-group35.com   localhost   80      27m

Я могу получить доступ к Ingress с помощью завитка. curl http://kubiapp-frontend-group35.com. ✅
Но когда я проверяю URL-адрес в браузере, я получаю несколько ошибок CORS.

  • Ingress работает, но у меня ошибка CORS. ❌

frontend-ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"
    nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS, DELETE"
    nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,X-CustomHeader,X-LANG,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Api-Key,X-Device-Id,Access-Control-Allow-Origin"
  name: frontend-ingress
  labels:
    name: frontend-ingress
spec:
  rules:
    - host: kubiapp-frontend-group35.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: frontend-service
                port:
                  number: 4200

Я плохо понимаю аннотацию Ingress, включает ли она политику CORS для внешнего интерфейса? Разве я не должен сделать это для Backend? Должен ли я создавать Backend Ingress?

Обновлено:

Сообщение об ошибке было:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://backend-service:8000/api/health. (Reason: CORS request did not succeed). Status code: (null).


TL;DR :

Я могу получить доступ к входному URL-адресу, но у меня есть ошибки CORS. Как решить с помощью Kubernetes

The Ingress works but I have CORS Error. Какая ошибка? Пожалуйста, вставьте их в вопрос.
Mikołaj Głodziak 22.03.2022 11:25

Я нашел решение, я продолжу его записывать, спасибо, что указали, что я забыл сообщение об ошибке.

Hamza Ince 22.03.2022 13:28
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
2
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка, которую я допустил, заключалась в использовании аннотаций Kubernetes для внешнего интерфейса. Что мне нужно было сделать, так это создать Backend Ingress, который использовал аннотации:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"
    nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS, DELETE"
    nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,X-CustomHeader,X-LANG,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Api-Key,X-Device-Id,Access-Control-Allow-Origin"
  name: backend-ingress
  labels:
    name: backend-ingress
spec:
  rules:
    - host: kubiapp-backend-group35.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: backend-service
                port:
                  number: 8000

Интерфейсное приложение теперь будет правильно взаимодействовать с http://kubiapp-backend-group35.com.

Другие вопросы по теме