部署时获取“权限被拒绝” container.clusters.create,但不在本地主机上

时间:2019-03-13 15:00:42

标签: node.js kubernetes google-cloud-platform

我正在尝试通过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”应用引擎项目?

任何提示,提示或指向正确方向的信息将不胜感激。

1 个答案:

答案 0 :(得分:0)

您还需要以成员身份将服务帐户添加到“ my-k8-project”中,并为其赋予相关角色。

在Cloud Console中,导航到项目“ my-k8-project”。找到“ IAM和管理员”>“ IAM”页面。点击“添加”按钮。在“新成员”字段中,粘贴服务帐户的名称,并为其指定适当的角色。 enter image description here