Mug*_*gen 4 google-compute-engine google-cloud-platform google-kubernetes-engine google-container-registry google-iam
$GKE_CLUSTERGoogle Cloud Platform (GCP) 项目 ( $GCP_PROJECT)中的 Google Kubernetes Engine (GKE) 集群之一 ( )似乎无法pull从 Google Container Registry (GCR)获取Docker 映像:
kubectl config current-context
#=>
$GKE_CLUSTER
Run Code Online (Sandbox Code Playgroud)
和:
kubectl get pods --namespace=$NAMESPACE
#=>
NAME READY STATUS RESTARTS AGE
. . . . . . . . . . . . . . .
$SOME_POD 0/1 ImagePullBackOff 0 1m
. . . . . . . . . . . . . . .
Run Code Online (Sandbox Code Playgroud)
和:
kubectl get events \
--field-selector involvedObject.name=$SOME_POD \
--namespace=$NAMESPACE
#=>
LAST SEEN TYPE REASON OBJECT MESSAGE
. . . . . . . . . . . . . . .
1m Normal BackOff pod/$SOME_POD Back-off pulling image "$SOME_IMAGE"
. . . . . . . . . . . . . . .
Run Code Online (Sandbox Code Playgroud)
在哪里:
$SOME_POD 是以下形式: deployment-replicaSet-pod$SOME_IMAGE 是以下形式: us.gcr.io/$GCP_PROJECT/name:tag仅列出服务帐户$GCP_PROJECT:
gcloud projects get-iam-policy $GCP_PROJECT \
--filter="serviceAccount" \
--flatten="bindings[].members" \
--format="value(bindings.members.split(':').slice(1:).flatten())"
#=>
XXXXXXXXXXXX-compute@developer.gserviceaccount.com
XXXXXXXXXXXX@cloudbuild.gserviceaccount.com
XXXXXXXXXXXX@cloudservices.gserviceaccount.com
service-XXXXXXXXXXXX@compute-system.iam.gserviceaccount.com
service-XXXXXXXXXXXX@container-engine-robot.iam.gserviceaccount.com
service-XXXXXXXXXXXX@containerregistry.iam.gserviceaccount.com
service-XXXXXXXXXXXX@dlp-api.iam.gserviceaccount.com
service-XXXXXXXXXXXX@gcf-admin-robot.iam.gserviceaccount.com
PPPPPPPPPPPP@appspot.gserviceaccount.com
Run Code Online (Sandbox Code Playgroud)
GKE 使用以下哪个服务帐户来访问 GCR 托管的 Docker 映像?
小智 6
每个 GKE 节点都有一个与之关联的 IAM 服务帐户。默认情况下,节点会获得 Compute Engine 默认服务帐号,您可以通过导航到 Cloud Console 的 IAM 部分找到该帐号。
如果您使用的是非默认 Compute Engine 服务帐号,您可能需要在项目中授予服务帐号角色角色/storage.objectViewer 角色。查看此链接以获取更多信息。
Google Kubernetes Engine (GKE) 不会直接访问 Google 容器注册表 (GCR):与 GKE 集群关联的一个或多个节点池通过容器注册表 API 推送和拉取 Docker 映像,并通过服务帐户进行身份验证和授权。
\n如果您的 GKE 集群只有一个节点池:
\ngcloud container clusters describe $GKE_CLUSTER_NAME \\\n--format=\'value(nodeConfig.serviceAccount)\' \\\n--zone=$GKE_CLUSTER_ZONE\n\n#=>\n\ndefault\nRun Code Online (Sandbox Code Playgroud)\n如果您的 GKE 集群有多个节点池:
\ngcloud container clusters describe $GKE_CLUSTER_NAME \\\n--zone=$GKE_CLUSTER_ZONE \\\n--format=\'value[delimiter="\\n"](nodePools[].config.serviceAccount)\'\n\n#=>\n\ndefault\nnot-default@$GCP_PROJECT_NAME.iam.gserviceaccount.com\n. . .\nRun Code Online (Sandbox Code Playgroud)\n这里的默认是 \xe2\x80\x9cCompute Engine 默认服务帐户\xe2\x80\x9d: $GCP_PROJECT_ID-compute@developer.gserviceaccount.com。
注意:默认服务。帐户。与服务不同。帐户。您可以创建:以数字开头并以除以下之外的域结尾@$GCP_PROJECT_NAME.iam.gserviceaccount.com。
为了服务。帐户。为了能够pull从 GCR 获取 Docker 镜像,它需要至少一个具有以下关联权限的关联角色:
storage.objects.getstorage.objects.list你可能会遇到:
\n\n\n警告:您似乎无权访问项目 [$GCP_PROJECT_NAME] 或该项目不存在。
\n
如果服务。帐户。没有至少一个具有以下关联权限的关联角色:
\nresourcemanager.projects.getresourcemanager.projects.list包含上述所有四个权限的策划角色就是roles/storage.objectViewer角色。
如果您想将 Docker 镜像存储在另一个 GCP 项目中,您只需授予 serv 权限即可。帐户。GKE 集群中的节点池所使用的roles/storage.objectViewer项目中的角色,您希望存储 Docker 映像(更多信息请参见此处)。
注意:您可能希望继续使用 GCP Artifact Registry (AR)。有关从 GCR 过渡到 AR 的更多信息,请参见此处。
\n| 归档时间: |
|
| 查看次数: |
5863 次 |
| 最近记录: |