Политика CORS блокируется из-за ошибки получения сервера не найден - PullRequest
0 голосов
/ 26 мая 2020

Мы настроили среду kubernetes для нашего приложения. У которого есть один мастер, два подчиненных и nginx используется в качестве веб-сервера. При доступе к URL-адресу нашего приложения появляется ошибка cors. Я следил за документом kubernetes (https://kubernetes.io/docs/tasks/access-application-cluster/connecting-frontend-backend/) для настройки соединения между серверной частью и внешним интерфейсом, вы можете найти все эти подробности ниже. Здесь я не упоминаю полную информацию о файлах yamls, и сообщите, если я чего-то упускаю.

Это ошибка, которую я получаю.

Access to XMLHttpRequest at 'http://andy.fin.com:9090/configuration/api/v1/configuration' from origin 'http://172.16.198.102:32603' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

#nginx configuration
upstream zuul {
    server zuul;
}
location / {
    proxy_pass http://andy.fin.com:9090/;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto "http";
    proxy_set_header Origin "http://localhost:32603";
    proxy_set_header Referer "http://localhost:32603";
    proxy_hide_header 'Access-Control-Allow-Origin';
  }

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: zuul
      tier: frontend
  replicas: 1 
  template: 
    metadata:
      labels:
        app: zuul
        tier: frontend
    spec:
      containers:
      - name: nginx
        image: nginx

---
apiVersion: v1
kind: Service
metadata:
  name: frontend
spec:
  selector:
    app: zuul
    tier: frontend
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 80
  type: LoadBalancer

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zuul-routing
spec:
  selector:
     matchLabels:
       app: zuul
       tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: zuul
        tier: backend
    spec:
      containers:
      - env:
---
apiVersion: v1
kind: Service
metadata:
  name: zuul
spec:
  selector:
    app: zuul
    tier: backend
  ports:
  - protocol: TCP
    port: 9090
    targetPort: http

1 Ответ

0 голосов
/ 26 мая 2020

Новый ответ:

Обычно вам нужно в какой-то момент принять следующее решение:

Разрешен ли данному Origin доступ к запрошенному контенту?

Вы можете ответить на этот вопрос в обратном прокси-сервере, на веб-сервере конечных точек или в логе приложения c. Продвинутый: комбинируйте их и принимайте решения в нескольких местах. Только будьте осторожны, чтобы случайно не перезаписать ранее установленные заголовки.

Да?

Тогда заголовок должен быть установлен в стиле URI, содержащем:

http[s]://<trusted_origin_domain>[:port] 

Из вашего вопроса неясно, в какой момент вы настраиваете logi c и устанавливаете информацию соответствующим образом.

Для простоты вы можете начать с разрешения nginx отправить правильный заголовок. Важно не смешивать заголовки, отправленные на узел, и заголовки, отправленные клиенту.

Если у вас есть реализация CORS в приложении, вы должны передать параметры (доверенный источник) через среду или в buildstep или на аналогичной стадии.

Выберите способ, который позволит вам масштабировать столько, сколько необходимо, при этом потребляя как можно меньше времени.

Более пристальный взгляд на вашу специфику c проблема

Это кажется, что ваши решения в приложении и в nginx совпадают.

Дополнительное примечание относительно HTTPS

Возможно, вы пропускаете незашифрованный http-трафик c при пересылке через inte rnet без дополнительных DNS и VPN setup.

Старый ответ:

Заголовок, отправленный в браузер, должен выглядеть точно так же, как в вашем случае:

Access-Control-Allow-Origin: http://172.16.198.102:32603

Когда вы перезаписываете Referer и Origin, вся безопасность не работает:

proxy_set_header Origin "http://localhost:32603";
proxy_set_header Referer "http://localhost:32603";

Удалите их.

Вы блокируете доступ к соответствующему заголовку CORS в браузере:

proxy_hide_header 'Access-Control-Allow-Origin';

Удалите и это.

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