簡體   English   中英

部署時獲得“權限被拒絕”的container.clusters.create,但不在本地主機上

[英]Getting “Permission denied” container.clusters.create when deployed but not on localhost

我正在嘗試通過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”應用引擎項目不在列表中?

任何提示,提示或指向正確的方向將不勝感激。

您還需要以成員身份將服務帳戶添加到“ my-k8-project”中,並為其賦予相關角色。

在雲控制台中,導航到項目“ my-k8-project”。 找到“ IAM和管理員”>“ IAM”頁面。 單擊“添加”按鈕。 在“新成員”字段中,粘貼服務帳戶的名稱,並為其指定適當的角色。 在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM