我的舵图中有一个 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 可以从谷歌神器注册表中提取图像
首先在你的机器上手动登录 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 中提供秘密名称。