如何将私有组织镜像从 docker hub 部署到 kubernetes

How to deploy private organization image from docker hub to kubernetes

现状

我在 DigitalOcean 上创建了一个 Kubernetes 集群。我想部署一个 Docker 图像,该图像托管在一个私人空间中,该私人空间又属于 Docker Hub 中的一个组织。

因此,为了推送新图像,我使用 docker push myorg/mo-server

(注意:上面的例子中图片名称中包含一个破折号(-),我在真实姓名中也有)

问题

当我尝试使用 kubectl 将 docker 映像部署到 kubernetes 时,部署总是以 ErrImagePull 状态结束。错误信息:

ailed to pull image "index.docker.io/myorg/mo-server": rpc error: code = Unknown desc = Error response from daemon: pull access denied for myorg/mo-server, repository does not exist or may require 'docker login'

到目前为止我尝试了什么

因为它是一个私有存储库,所以我事先创建了一个秘密。为此,我使用自己的用户名和电子邮件。

set DOCKER_REGISTRY_SERVER=https://index.docker.io/v1/
set DOCKER_USER=sarensw
set DOCKER_EMAIL=stephan@myorg.com
set DOCKER_PASSWORD=...

凭据与我使用 docker login 时的凭据相同。然后我使用以下方法创建一个秘密:

kubectl create secret docker-registry regcred 
  --docker-server=%DOCKER_REGISTRY_SERVER% 
  --docker-username=%DOCKER_USER% 
  --docker-password=%DOCKER_PASSWORD% 
  --docker-email=%DOCKER_EMAIL%

然后,我使用 kubectl create 创建一个新部署。

kubectl create -f ci\helper\kub-deploy-staging.yaml

kub-deploy-staging.yaml 看起来如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mo-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mo-server
  template:
    metadata:
      labels:
        app: mo-server
    spec:
      containers:
        - name: mo-server
          image: index.docker.io/myorg/mo-server
          imagePullPolicy: Always
          command: [ "echo", "SUCCESS" ]
      imagePullSecrets:
        - name: regcred

如上所述,结果是ErrImagePull

我很确定 image: index.docker.io/myorg/mo-server 是罪魁祸首,因为它是我尝试与普通帐户一起使用的组织图像。而且所有访问私有镜像的教程都没有考虑组织。

那我做错了什么?

(许多相似的参考文献之一): https://gist.github.com/rkuzsma/b9a0e342c56479f5e58d654b1341f01e

我怀疑发生这种情况是因为您创建秘密的 docker 注册表变量,请尝试用 registry.hub.docker.com 替换 index.docker.io 因为这是官方的 docker 中心注册表 URL。如果您使用的是 Google 云,您也可以尝试 docker.io

据我所知,您正在尝试使用 "set" 命令设置变量,请立即尝试使用 "export",如您遵循的 gist 文件中所述

export DOCKER_REGISTRY_SERVER=https://index.docker.io/v1/
export DOCKER_USER=Type your dockerhub username, same as when you `docker login`
export DOCKER_EMAIL=Type your dockerhub email, same as when you `docker login`
export DOCKER_PASSWORD=Type your dockerhub pw, same as when you `docker login`

kubectl create secret docker-registry myregistrykey \
  --docker-server=$DOCKER_REGISTRY_SERVER \
  --docker-username=$DOCKER_USER \
  --docker-password=$DOCKER_PASSWORD \
  --docker-email=$DOCKER_EMAIL

然后再试一次,请告诉我们结果。