我们已经将部署设置为使用Workload Identity运行。每个部署都有其自己的技术标识,设置了具有所需IAM角色的GCP服务帐户以及要匹配的Kubernetes服务帐户(两者均按“工作负载身份”文档中所述进行了链接)。
这一切都很好,但有一个小问题:几乎 每次荚启动都会出现此错误:
Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information. at GoogleAuth.getApplicationDefaultAsync (/home/node/node_modules/google-auth-library/build/src/auth/googleauth.js:155:19) at processTicksAndRejections (internal/process/task_queues.js:97:5) at async GoogleAuth.getClient (/home/node/node_modules/google-auth-library/build/src/auth/googleauth.js:486:17) at async GrpcClient._getCredentials (/home/node/node_modules/google-gax/build/src/grpc.js:88:24) at async GrpcClient.createStub (/home/node/node_modules/google-gax/build/src/grpc.js:213:23)
它随后崩溃循环,通常在重试2或3次后出现。非常非常奇怪...
更糟糕的是,我们时不时会收到此错误:
Error: 403 undefined: Getting metadata from plugin failed with error: Could not refresh access token: A Forbidden error was returned while attempting to retrieve an access token for the Compute Engine built-in service account. This may be because the Compute Engine instance does not have the correct permission scopes specified: Could not refresh access token: Unsuccessful response status code. Request failed with status code 403 at Object.callErrorFromStatus (/home/node/node_modules/@grpc/grpc-js/build/src/call.js:31:26) at Object.onReceiveStatus (/home/node/node_modules/@grpc/grpc-js/build/src/client.js:176:52) at Object.onReceiveStatus (/home/node/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:342:141) at Object.onReceiveStatus (/home/node/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:305:181) at /home/node/node_modules/@grpc/grpc-js/build/src/call-stream.js:124:78 at processTicksAndRejections (internal/process/task_queues.js:79:11)
当我们看到此消息时,基本上是游戏结束,直到我们尝试使用各种黑色巫毒来尝试恢复服务(通常归结为我们删除了该服务的整个auth内容并从头开始创建内容)
有人知道这里会发生什么吗?
我们的集群正在运行1.16.13-gke.1
,并已安装 Istio 1.6.7
(使用Istio运算符)。
答案 0 :(得分:1)
所以...奥秘已经解决了。
有一个晦涩但愚蠢的问题,但在我们的运营商中,它同时设置了IAM和Kubernetes服务帐户,包括必要的绑定。
存在删除命名空间的情况,最终可能会导致删除 all 到任何其他命名空间的绑定:-(因此,这解释了上面的错误,当我们发生403错误时(显然,现在回头看)。
错误已在今天修复,所以现在一切都会好起来。