我正在尝试通过Google App引擎上的NodeJS客户端创建Kubernetes集群。 Kubernetes集群位于托管App Engine项目的单独项目中,例如“ my-node-project”和“ my-k8-project”。
“ my-node-project”具有kubernetes项目的相关服务帐户(所有者级别访问权限)。
我按如下所示进行集群创建调用:
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项目部署到App Engine标准并调用在App Engine上运行的同一终结点之后,出现错误:
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和compute API。我还尝试将服务帐户放置在项目的根目录中,并以这种方式引用服务帐户。
不幸的是,我尝试的所有操作均导致完全相同的错误。但是从本地主机运行时仍然可以使用。
我缺少某处白名单吗?也许默认情况下将localhost列入白名单,并且列表中没有“ my-node-project”应用引擎项目?
任何提示,提示或指向正确方向的信息将不胜感激。