如何通过imagePullSecrets从k8s部署.yaml中的Google Artifact注册表中拉取docker镜像

问题描述 投票:0回答:1

我的舵图中有一个 Pod 部署。
我希望我的 pod 部署能够从 google artifactory 注册表中提取 docker 镜像。
我在 gcloud 中创建了一个服务帐户,为该服务帐户授予了 Artifactory 注册表读取器权限,然后在该服务帐户下创建了一个 json 密钥,我想用它从任何计算机登录到 Artifactory 注册表。
我正在 openshift 上安装 pod。

我只想使用 gcloud 服务帐户 json 密钥作为 Google Artifactory 注册表的身份验证模式。

这有效:
我将服务帐户 json 密钥转换为 base64 并传递给 docker login,这使我成功登录到artifactoryregistry。

cat service_account_key_base64.json | docker login -u _json_key_base64 --password-stdin <docker registry url>

现在我可以在谷歌神器注册表下提取任何docker镜像。

docker pull <docker-image-url> 

这不起作用:

我使用我的服务帐户 json 密钥创建了一个秘密,如下所示:

apiVersion: v1 
kind: Secret 
metadata:
  name: gcloud-secret
data:
  .dockerconfigjson: <base64 of my service account key>
type: kubernetes.io/dockerconfigjson

oc create -f <secret.yaml>

在我的 pod 部署文件中添加 glcoud-secret 作为 imagePullSecrets

imagePullSecrets:
- name: gcloud-secret

当我尝试安装 Helm Chart 时,pod 会进入 ImagePullBackOff 状态,并且描述 pod 时会出现以下错误:

Requesting bearer token: invalid status code from registry 403 (Forbidden)

kubernetes google-cloud-platform openshift gcloud google-artifact-registry
1个回答
0
投票

发现唯一的方法是创建秘密,如下所述,以便 kubernetes 可以从谷歌神器注册表中提取图像

首先在你的机器上手动登录 docker

cat service_account_key_base64.json | docker login -u _json_key_base64 --password-stdin <docker registry url>

然后:

cat ~/.docker/config.json | base64 -w 0

复制在 Secret.yaml 文件中获得的长字符串,如下所示。
secret.yaml 文件

apiVersion: v1
  kind: Secret
  metadata:
    name: glcoud_secret
  data:
    .dockerconfigjson: <paste your base64 encoded string>
  type: kubernetes.io/dockerconfigjson

现在创建秘密:

$ kubectl create -f <secret.yaml

在您的 imagePullSecrets 中提供秘密名称。

© www.soinside.com 2019 - 2024. All rights reserved.