【发布时间】:2017-02-07 03:00:30
【问题描述】:
我正在编写一个应用程序来监控在 Google Container Engine 上运行的 kubernetes 集群。在部署我的应用程序的主机上,没有kubectl 和gcloud 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
我猜是因为我需要使用不同的不记名令牌或其他一些身份验证方法。我想知道是否有人有一个快速的程序单线? (不诉诸kubectl或gcloud)
参考
This answer 确认有一种使用不记名令牌的方法,但没有给出指针或示例
This answer 似乎也很有希望,但提供的所有链接都已损坏(API 也已弃用)
This answer 假定已安装 kubectl 和 gcloud,这在我当前的用例中是不允许的。
【问题讨论】:
-
我完全按照您的做法进行了尝试(从 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