Получение «Отказано в доступе» container.clusters.create при развертывании, но не на локальном хосте - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь создать кластер Kubernetes через клиент NodeJS в движке Google App.Кластер Kubernetes находится в отдельном проекте, в котором размещается проект движка приложения, скажем, "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, содержащий учетную запись службы, со всеми закрытыми ключами, полями идентификатора проекта и т. д.

Странно то, что когда я запускаю код локально, то есть вызываю конечную точку, которая выполняет вышеуказанную функцию, запрос выполняетсячерез хорошо, то есть кластеры созданы, и я даже могу добавить рабочие нагрузки через 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.' }

Поскольку яПолучив ссылку для устранения неполадок, я попытался создать новую учетную запись службы и использовать ее.Кроме того, я попытался отключить и включить API-интерфейсы kubernetes и compute.Я также попытался поместить служебную учетную запись в корневой каталог проекта и таким образом обратиться к служебной учетной записи.

К сожалению, все, что я пробовал, приводило к точно такой же ошибке.Но все еще работал при запуске с локального хоста.

Есть ли где-то белый список, который я пропускаю?Возможно, localhost включен в белый список по умолчанию, а проект движка приложения «my-node-project» отсутствует в списке?

Буду очень признателен за любые советы, подсказки или указание в правильном направлении.

1 Ответ

0 голосов
/ 14 марта 2019

Вам необходимо также добавить служебную учетную запись в ваш «my-k8-project» в качестве участника и присвоить ей соответствующую роль.

В облачной консоли перейдите к проекту «my-k8-project».Найдите страницу "IAM & admin"> "IAM".Нажмите кнопку «Добавить».В поле «Новые участники» вставьте имя учетной записи службы и присвойте ей соответствующую роль.enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...