Kubernetes。 HTTPS API返回“未经授权”

Kubernetes API请求curl https://192.168.0.139 --cacert /home/mongeo/ku-certs/ca.pem返回Unauthorized

请求curl localhost:8080工作正常。

我的kube-proxy和kube-apiserver standart( coreos + k8s教程 )

如何获取有关HTTPS的数据?

您是否指定了--token-auth-file=<file>和/或--basic-auth-file=<otherfile>或其他authentication模式之一? 我不知道,https端点将工作没有这些之一(也许它应该,但它不,显然)。 查看https://kubernetes.io/docs/admin/authentication/

嗨,这是我所做的令牌,

  1. 查找地址Server Api – 打开/etc/kubernetes/kubelet.conf – >例如:server: https ://10.1.32.120:6443
  2. 查找令牌,打开/etc/kubernetes/pki/tokens.csv —>例如:4c95a1a22d19b20811,kubeadm-node-csr,07ccbf35-e206-11e6-ab8f-0010184e550e,system:kubelet-bootstrap
  3. 在这种情况下,令牌是 – > 4c95a1a22d19b20811
  4. 如果使用邮递员,添加标题 – >授权:承载4c95a1a22d19b20811

从外部networking访问Kubernetes API的一个简单方法是创build一个SSH隧道 ,例如

 ssh -L 9000:localhost:8080 roto@master.node 

这会将连接从本地端口9000转发到服务器上的localhost:8080

只要SSH隧道已经打开,您就可以在机器的9000端口上查询API。

有几种方法可以在API中进行身份validation。 获得授权的最简单方法是发送带有“bearer TOKEN_VALUE”值的Authentication标头。 您可以查看服务器上的Kubernetes APIconfiguration来查找定义的令牌。 头可以使用网页浏览器扩展与http请求一起发送。

最后,我明白了这一点:

 lincai@pdbuddy:~/blackbox$ curl -v --cacert ./ca.pem --key ./admin-key.pem --cert ./admin.pem https://xxxx/api/v1/ * Hostname was NOT found in DNS cache > < HTTP/1.1 200 OK 
 curl https://192.168.0.139 —key ./admin-key.pem —cert ./admin.pem —cacert ./ca.pem