Kubernetes 将图像从GCR拉入GKE
今天是我在GCR和GKE的第一天。如果我的问题听起来很幼稚,我道歉 因此,我在GCR中创建了一个新的注册表。这是私人的。使用文档,我使用命令获得了访问令牌Kubernetes 将图像从GCR拉入GKE,kubernetes,google-cloud-platform,google-kubernetes-engine,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,今天是我在GCR和GKE的第一天。如果我的问题听起来很幼稚,我道歉 因此,我在GCR中创建了一个新的注册表。这是私人的。使用文档,我使用命令获得了访问令牌 gcloud auth print-access-token #<MY-ACCESS_TOKEN> 我得到: Login Successful 现在是在Kubernetes中创建docker注册表的时候了 我运行了以下命令: kubectl create secret docker-registry eu-gcr-io-reg
gcloud auth print-access-token
#<MY-ACCESS_TOKEN>
我得到:
Login Successful
现在是在Kubernetes中创建docker注册表的时候了
我运行了以下命令:
kubectl create secret docker-registry eu-gcr-io-registry --docker-server='https://eu.gcr.io/v2' --docker-username='oauth2accesstoken' --docker-password='<MY-ACCESS_TOKEN>' --docker-email='<MY_EMAIL>'
kubectl创建秘密docker注册表eu gcr io注册表--docker服务器=”https://eu.gcr.io/v2'--docker用户名='oauth2accesstoken'--docker密码=''--docker电子邮件=''
然后我的Pod定义如下:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-app
image: eu.gcr.io/<my-gcp-project>/<repo>/<my-app>:latest
ports:
- containerPort: 8090
imagePullSecrets:
- name: eu-gcr-io-registry
apiVersion:v1
种类:豆荚
元数据:
名称:我的应用程序
规格:
容器:
-名称:我的应用程序
图片:eu.gcr.io//:最新
端口:
-集装箱港口:8090
你的秘密:
-名称:欧盟gcr io注册表
但当我旋转吊舱时,我得到了一个错误:
Warning Failed 4m (x4 over 6m) kubelet, node-3 Failed to pull image "eu.gcr.io/<my-gcp-project>/<repo>/<my-app>:latest": 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. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication
警告失败4m(x4/6m)kubelet,节点3未能拉取映像“eu.gcr.io//:latest”:rpc错误:code=Unknown desc=来自守护程序的错误响应:unauthorized:您没有执行此操作所需的权限,并且您可能具有无效凭据。要验证您的请求,请按照中的步骤进行操作:https://cloud.google.com/container-registry/docs/advanced-authentication
我通过检查YAML文件并在.dockerconfigjson
上执行base64--decode
验证了我的秘密,这是正确的
我错过了什么 如果您的GKE群集和GCR注册表在同一个项目中:您不需要配置身份验证。GKE集群被授权从同一项目中的私有GCR注册表中提取,而无需配置。(很可能你就是这个!)
如果您的GKE群集和GCR注册表位于不同的GCP项目中:请按照以下说明提供GKE群集访问的“服务帐户”以读取GCR群集中的私有映像: 简而言之,这可以通过以下方式实现:
gsutil iam ch serviceAccount:[PROJECT_NUMBER]-compute@developer.gserviceaccount.com:objectViewer gs://[BUCKET_NAME]
其中,
[BUCKET\u NAME]
是存储GCR图像(如工件。[PROJECT-ID].appspot.com
)的GCS BUCKET,[PROJECT\u NUMBER]
是承载GKE集群的数值的GCP项目ID。因为您在获取图像时存在权限问题,让我知道这是否有帮助。我的GKE和GCR映像在同一个项目中,但是没有提供其他凭据,我得到了以下信息:无法提取映像“eu.GCR.io/project/we…”:rpc错误:code=Unknown desc=来自守护进程的错误响应:未经授权:您没有执行此操作所需的权限,您可能有无效的凭据。要验证您的请求…
看起来同一个项目没有提供任何保证。编辑:我们在这里找到了答案:是的,集群的标识和作用域应该允许访问云存储API以进行GCR访问。默认情况下,如果您正在创建无服务帐户或范围自定义,则GKE集群具有此功能。您的节点需要具有https://www.googleapis.com/auth/devstorage.read_only
oauth作用域。@无论您的服务帐户权限是否不足,请检查与kubernetes群集相关的权限,云存储等,它绝对应该在没有任何特殊凭证的情况下工作。
gsutil iam ch serviceAccount:[PROJECT_NUMBER]-compute@developer.gserviceaccount.com:objectViewer gs://[BUCKET_NAME]