在Kubernetes上覆盖CORS会导致连接错误

时间:2019-07-07 20:03:49

标签: kubernetes

我正在尝试对所有域启用CORS的测试(在使用例正常工作后将被限制)。

据我所知,我应该将--cors-allowed-origins=["http://*"]添加到我的kube-apiserver.manifest

但是,当我尝试这样做时:

spec:
  containers:
  - command:
    - /bin/sh
    - -c
    - /usr/local/bin/kube-apiserver --address=127.0.0.1 --admission-control=Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,Priority,ResourceQuota
      --allow-privileged=true --anonymous-auth=false --apiserver-count=1 --authorization-mode=AlwaysAllow
      --basic-auth-file=/srv/kubernetes/basic_auth.csv --client-ca-file=/srv/kubernetes/ca.crt
      --cloud-provider=aws --etcd-servers-overrides=/events#http://127.0.0.1:4002
      --etcd-servers=http://127.0.0.1:4001 --insecure-port=8080 --kubelet-preferred-address-types=InternalIP,Hostname,ExternalIP
      --proxy-client-cert-file=/srv/kubernetes/apiserver-aggregator.cert --proxy-client-key-file=/srv/kubernetes/apiserver-aggregator.key
      --requestheader-allowed-names=aggregator --requestheader-client-ca-file=/srv/kubernetes/apiserver-aggregator-ca.cert
      --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group
      --requestheader-username-headers=X-Remote-User --secure-port=443 --service-cluster-ip-range=100.64.0.0/13
      --storage-backend=etcd2 --tls-cert-file=/srv/kubernetes/server.cert --tls-private-key-file=/srv/kubernetes/server.key
      --token-auth-file=/srv/kubernetes/known_tokens.csv --v=2 2>&1 | /bin/tee -a
      --cors-allowed-origins=["https://*"]

尝试使用kubectl get pod时出现以下错误:

The connection to the server 127.0.0.1 was refused - did you specify the right host or port?

该设置我到底在做什么错?如何将CORS域添加到Kubernetes?

编辑:我现在正在尝试:

- kube-apiserver
  --cors-allowed-origins=["https://*"]

我的Pod不再崩溃,但是我的应用程序中仍然存在CORS问题。

我遇到这样的错误:

[Error] Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin.
[Error] XMLHttpRequest cannot load https://example.com/auth/realms/name/protocol/openid-connect/token due to access control checks.
[Error] Failed to load resource: Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin. (token, line 0)
[Error] Preflight response is not successful
[Error] XMLHttpRequest cannot load https://example.com/api/v1/users/me/profile? due to access control checks.

2 个答案:

答案 0 :(得分:0)

好像您正在尝试使用http协议访问api服务器,请尝试:

--cors-allowed-origins=["http://*"]

答案 1 :(得分:0)

根据文档:

  

-cors-allowed-origins:CORS允许的来源列表,以逗号分隔。允许的来源可以是支持子域匹配的正则表达式。如果此列表为空,则不会启用CORS。

我已经针对API测试了此设置(以及http // *),并且可以正常工作:

--cors-allowed-origins=example.com,example2.com

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, X-Requested-With, If-Modified-Since
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, PATCH
Access-Control-Allow-Origin: http://example.com

这些错误看起来像是服务器端应用程序上的设置问题。

  

Access-Control-Allow-Origin:指定进行跨域请求的授权域(您应该包括REST客户端的域,或者如果要使资源对所有人开放,则应包括“ *”)-后者不是如果在CORS请求期间允许使用凭据,则为一个选项)

希望获得帮助。