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

时间:2017-05-27 21:30:23

标签: kubernetes google-kubernetes-engine

我正在尝试在运行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

谢谢。

2 个答案:

答案 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.crttoken字段,这些字段与上面的shell脚本中的$KUBE_CA_PEM$KUBE_TOKEN匹配。

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

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

答案 1 :(得分:1)

在Kubernetes 1.6和GKE中,我们介绍基于角色的cess控制。您的作者需要为服务帐户提供部署(以及可能还有其他几个)部署的能力。

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