Я пытаюсь развернуть приложение в кластере GKE 1.6.2 под управлением ContainerOS, но инструкции на сайте / k8s больше не точны.

Я получаю ошибку:

Error from server (Forbidden): User "circleci@gophers-slack-bot.iam.gserviceaccount.com"
cannot get deployments.extensions in the namespace "gopher-slack-bot".:
"No policy matched.\nRequired \"container.deployments.get\" permission." 
(get deployments.extensions gopher-slack-bot)

Репозиторий для приложения доступен здесь , доступный здесь .

Спасибо.

2
dlsniper 28 Май 2017 в 00:30

2 ответа

Лучший ответ

В прошлом у меня было несколько серьезных изменений с использованием инструмента gcloud для аутентификации kubectl в кластере, поэтому я решил выяснить, как аутентифицировать kubectl в определенном пространстве имен, независимом от GKE. Вот что работает для меня:

На CircleCI:

setup_kubectl() {
echo "$KUBE_CA_PEM" | base64 --decode > kube_ca.pem
kubectl config set-cluster default-cluster --server=$KUBE_URL --certificate-authority="$(pwd)/kube_ca.pem"
kubectl config set-credentials default-admin --token=$KUBE_TOKEN
kubectl config set-context default-system --cluster=default-cluster --user=default-admin --namespace default
kubectl config use-context default-system
}

И вот как я получаю каждый из этих env vars из kubectl.

kubectl get serviceaccounts $namespace -o json

Сервисный аккаунт будет содержать название своего секрета. В моем случае с пространством имен по умолчанию это

"secrets": [
    {
        "name": "default-token-655ls"
    }
] 

Используя имя, я получаю содержимое секрета

kubectl get secrets $secret_name -o json

Секрет будет содержать поля ca.crt и token, которые соответствуют $KUBE_CA_PEM и $KUBE_TOKEN в приведенном выше сценарии оболочки.

Наконец, используйте kubectl cluster-info, чтобы получить значение $KUBE_URL.

Как только вы запустите setup_kubectl в CI, ваша утилита kubectl будет аутентифицирована в пространстве имен, в которое вы развертываете.

2
groob 28 Май 2017 в 00:38

В Kubernetes 1.6 и GKE мы вводим управление доступом на основе ролей. Авторы вашей идеи должны были предоставить учетной записи службы возможность развертывания (и, возможно, довольно много других) для создания своей учетной записи.

https://kubernetes.io/docs/admin/authorization/rbac/

1
aronchick 27 Май 2017 в 23:11