【问题标题】:How to access private Docker Hub repository from Kubernetes on Vagrant如何从 Vagrant 上的 Kubernetes 访问私有 Docker Hub 存储库
【发布时间】:2016-07-13 23:23:48
【问题描述】:

我无法从我的私有 Docker Hub 存储库中提取到我在 Vagrant 上运行的本地 Kubernetes 设置:

pod“hellonode-n1hox”中的容器“hellonode”正在等待启动:图像不能 拉了

无法提取图像“用户名/hellonode”:错误:图像用户名/hellonode:未找到最新的

我已经按照here 的描述通过 Vagrant 在本地设置了 Kubernetes,并使用 kubectl create secret docker-registry dockerhub --docker-server=https://registry.hub.docker.com/ --docker-username= 创建了一个名为“dockerhub”的秘密用户名 --docker-password=... --docker-email=... 我作为图像拉取密码提供的。

我正在运行 Kubernetes 1.2.0。

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

    您可以按照how to configure nodes to authenticate to a private repository 上的这些说明来配置 kubelet 以使 Docker 使用您的凭据,或者按照 +Phagun Baya 的解决方案使用适用于 pod 的 imagePullSecrets。

    【讨论】:

      【解决方案2】:

      创建 k8 密钥:

      apiVersion: v1
      kind: Secret
      metadata:
        name: repositorySecretKey
      data:
        .dockerconfigjson: <base64 encoded docker auth config>
      type: kubernetes.io/dockerconfigjson
      

      然后在 pod 或 rc config 中提及秘密。示例:

      apiVersion: v1
      kind: Pod
      metadata:
        name: test-pod
      spec:
        containers:
          - name: test-pod
            image: quay.io/example/hello:1.1
        imagePullSecrets:
          - name: repositorySecretKey
      

      Docker 身份验证配置

      {
         "https://quay.io": {
          "email": ".",
          "auth": "<base64 encoded auth token>"
        }
      }
      

      或者

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

      【讨论】:

      • 好点:确实在我链接到的文档中较低:kubernetes.io/docs/user-guide/images/…
      • 你也可以试试kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL。这将自动添加密钥,您只需在 pod 或 rc 配置中添加 imagePullSecrets
      【解决方案3】:

      从 Kubernetes YAML 中提取私有 DockerHub 托管映像:

      运行这些命令:

      DOCKER_REGISTRY_SERVER=docker.io
      DOCKER_USER=Type your dockerhub username, same as when you `docker login`
      DOCKER_EMAIL=Type your dockerhub email, same as when you `docker login`
      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
      

      如果您在 DockerHub 上的用户名是 DOCKER_USER,并且您的私有仓库名为 PRIVATE_REPO_NAME,并且您要拉取的镜像标记为 latest,则创建此 example.yaml 文件:

      apiVersion: v1
      kind: Pod
      metadata:
        name: whatever
      spec:
        containers:
          - name: whatever
            image: DOCKER_USER/PRIVATE_REPO_NAME:latest
            imagePullPolicy: Always
            command: [ "echo", "SUCCESS" ]
        imagePullSecrets:
          - name: myregistrykey
      

      然后运行:

      kubectl create -f example.yaml
      

      【讨论】:

      • 确实有效!在节点上使用 .dockercfg 和 .docker/config.json 尝试了各种配置。在维护 docker 会话方面完全不稳定。 +1 感谢您让我头疼不已!现在,进入入口控制器!耶! :P
      • 对于组织私有存储库是否应该以同样的方式工作?它一直失败,不确定图像的网址是否需要以某种方式有所不同
      • 可能不久前某处发生了变化,出现答案错误的配方Failed to pull image "index.docker.io/DOCKER_USER/PRIVATE_REPO/IMAGE_NAME:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for DOCKER_USER/PRIVATE_REPO/IMAGE_NAME, repository does not exist or may require 'docker login'。但是随着 DOCKER_REGISTRY_SERVER=docker.ioimage: PRIVATE_REPO_NAME:latest 的变化,一切对我来说都很好
      • 感谢@sanddog!我尝试了所有设置秘密的方法,以便能够从 dockerhub 中的组织中提取私有图像。你的评论解决了我的问题,我花了 2 个小时。谢谢。
      • 对于像我这样的白痴,如果要为命名空间部署创建命名空间,请添加命名空间,我至少花了半个小时才意识到
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2021-06-29
      • 1970-01-01
      • 2017-04-17
      • 2018-10-13
      • 2019-01-22
      相关资源
      最近更新 更多