本地kubeadm K8S访问私有gcr.io

Local kubeadm K8S access to private gcr.io

我已经用 kubeadmdocker 18.09.4 安装了 K8S,它工作正常。然后我安装了 gcloud、运行 gcloud init 和 select 我的项目,其中 gcr 被激活,继续 gcloud components install kubectl docker-credentials-gcr,然后是 docker-credentials-gcr configure-docker.

在那个阶段,docker 可以从我自己的 gcr 注册表中提取图像,而 kubelet 不能。

基本上,如果我 运行 docker run --rm --name hello gcr.io/own-gcr/hello-world 它会从注册表中提取图像并启动容器。 如果我从我的本地注册表中删除图像并且 运行 `` 它会失败并显示以下描述:

  Events:
  Type     Reason     Age                From                       Message
  ----     ------     ----               ----                       -------
  Normal   Scheduled  23s                default-scheduler          Successfully assigned default/node-hello-6b99957775-9dvvw to lfr025922-docker
  Normal   BackOff    20s (x2 over 21s)  kubelet, lfr025922-docker  Back-off pulling image "gcr.io/own-gcr/node-hello"
  Warning  Failed     20s (x2 over 21s)  kubelet, lfr025922-docker  Error: ImagePullBackOff
  Normal   Pulling    9s (x2 over 22s)   kubelet, lfr025922-docker  Pulling image "gcr.io/own-gcr/node-hello"
  Warning  Failed     9s (x2 over 21s)   kubelet, lfr025922-docker  Failed to pull image "gcr.io/own-gcr/node-hello": 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
  Warning  Failed     9s (x2 over 21s)   kubelet, lfr025922-docker  Error: ErrImagePull

当然,我遵循了第 https://cloud.google.com/container-registry/docs/advanced-authentication 页上的所有说明,其中 none 成功了。

您是否知道 kubelet 1.14docker 18.09.5 有任何问题? kubelet 不应该依赖底层的 CRI(这里是 docker)吗?您是否知道可能导致该问题的原因?

@VasilyAngapov 是真的。

我遵循了此处提供的技巧 https://container-solutions.com/using-google-container-registry-with-kubernetes/ 并且效果非常好(将访问令牌与 oauth2accesstoken 一起使用)

非常感谢。