我想用一个存在于“ 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容器所吸引。
答案 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 集群和节点的服务帐户。 (推荐)