Kubernetes 如何从公共CI服务器在GKE中部署应用程序

Kubernetes 如何从公共CI服务器在GKE中部署应用程序,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,我试图在运行ContainerOS的GKE 1.6.2集群中部署一个应用程序,但网站/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.\nRequ

我试图在运行ContainerOS的GKE 1.6.2集群中部署一个应用程序,但网站/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)
此处提供了应用程序的存储库


谢谢。

在Kubernetes 1.6和GKE中,我们介绍了基于角色的访问控制。您的帐户的作者需要为服务帐户提供为其帐户创建获得部署(可能还有许多其他部署)的能力


过去,我使用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 get serviceaccounts $namespace -o json
服务帐户将包含其机密的名称。在我的例子中,使用默认名称空间

"secrets": [
    {
        "name": "default-token-655ls"
    }
] 
使用这个名字,我得到了秘密的内容

kubectl get secrets $secret_name -o json
密码将包含
ca.crt
token
字段,这些字段与上面shell脚本中的
$KUBE\u ca\u PEM
$KUBE\u token
匹配

最后,使用
kubectl cluster info
获取
$KUBE_URL


在CI上运行
setup\u kubectl
后,您的
kubectl
实用程序将通过您要部署到的命名空间的身份验证

这就解决了问题。我敢肯定,正如@aronchick指出的那样,它有更多的阅读,但就目前而言,它是有效的。非常感谢。我必须向我的服务用户添加“Kubernetes引擎管理员”权限,以允许kubectl获得此权限;否则=>没有匹配的策略。\n需要\“container.secrets.get \”权限