【问题标题】:How to authenticate against Kubernetes clusters running on Google Container Engine using REST API?如何使用 REST API 对在 Google Container Engine 上运行的 Kubernetes 集群进行身份验证?
【发布时间】:2017-02-07 03:00:30
【问题描述】:

我正在编写一个应用程序来监控在 Google Container Engine 上运行的 kubernetes 集群。在部署我的应用程序的主机上,没有kubectlgcloud CLI,也不允许安装它们。所以我正在尝试通过 REST API 来做所有事情。

为了通过 REST 创建集群,我可以使用 GCE Rest API 和从 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


参考

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

This answer 似乎也很有希望,但提供的所有链接都已损坏(API 也已弃用)

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

【问题讨论】:

  • 我完全按照您的做法进行了尝试(从 OAuth 操场获取令牌并使用它来卷曲我的 GKE 主服务器)并且它成功了。令牌是否可能过期?
  • @CJCullen 我也可以 curl GKE master(检索集群信息等),但不能 curl Kubernetes 本身(检索 pod 信息、启动容器等)
  • 抱歉,我指的是“GKE master”,它是服务于 Kubernetes API 的东西。我正是这样做的:curl --insecure -H "Authorization: Bearer $MyBearerToken" https://${Kubenetes_IP}/api/v1/namespaces/default/pods 使用我从 Google OAuth Playground 获得的云平台令牌,它对我有用。 “未授权”错误是来自 Kubernetes 的 401,表明它不喜欢您发送的令牌。
  • @CJCullen 你说得对!它一定是不知何故过期了。我在某处读到它说令牌永不过期,但我可能弄错了,或者他们指的是不同类型的令牌。

标签: rest google-oauth kubernetes google-kubernetes-engine bearer-token


【解决方案1】:

令牌可以从Google OAuth Playground获取

Kubernetes 可以通过以下curl 命令通过 REST API 访问

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

Kubernetes 主 IP 可以通过 kubectl get pods --v=8 检索,也可以从 GCE Web GUI 的某处检索。

完整的 Kubernetes REST API 可以找到here

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

【讨论】:

    【解决方案2】:

    当您授权 OAuth2 Playground 向您提供令牌时,它会将 Authorization Code 交换为 Refresh TokenAccess Token

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-21
      • 2019-03-10
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      相关资源
      最近更新 更多