从 Pod 访问 Kubernetes API

标签 kubernetes openshift

我正在尝试访问 Kubernetes API,以便从已部署的容器中发现 pod。虽然我将以编程方式执行此操作,但现在我只是使用 cURL 来检查问题。

我从 pod 终端运行它:

curl -vvv -H "Authorization: Bearer $(</var/run/secrets/kubernetes.io/serviceaccount/token)" "https://kubernetes.default/api/v1/namespaces/$(</var/run/secrets/kubernetes.io/serviceaccount/namespace)/endpoints" --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt

我得到了 403 结果:

* About to connect() to kubernetes.default port 443 (#0)
*   Trying 172.30.0.1...
* Connected to kubernetes.default (172.30.0.1) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  CApath: none
* NSS: client certificate not found (nickname not specified)
* SSL connection using TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
* Server certificate:
*       subject: CN=10.0.75.2
*       start date: Nov 23 16:55:27 2017 GMT
*       expire date: Nov 23 16:55:28 2019 GMT
*       common name: 10.0.75.2
*       issuer: CN=openshift-signer@1511456125
> GET /api/v1/namespaces/myproject/endpoints HTTP/1.1                                                                                            s/$(</var/run/secrets/kubernetes.io/serv
> User-Agent: curl/7.29.0
> Host: kubernetes.default
> Accept: */*> Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJteXByb2plY3QiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiZGVmYXVsdC10b2tlbi00cXZidCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMjg3NzAzYjEtZDA4OC0xMWU3LTkzZjQtNmEyNGZhYWZjYzQxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Om15cHJvamVjdDpkZWZhdWx0In0.yl2HUhmxjrb4UqkAioq1TixWl_YqUPoxSvQPPSgl9Hzr97Hjm7icdL_mdptwEnOSErfzqSUBiMKJcIRdIa3Z7mfkgEk-f2H-M7TUU8GpXmD2Zex6Bcn_dq-Hsoed6W2PYpeFDoy98p5rSNTUL5MPMATOodeAulB0NG_zF01-8qTbLO_I6FRa3BCVXVMaZWBoZgwZ1acQbd4fJqDRsYmQMSi5P8a3nYgjBdifkQeTTb3S8Kmnszct41LoUlh9Xv29YVEyr1uQc5DSLAgQKj_NdSxkVq-MJP8z1PWV3OmHULNChocXr7RGKaNwlVpwpgNqsDAOqIyE1ozxlntIrotLBw
>
< HTTP/1.1 403 Forbidden
< Cache-Control: no-store
< Content-Type: application/json
< Date: Thu, 23 Nov 2017 22:18:01 GMT
< Content-Length: 282
<
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "User \"system:serviceaccount:myproject:default\" cannot list endpoints in project \"myproject\"",
  "reason": "Forbidden",
  "details": {
    "kind": "endpoints"
  },
  "code": 403
}
* Connection #0 to host kubernetes.default left intact

我尝试访问许多资源,例如端点、pod 等。我还省略了 namespace (为了访问整个集群资源),但无济于事。

我目前正在使用 OpenShift Origin,干净(刚刚运行 oc cluster up 并部署了一个测试图像以访问 web 控制台中的终端)。

最佳答案

看起来您在完全启用 RBAC 的集群上,并且您的默认服务帐户 system:serviceaccount:myproject:default 正如预期的那样未经授权。您应该为此 pod 创建和使用专用服务帐户,并明确授予它访问需要读取的内容的权限。

https://kubernetes.io/docs/admin/authorization/rbac/

关于从 Pod 访问 Kubernetes API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47463950/

相关文章:

kubernetes - 在多节点kubernetes上设置部署

azure - kubernetes中服务IP无法跨节点访问

安全 mTLS 健康检查端点上的 Kubernetes 活跃度探测

php - 访问 $OPENSHIFT_DATA_DIR 上的上传文件

python - 使用 OpenShift 进行公共(public)客户端应用程序端口转发

windows - Kubernetes 无法在没有直接互联网访问的情况下在 Docker Desktop 上启动

docker - 为什么docker ps无法显示我的minikube的docker容器?

docker - 停运的容器对轮类集群有什么影响?

openshift - 将 mydomain.com 重定向到不带 www 的 openshift 应用程序

git - Openshift v3 Online 上的构建器角色