如何使用 REST API 在 Google Container Engine 上针对 Kubernetes 集群 运行 进行身份验证?

How to authenticate against Kubernetes clusters running on Google Container Engine using REST API?

我正在编写一个应用程序来监控 Google 容器引擎上的 kubernetes 集群 运行。在部署我的应用程序的主机上,没有 kubectlgcloud CLI,也不允许安装它们。所以我试图通过 REST API.

来做所有事情

为了通过 REST 创建集群,我可以使用 GCE Rest API with bearer token retrieved from Google OAuth Playground。类似于:

curl -i -X GET -H "Accept: application/json" -H "Content-Type: application/json" -H "Content-Length: 0" -H "Authorization: Bearer $MyBearerToken  https://container.googleapis.com/v1/projects/$PROJECT_ID/zones/$ZONE/serverconfig

我也能找到Kubernetes REST API reference here。所以我的问题是:如何仅使用 REST api 和 REST api 从我的 GCE Kubernetes 集群中检索 pod 信息?

我尝试使用 kubectl get pods --v=8,它正在使用 GET https://${Kubenetes_IP}/api/v1/namespaces/default/pods。但是当我使用相同的 api 端点与我的 GCE 承载一起卷曲时。它给我 Unzuthorized 错误信息。

# curl --insecure -H "Authorization: Bearer $MyBearerToken" https://${Kubenetes_IP}/api/v1/namespaces/default/pods
Unauthorized

我猜是因为我需要使用不同的不记名令牌或其他一些身份验证方法。我想知道是否有人有一个快速的单行程序? (不诉诸 kubectlgcloud


参考

确认 一种使用不记名令牌的方式,但没有给出指示或示例

似乎也很有希望,但所有提供的 link 都已损坏(并且 api 也已弃用)

This answer 假定安装了 kubectlgcloud,这在我当前的用例中是不允许的。

可以从 Google OAuth Playground

中检索令牌

可以通过以下 curl 命令通过 REST API

访问 Kubernetes
# curl --insecure -H "Authorization: Bearer $MyBearerToken" https://${Kubenetes_IP}/api/v1/namespaces/default/pods

可以使用 kubectl get pods --v=8 检索 Kubernetes Master IP,也可以从 GCE Web GUI 的某个地方检索它。

可以找到完整的 Kubernetes REST API here

确保令牌尚未过期,我想现在默认的 TTL 是 1 小时。

当您授权 OAuth2 playground 给您一个令牌时,它会交换一个 Authorization Code for a Refresh Token and an Access Token

访问令牌(来自 OAuth2 游乐场)的有效期为 1 小时。

刷新令牌是一个长期存在的凭据,用于从授权服务器获取新的访问令牌。

如果您尝试使用过期的访问令牌向“资源所有者”(在本例中为 Kubernetes)进行身份验证,它将以 HTTP 401 错误响应。