【发布时间】:2019-08-04 07:32:29
【问题描述】:
我正在尝试通过谷歌应用引擎上的 NodeJS 客户端创建一个 Kubernetes 集群。 Kubernetes 集群位于托管应用引擎项目的单独项目中,例如“my-node-project”和“my-k8-project”。
“my-node-project”拥有kubernetes项目的相关服务账号(Owner级访问权限)。
我使集群创建调用如下:
var client = new container.v1.ClusterManagerClient({
projectId: projectId,
key: serviceAccount
});
var zone = 'us-central1-b';
var password = "<some password>";
var clusterConfig = {
"name": clusterName,
"description": "api created cluster",
"initialNodeCount": 3,
"nodeConfig": {
"oauthScopes": [
"https://www.googleapis.com/auth/compute",
"https://www.googleapis.com/auth/devstorage.read_only"
]
}
,
"masterAuth": {
"username": "admin",
"password": password
},
"zone": zone
};
var request = {
projectId: projectId,
zone: zone,
cluster: clusterConfig,
};
return client.createCluster(request)
.then(responses => {
var response = responses[0];
console.log("response: ", response);
return response;
})
.catch(err => {
console.error(err);
return err;
});
在上述代码中,serviceAccount 变量是一个包含服务帐户的 json 对象,包含所有私钥、项目 ID 字段等。
奇怪的是,当我在本地运行代码时,即调用运行上述函数的端点时,请求顺利通过,即创建了集群,我什至可以通过 api 添加工作负载。
但是,在我将 nodejs 项目部署到应用引擎标准并调用在应用引擎上运行的同一端点后,我收到错误:
Error: 7 PERMISSION_DENIED: Required "container.clusters.create" permission(s) for "projects/my-k8-project". See https://cloud.google.com/kubernetes-engine/docs/troubleshooting#gke_service_account_deleted for more info.
at Object.exports.createStatusError (/srv/node_modules/grpc/src/common.js:91:15)
at Object.onReceiveStatus (/srv/node_modules/grpc/src/client_interceptors.js:1204:28)
at InterceptingListener._callNext (/srv/node_modules/grpc/src/client_interceptors.js:568:42)
at InterceptingListener.onReceiveStatus (/srv/node_modules/grpc/src/client_interceptors.js:618:8)
at callback (/srv/node_modules/grpc/src/client_interceptors.js:845:24)
code: 7,
metadata: Metadata { _internal_repr: {} },
details:
'Required "container.clusters.create" permission(s) for "projects/my-k8-project". See https://cloud.google.com/kubernetes-engine/docs/troubleshooting#gke_service_account_deleted for more info.' }
自从获得该故障排除链接后,我尝试创建一个新的服务帐户并使用它。此外,我尝试禁用和启用 kubernetes 和计算 API。我还尝试将服务帐户放在项目的根目录中,并以这种方式引用服务帐户。
不幸的是,我尝试的一切都导致完全相同的错误。但从 localhost 运行时仍然有效。
我缺少的地方是否有白名单?也许localhost默认被列入白名单,而“my-node-project”应用引擎项目不在名单上?
非常感谢任何提示、提示或指向正确方向。
【问题讨论】:
-
你设置好你的GOOGLE_APPLICATION_CREDENTIALS了吗?
-
我没有明确设置 GOOGLE_APPLICATION_CREDENTIALS,主要是因为我将更改服务帐户以在几个不同的项目上创建集群,在我的情况下,拥有一个服务帐户文件没有意义指向,我的意图是将其保留为 json 对象并动态提供给客户端。
标签: node.js kubernetes google-cloud-platform