[英]How do I grant permission to my Kubernetes cluster to pull images from gcr.io?
在 Kubernetes 容器存储库中,我将权限设置为 Private:
当我在集群上创建一个 pod 时,我得到了以ImagePullBackOff
结尾的 pod 状态,当我描述该 pod 时,我看到:
Failed to pull image "gcr.io/REDACTED": rpc error: code = Unknown desc = Error response from daemon: pull access denied for gcr.io/REDACTED, repository does not exist or may require 'docker login': denied: Permission denied for "v11" from request "/v2/REDACTED/manifests/v11".
我当然登录了。
docker login
Authenticating with existing credentials...
Login Succeeded
现在,如果我在我的 Container Repository 上启用公共访问(顶部图像),一切正常并且 pod 部署正确。 但我不希望我的存储库公开。 什么是保持我的容器存储库私有并且仍然能够部署的正确方法。 我很确定这在几周前可以正常工作,除非我用我的服务帐户搞砸了一些东西,尽管我不知道如何找出哪些服务帐户正在用于这些权限。
要使用gcr.io
或任何其他私有工件注册表,您需要在 k8s 集群中创建 docker docker-registry
类型的Secret
。 该密钥将包含您的注册表的凭据详细信息:
kubectl create secret docker-registry <secret-name> \
--docker-server=<server-name> \
--docker-username=<user-name> \
--docker-password=<user-password> \
--docker-email=<user-email-id>
在此之后,您需要在清单的imagePullSecrets
属性中指定上述机密,以便 k8s 能够验证和拉取图像。
apiVersion: v1
kind: Pod
metadata:
name: pod1
namespace: default
spec:
containers:
- name: pod1
image: gcr.io/pod1:latest
imagePullSecrets:
- name: myregistrykey
如果您的 GKE 版本 > 1.15,并且 Container Registry 在同一个项目中,并且 GKE 使用默认的 Compute Engine 服务帐户 (SA),它应该可以开箱即用。
如果您在另一个项目中运行注册表,或者使用不同的服务帐户,您应该向 SA 授予正确的权限(例如, roles/artifactregistry.reader
)
一步一步的教程,所有不同的情况,它都出现在官方文档中: https://cloud.google.com/artifact-registry/docs/access-control#gcp
GKE 使用附加到节点池的服务帐户授予对注册表的访问权限,但是,您必须确保您的集群的 OAuth scope 设置为https://www.googleapis.com/auth/devstorage.read_only
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.