Как предоставить Kubernetes API с включенным CORS (Docker для Windows)

Для внутренних целей я создаю приложение для приборной панели. На этой панели мне нужно отобразить некоторую информацию о Kubernetes (запущенные модули, кластеры и т. Д.).

Я пытаюсь вызвать свой Kubernetes API из своего веб-приложения (из браузера). URL-адрес API: http://localhost:8001/api/v1/

Я получаю сообщение об ошибке при получении данных (происхождение CORS запрещено).

Я часами искал в Интернете, пытаясь найти решение, но ничего не работает. Я знаю, что есть другой пост в стеке, дающий какое-то решение, но я не уверен, как его применить. Например, : Включение CORS в Kubernetes API

Кто-нибудь из вас знает, как разрешить происхождение CORS в Kubernetes API (Docker для Windows)?

Примечание: я использую kubectl proxy


person Frix G    schedule 21.08.2019    source источник
comment
Chrome не поддерживает CORS на локальном хосте, вам нужно отключить его в браузере.   -  person Markus Dresch    schedule 21.08.2019
comment
если вы используете Nginx для запроса своего API, вы можете просто настроить Nginx для запроса API-интерфейса allow-cross origin.   -  person Harsh Shah    schedule 21.08.2019


Ответы (2)


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

Например, с nginx:

server {
  listen 80;
  add_header "Access-Control-Allow-Origin"  *;
  location / {
    proxy_pass https://my-api-that-needs-cors;
  }
}

Старайтесь выставлять только то, что вам нужно.

person Keilo    schedule 21.08.2019
comment
Спасибо за ответ. Есть ли у вас какие-либо документы, показывающие, как создать этот конкретный прокси с помощью Nginx? Мне не больно, как этого добиться. - person Frix G; 22.08.2019
comment
Магия выполняется в proxy_pass директиве nginx, документы здесь: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass Он будет проксировать все ваши запросы к nginx на другой сервер. Бит add_header позволяет выполнять междоменные запросы из браузера. Если у вас есть только приведенный выше фрагмент в составе конфигурации nginx, это должно быть хорошей отправной точкой. - person Keilo; 22.08.2019
comment
Привет @ frix-g, сработало ли указанное выше решение у вас, у вас была возможность проверить это на практике? - person Nepomucen; 30.08.2019

Вы можете отредактировать yaml-файл сервера API Kubernetes, чтобы CORS работал.

Добавьте строку --cors-allowed-origins = ["http: // *"] аргумента в / etc / default / kube-apiserver или / etc / kubernetes / manifestests / kube-apiserver.yaml, это зависит от того, где находится ваш файл конфигурации kube-apiserver.

spec:
containers:
- command:
  - kube-apiserver
  - --cors-allowed-origins=["http://*"]

Перезапустите kube-apiserver.

Затем добавьте аннотацию к конфигурации службы к dns.alpha.kubernetes.io/external: "http://localhost:8001/api/v1/" в файле конфигурации службы и примените изменения.

person Malgorzata    schedule 22.08.2019