库伯内斯。 HTTPS API return`未授权`

Kubernetes. HTTPS API return `Unauthorized`

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

请求 curl localhost:8080 效果很好。

我的 kube-proxy 和 kube-apiserver 标准 (coreos+k8s tutorial)

如何通过 HTTPS 获取数据?

您是否指定了 --token-auth-file=<file> and/or --basic-auth-file=<otherfile> 或其他身份验证模式之一?我不知道 https 端点在没有其中之一的情况下也能工作(也许应该,但显然不能)。查看 https://kubernetes.io/docs/admin/authentication/

curl https://192.168.0.139 —key ./admin-key.pem —cert ./admin.pem —cacert ./ca.pem

API 中有多种验证方法。获得授权的最简单方法是发送带有 "bearer TOKEN_VALUE" 值的身份验证 header。您可以查看服务器上的 Kubernetes API 配置以查找定义的令牌。 header 可以使用 Web 浏览器扩展通过 http 请求发送。

从外部网络访问 Kubernetes API 的一种简单方法是创建一个 SSH tunnel,例如

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

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

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

嗨,这是我为令牌所做的,

  1. 查找地址服务器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. 如果使用邮递员,请添加header Authorization: Bearer 4c95a1a22d19b20811

终于,我明白了:

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