Kubernetes pods 无法从容器注册表 (gcp) 中提取图像
Kubernetes pods can't pull images from container registry (gcp)
我想用存在于 'eu.gcr.io'(同一项目)上的新映像更新我在 kubernetes 上的部署,我之前已经这样做过。但是现在 pods 无法拉取图像,因为他们没有被授权这样做。这是我们在 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 admin 和 storage admin 角色,应该是 sufficient。但是即使我创建了服务帐户项目编辑器(为了调试)它仍然不起作用(同样的错误)。
我也曾尝试创建一个全新的集群(默认设置)并在那里应用我的部署,但后来我遇到了完全相同的问题。
我不确定我还能尝试什么。
非常感谢任何帮助或建议。
编辑:
我刚刚发现我仍然可以拉取和部署旧镜像。但是我构建的每个新图像都不能被 kubernetes pods.
您需要创建一个 docker-registry secret 并在您的 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了解更多信息
根据您的描述
I just found out that I can still pull and deploy older images. But every new image I build cannot be pulled by the kubernetes pods.
我假设你可以通过命令拉取 docker 图像,但不是 kubectl。
docker pull eu.gcr.io/my-gcp-project/my-image:v1.009
参考本文Using Google Container Registry with Kubernetes,docker拉取和[=22=拉取docker图像的认证不同]kubectl。
您是否向 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
k8s 集群中使用的服务帐户或用户无权访问 gcr(google 容器注册表)。要允许访问,有两种方法,以便 k8s 节点可以从 gcr 中拉取图像并部署 pods.
方法 1:使容器注册表 Public(不推荐)仅用于实验室或测试目的。
方法 2:将存储对象管理员或存储对象查看器角色添加到分配给您的 k8s 集群和节点的服务帐户。 (推荐)
我想用存在于 'eu.gcr.io'(同一项目)上的新映像更新我在 kubernetes 上的部署,我之前已经这样做过。但是现在 pods 无法拉取图像,因为他们没有被授权这样做。这是我们在 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 admin 和 storage admin 角色,应该是 sufficient。但是即使我创建了服务帐户项目编辑器(为了调试)它仍然不起作用(同样的错误)。
我也曾尝试创建一个全新的集群(默认设置)并在那里应用我的部署,但后来我遇到了完全相同的问题。
我不确定我还能尝试什么。
非常感谢任何帮助或建议。
编辑:
我刚刚发现我仍然可以拉取和部署旧镜像。但是我构建的每个新图像都不能被 kubernetes pods.
您需要创建一个 docker-registry secret 并在您的 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了解更多信息
根据您的描述
I just found out that I can still pull and deploy older images. But every new image I build cannot be pulled by the kubernetes pods.
我假设你可以通过命令拉取 docker 图像,但不是 kubectl。
docker pull eu.gcr.io/my-gcp-project/my-image:v1.009
参考本文Using Google Container Registry with Kubernetes,docker拉取和[=22=拉取docker图像的认证不同]kubectl。
您是否向 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
k8s 集群中使用的服务帐户或用户无权访问 gcr(google 容器注册表)。要允许访问,有两种方法,以便 k8s 节点可以从 gcr 中拉取图像并部署 pods.
方法 1:使容器注册表 Public(不推荐)仅用于实验室或测试目的。
方法 2:将存储对象管理员或存储对象查看器角色添加到分配给您的 k8s 集群和节点的服务帐户。 (推荐)