我正在尝试在运行ContainerOS的GKE 1.6.2群集中部署应用程序,但网站/ k8上的说明不再准确。
我得到的错误是:
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)
此处提供了应用程序的存储库available here。
谢谢。
答案 0 :(得分: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
}
以下是我如何从kubectl获得每个env变种。
kubectl get serviceaccounts $namespace -o json
服务帐户将包含其秘密的名称。就我而言,使用默认命名空间,它是
"secrets": [
{
"name": "default-token-655ls"
}
]
使用该名称,我获得了秘密的内容
kubectl get secrets $secret_name -o json
该密码将包含ca.crt
和token
字段,这些字段与上面的shell脚本中的$KUBE_CA_PEM
和$KUBE_TOKEN
匹配。
最后,使用kubectl cluster-info
获取$KUBE_URL
值。
在CI上运行setup_kubectl
后,您的kubectl
实用程序将通过您要部署到的命名空间进行身份验证。
答案 1 :(得分:1)
在Kubernetes 1.6和GKE中,我们介绍基于角色的cess控制。您的作者需要为服务帐户提供部署(以及可能还有其他几个)部署的能力。