kubernetes - 为什么我有时会在 GKE 上的 gcloud API 中收到 "401 unauthorized"?

标签 kubernetes google-kubernetes-engine kubernetes-apiserver kubernetes-python-client

我有一个正在运行的 google kubernetes 集群,我正在尝试使用 python-client kubernetes SDK 手动扩展一些 pod。我在终端上使用以下命令来获取我的 Google 帐户凭据:

gcloud auth login

接下来,我使用默认命令连接到我的集群以在本地获取我的 kube-config:

gcloud container clusters get-credentials ${clusterName} --zone ${zoneName}--${projectName}

使用 python SDK 加载我的配置:

from kubernetes import client, config
import kubernetes.client

config.load_kube_config()
v1 = client.CoreV1Api()
api = client.CustomObjectsApi()
k8s_apps_v1 = client.AppsV1Api()

通过此代码,我可以获得集群信息,并且可以根据需要扩展我的 Pod。这会持续大约 30-45 分钟,之后当我尝试发出 API 请求来扩展集群中的 Pod 时,我会收到包含以下错误的响应:

kubernetes.client.exceptions.ApiException: (401)
Reason: Unauthorized
HTTP response headers: HTTPHeaderDict({'Audit-Id': '697f82b7-4db9-46c3-b873-cef49a45bb19', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'Date': 'Tue, 31 May 2022 01:20:53 GMT', 'Content-Length': '129'})
HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"Unauthorized","reason":"Unauthorized","code":401}

为什么我获得授权后却无法再进行 API 调用,如何解决此问题?

最佳答案

要解决此问题,您应该在调用 API 之前刷新 token 。这个doc对于检查 token 是否过期非常有用,load_gcp_token 函数仅在 GCP token 过期时刷新 GCP token 。

关于kubernetes - 为什么我有时会在 GKE 上的 gcloud API 中收到 "401 unauthorized"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72574725/

相关文章:

angular - 部署到 GKE 时出现 Cloud Run 错误,适用于托管的云运行

kubernetes - 如何使用 client-go API 返回的 Pod 条件数组?

Kubernetes - 在一行中使用 cli 创建带有标签的 secret

kubernetes - 通过从k8s中的文件导入数据来填充ConfigMap

kubernetes - 5 分钟后收到 104 连接重置错误

kubernetes - 通过 daemonset 运行的 Fluentd pod 因谷歌容器引擎上的警告而终止

kubernetes - K8s : gets HTTP 415 for PATCH request to Kubernetes REST API server

kubernetes - 如何将所有 kubernetes 入口 yaml 转换为使用 API 版本networking.k8s.io/v1

kubernetes - 解码器解码器 : quantities must match the regular expression

kubernetes - Istio Envoy 代理转发客户端证书信息