【问题标题】:Local kubeadm K8S access to private gcr.io本地 kubeadm K8S 访问私有 gcr.io
【发布时间】:2019-09-18 05:40:48
【问题描述】:

我已经用kubeadmdocker 18.09.4 安装了K8S,它工作正常。然后我安装了gcloud,运行gcloud init并选择我的项目,其中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 页上的所有说明,但没有一个成功。

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

【问题讨论】:

  • 你试过“gcloud auth configure-docker”吗?
  • 是的,我做到了。对于那个很抱歉。在我上面的清单中忘记了这一步。而且在运行此命令之前和之后我的行为完全相同,这将我的 ~/.docker/config.json 文件从 { "credHelpers": { "gcr.io": "gcr", "us.gcr.io": "gcr", "asia.gcr.io": "gcr", "staging-k8s.gcr.io": "gcr", "eu.gcr.io": "gcr" } } 更改为 { "credHelpers": { "gcr.io": "gcloud", "us.gcr.io": "gcloud", "eu.gcr.io": "gcloud", "asia.gcr.io": "gcloud", "staging-k8s.gcr.io": "gcloud", "marketplace.gcr.io": "gcloud" } }
  • 我怀疑 kubelet 可以使用现有的 Docker 凭据,前提是它们按原样发布,而不需要任何帮助工具。
  • 谢谢@VasilyAngapov。当您弹出评论时,我正在阅读该页面。这是个好地方。非常感谢。

标签: docker kubernetes google-cloud-platform kubectl kubelet


【解决方案1】:

@VasilyAngapov 是真的。

我遵循https://container-solutions.com/using-google-container-registry-with-kubernetes/ 此处提供的技巧,它运行良好(使用带有oauth2accesstoken 的访问令牌)

非常感谢。

【讨论】:

  • 请记住,oauth2accesstoken 是短暂的令牌,它不会永远有效。对于长期解决方案,您应该使用 Google 服务帐户和 JSON 令牌。
猜你喜欢
  • 1970-01-01
  • 2019-07-10
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2022-06-30
  • 1970-01-01
  • 2018-01-12
相关资源
最近更新 更多