Kubernetes Pod无法从容器注册表(gcp)中提取图像

时间:2019-03-02 10:52:32

标签: kubernetes google-cloud-platform google-kubernetes-engine google-container-registry google-iam

我想用一个存在于“ eu.gcr.io”(相同项目)上的新映像来更新我在kubernetes上的部署,我之前已经做过。但是现在,吊舱无法拉动图像,因为它们无权这样做。这是我们在pod日志中得到的错误。

Failed to pull image "eu.gcr.io/my-gcp-project/my-image:v1.009": 
rpc error: code = Unknown desc = Error response from daemon: 
unauthorized: You don't have the needed permissions to perform this operation,
and you may have invalid credentials.

集群上的服务帐户具有 kubernetes管理员存储管理员角色,它们应为sufficient。但是,即使我将服务帐户设置为项目编辑器(出于调试的目的),它仍然不起作用(相同的错误)。

我也尝试过创建一个新的群集(默认设置)并在那里进行部署,但是却遇到了完全相同的问题。

我不确定我可以尝试什么了。

任何帮助或建议都将不胜感激。

编辑:

我刚刚发现我仍然可以拉出并部署旧映像。但是,我创建的每个新映像都不能被kubernetes容器所吸引。

3 个答案:

答案 0 :(得分:3)

根据您的意愿

  

我刚刚发现我仍然可以拉出并部署旧映像。但是,我创建的每个新映像都不能被kubernetes容器所吸引。

我假设您可以通过命令拉docker映像,但不能通过kubectl拉动

docker pull eu.gcr.io/my-gcp-project/my-image:v1.009 

因此,本文Using Google Container Registry with Kubernetes所引用的身份验证是 docker pull kubectl 提取docker镜像之间的区别。

您是否向GKE提供了访问令牌?

kubectl create secret docker-registry gcr-access-token \
--docker-server=eu.gcr.io \
--docker-username=oauth2accesstoken \
--docker-password="$(gcloud auth print-access-token)" \
--docker-email=any@valid.email

答案 1 :(得分:1)

您将需要创建一个docker-registry机密并在pod定义中使用imagePullSecrets:

kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets:
  - name: regcred

有关更多信息,请参见此guide

答案 2 :(得分:0)

在 k8s 集群中使用的服务帐户或用户无权访问 gcr(谷歌容器注册表)。允许访问有两种方法,以便 k8s 节点可以从 gcr 中拉取镜像并部署 pod。

方法 1:仅出于实验室或测试目的公开 Container 注册表(不推荐)。

方法 2:将存储对象管理员或存储对象查看器角色添加到分配给您的 k8s 集群和节点的服务帐户。 (推荐)

相关问题