繁体   English   中英

如何授予我的 Kubernetes 集群从 gcr.io 提取图像的权限?

[英]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

从容器解决方案和官方 k8s 文档中查看本教程

如果您的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM