如何通过 Kubernetes 提取 docker 托管在 Google Container Registry 上的图像(kubernetes 包含在 docker 桌面版中)

How to pull docker images hosted on Google Container Registry via Kubernetes (kubernetes included on docker for desktop)

我无法从 GCR 中提取图像(由我的部署提取) 我收到 ImagePullBackOff 错误。

我已经按照本教程一步步学习了。

https://container-solutions.com/using-google-container-registry-with-kubernetes/

但是它似乎对我不起作用。我什至尝试在创建服务帐户密钥时使用 Storage Admin 角色,但它仍然没有用。

在描述 pod 时,出现此错误:

  Warning  Failed                 14s (x2 over 30s)  kubelet, docker-for-desktop  Failed to pull image "gcr.io/<project-name>/<image-name>": rpc error: code = Unknown desc = Error response from daemon: Get https://gcr.io/v2/<project-name>/<image-name>/manifests/latest: unknown: Unable to parse json key.
  Warning  Failed                 14s (x2 over 30s)  kubelet, docker-for-desktop  Error: ErrImagePull
  Normal   BackOff                2s (x3 over 29s)   kubelet, docker-for-desktop  Back-off pulling image "gcr.io/<project-name>/<image-name>"
  Warning  Failed                 2s (x3 over 29s)   kubelet, docker-for-desktop  Error: ImagePullBackOff

访问https://gcr.io/v2/项目名称/图像名称/manifests/latest时 url,我得到了这个:

// 20181124152036
// https://gcr.io/v2/project-name/image-name/manifests/latest

{
  "errors": Array[1][
    {
      "code": "UNAUTHORIZED",
      "message": "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"
    }
  ]
}

广告连播定义:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-1-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: microservice-1
  template:
    metadata:
      labels:
        app: microservice-1
    spec:
      containers:
        - name: microservice-1
          image: gcr.io/project-name/image-name
          ports:
            - containerPort: 80

备注:

我的部署在 docker 集线器上托管时能够拉取图像,问题仅在 GCR 中拉取图像时出现。

环境

我希望你能帮助我,

提前致谢

查看错误消息,您提供的 json 文件似乎有问题 unable to parse json file

原因是您的 json 文件中有中断 (newline),因此无法秘密识别。

请查看此处并尝试其中一种解决方案。您始终可以选择列出的其他身份验证方法 here

希望这对您有所帮助。

OK 找到了罪魁祸首,它与 PowershellCommand Prompt.

有关

我改用 Git Bash 并遵循本教程中的相同说明

https://container-solutions.com/using-google-container-registry-with-kubernetes/

成功了!

罪魁祸首可能是在 Powershell and/or 命令提示符[=29= 上创建 imagePullSecrets 时发生的].读取 json 文件时可能出了点问题,与编码或其他问题有关。

希望这对任何人都有帮助。