如何从 public CI 服务器在 GKE 中部署应用程序
How to deploy an application in GKE from a public CI server
我正在尝试在 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)
应用程序的存储库可在此处获得available here。
谢谢。
在 Kubernetes 1.6 和 GKE 中,我们引入了基于角色的进程控制。您的作者需要让服务帐户能够为其帐户创建部署(可能还有很多其他部署)。
我过去使用 gcloud 工具对集群的 kubectl 进行身份验证时进行了一些重大更改,所以我最终弄清楚了如何将 kubectl 授权到独立于 GKE 的特定命名空间。以下是对我有用的:
圈内CI:
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 获取每个环境变量。
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
实用程序将通过您要部署到的名称空间的身份验证。
我正在尝试在 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)
应用程序的存储库可在此处获得available here。
谢谢。
在 Kubernetes 1.6 和 GKE 中,我们引入了基于角色的进程控制。您的作者需要让服务帐户能够为其帐户创建部署(可能还有很多其他部署)。
我过去使用 gcloud 工具对集群的 kubectl 进行身份验证时进行了一些重大更改,所以我最终弄清楚了如何将 kubectl 授权到独立于 GKE 的特定命名空间。以下是对我有用的:
圈内CI:
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 获取每个环境变量。
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
实用程序将通过您要部署到的名称空间的身份验证。