Назад | Перейти на главную страницу

Включение CORS для GKE Kubernetes API

У меня есть кластер Kubernetes Engine, настроенный в Google Cloud Platform, и он прекрасно работает. Я могу запросить сам Kubernetes API, чтобы получить информацию об объектах Kubernetes, используя IP-адрес Kubernetes Master, видимый при запуске kubectl cluster-info.

Я хотел бы создать простую панель управления для менее технических пользователей, которая извлекает информацию из Kubernetes API, и это делается на стороне клиента (с использованием React). Однако у меня есть только конечная точка на основе IP, поэтому мои запросы блокируются политикой CORS. Как я могу решить это просто?

Я понимаю, что если бы у меня был кластер, я бы смог обновить kube-apiserver.yaml, чтобы предоставить более разрешительное значение для --cors-allowed-origins, но насколько я могу судить, у меня нет доступа к этому в GKE. https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/

Я также пробовал поставить прокси Kong перед kubernetes.default внутренняя служба, но kubernetes.default защищен самозаверяющим сертификатом, которому Kong не доверяет. Должен ли я вместо этого указывать Kong на главный IP-адрес Kubernetes, даже если он находится не внутри кластера? Я использую Kong Ingress Controller, поэтому не знаю, могу ли я указать его на «внешние» конечные точки, такие как Kubernetes Master IP. Я мог бы попытаться развернуть службу для этого, но не хочу идти в кроличью нору без совета. https://github.com/Kong/kubernetes-ingress-controller

Я также подумал, что могу написать свой собственный маленький адаптер, который будет маршрутизировать kubernetes.default и использует файл центра сертификации, который внедрит Kubernetes. Я думаю, что это сработает, но заставить это работать с отправленными сервером событиями watch конечные точки будут проблемой, и я думаю, что это больше усилий, чем мне следовало бы.

Я удивлен, что это не самый распространенный вопрос, и это заставляет меня думать, что я делаю что-то необычное. Мне бы очень хотелось увидеть примеры дашбордов, написанных через Kubernetes API.

Насколько мне известно, включить CORS для GKE невозможно. Вы можете попробовать использовать прокси-сервер. В этом случае вы можете внедрить ЦС мастера GKE в корневые ЦС в контейнере, в котором работает прокси. В общем, было бы лучше написать небольшую оболочку, которая будет предоставлять только необходимые API Kubernetes.

Поскольку CORS отсутствует, вы также можете попробовать использовать панель управления через прокси-сервер Kubernetes apiserver. Я имею в виду, что вы можете открыть службу как ClusterIP и получить к ней доступ через прокси, как в примере ниже:

https://masterIP/api/v1/namespaces/default/services/testapp-foo-lb:80/proxy/

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