如何在启用 CORS 的情况下公开 Kubernetes API(Docker for Windows)

How to expose Kubernetes API with CORS enabled (Docker for Windows)

出于内部目的,我正在构建一个仪表板应用程序。 在此仪表板中,我需要显示有关 Kubernetes 的一些信息(运行 pods、集群等)。

我正在尝试从我的网络应用程序(从浏览器)调用我的 Kubernetes API。 API 的 Url 是 http://localhost:8001/api/v1/

我在获取数据时遇到错误(不允许使用 CORS 来源)。

我在互联网上搜索了几个小时试图找到解决方案,但没有任何效果。 我知道还有其他堆栈 post 提供了一些解决方案,但我不确定如何应用它。 对于前。 :

你们中有人知道如何在 Kubernetes 上允许 CORS 源 API(Docker 用于 windows)吗?

注意:我正在使用 kubectl proxy

创建一个服务器端中间层,它可以将您的请求代理到 api,而无需在 api 本身上使用 CORS。

以nginx为例:

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

注意只公开你需要公开的内容。

您可以编辑 kubernetes API 服务器 yaml 文件,让 CORS 工作。

将行 --cors-allowed-origins=["http://*"] 添加到 /etc/default/kube-apiserver/etc/kubernetes/manifests/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/" 添加服务配置注释并应用更改。

我知道可能会晚了,对于遇到这个问题的任何人,如果您正在使用 Minikube,也许您可​​以尝试:minikube start --extra-config "apiserver.cors-allowed-origins=["http://\*"]"。 欲了解更多信息,请查看 here.