当我们尝试从私有仓库中拉取镜像时,可能会收到这样提示:requested access to the resource is denied

Error response from daemon: pull access denied for xxx repository does not exist or may require 'docker login': denied: requested access to the resource is denied 

这是由于访问私有仓库时是需要凭证的。接下来,一起看下如何用Secret创建一个Pod来从一个私有的Docker Registry 或  Repository 中 Pull 镜像。

1. 登录Docker

为了拉取一个私有镜像,首先,需要进行身份认证

docker login 

这个登录过程会创建或更新一个config.json文件来维护一个授权token

cat ~/.docker/config.json 

输出可能是这样的:

{
"auths": {
"https://index.docker.io/v1/": {
"auth": "c3R...zE2"
}
}
}

如果你使用的是Docker凭证(凭据)存储,那么将不会看到那个认证条目,而是看到一个以该存储的名称作为值的credsStore条目。

例如:

2. 基于已经存在的Docker凭据创建一个Secret

Kubernetes集群使用docker-registry类型的Secret来进行一个容器registry的认证,以获取一个私有镜像。

如果你已经执行了docker login,那么你可以把这个凭证复制到Kubernetes

 kubectl create secret generic regcred \
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
--type=kubernetes.io/dockerconfigjson

3. 通过在命令行中提供凭据来创建一个Secret

创建一个Secret,并将其命名为myregcred

kubectl create secret docker-registry myregcred \
--docker-server=<your-registry-server> \
--docker-username=<your-name> \
--docker-password=<your-password> \
--docker-email=<your-email> 

在这里:

  • <your-registry-server> is your Private Docker Registry FQDN. (https://index.docker.io/v1/ for DockerHub)
  • <your-name> is your Docker username.
  • <your-pword> is your Docker password.
  • <your-email> is your Docker email.

不出意外的话,你已经成功的再集群中设置了你的Docker凭据作为一个Secret,名字叫myregcred

4. 查看Secret

kubectl get secret myregcred --output=yaml

.dockerconfigjson 字段的值是一个经过base64编码后的你的Docker凭据

为了更好地理解.dockerconfigjson 字段,我们将它格式化一下:

kubectl get secret myregcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode 

输出可能是这样的:

{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"Y2hlb...29tOmt"}}} 

为了更好地理解上面输出的auth字段,我们可以这样:

echo "Y2hlb...29tOmt" | base64 --decode 

输出的字符串格式为 username:password,例如:

janedoe:1234

不难看出,Secret数据中包含的授权token字符串与~/.docker/config.json文件中的相似

5. 用你的Secret创建一个Pod

下面是一个Pod的配置文件private-reg-pod.yaml ,这个Pod将要使用你的Docker凭据myregcred

 apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: <your-private-image>
imagePullSecrets:
- name: myregcred

将文件my-private-reg-pod.yaml中的<your-private-image>替换成你自己的私有registry,例如:

 your.private.registry.example.com/janedoe/jdoe-private:v1

为了从registry中拉取镜像,Kubernetes需要凭证。配置文件中的imagePullSecrets字段指明Kubernetes应该从名为myregcred的Secret中获取凭证。

用你的Secret创建一个Pod,并验证它

kubectl apply -f my-private-reg-pod.yaml
kubectl get pod private-reg

6. 文档

https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry

https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

Kubernetes从私有镜像仓库中拉取镜像的更多相关文章

  1. Portainer安装,配置自定义镜像仓库拉取镜像

    Portainer介绍 Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台 ...

  2. k8s实战之从私有仓库拉取镜像 - kubernetes

    1.实战目的 从私有docker仓库拉取镜像,部署pod.上一篇中,我们搭建了私有的镜像仓库,这一篇我们将与k8s结合实战使用私有仓库. 2.登录docker 为了完成本次实战,需要登录docker, ...

  3. 配置 Containerd 在 harbor 私有仓库拉取镜像

    官方文档地址:https://github.com/containerd/cri/blob/master/docs/registry.md 严格来说,这个具体可分为两部分 1.在k8s中使用Conta ...

  4. 003-docker命令-远程镜像仓库命令,本地镜像管理命令

    1.远程镜像仓库 docker login/logout:查看 [不常用] docker push:查看 [不常用] docker search:从Docker Hub查找镜像 语法:docker s ...

  5. 配置kuernetes集群pod拉取私有镜像仓库中的镜像

    目录 1 背景说明 2 实现方法 3 具体实现 配置镜像仓库项目为公开类型(任何人可以访问) 配置docker-registry类型的secret(pod使用secret获取镜像认证) 通过账户名密码 ...

  6. 关于使用kubeoperator搭建k8s集群使用containerd作为容器运行时,从自己搭建的habor仓库拉取镜像的有关说明

    1.kubepi界面添加habor仓库信息,并授权给k8s集群 这一步的操作是当在工作负载选择从harbor仓库拉取镜像时会自动创建有关的secrets信息,从而不用事先手动创建了(有别于kuboar ...

  7. K8S从私有仓库拉取镜像

    通常来讲,我们在通过公共镜像仓库拉取docker镜像的时候,不需要任何的认证操作,但我们在构建了企业的私有镜像以后,就不得不在拉取镜像之前通过用户名密码来完成认证. 在docker单机环境中,我们可以 ...

  8. Jfrog Artifactory 创建docker 镜像仓库以及 push 镜像到 该仓库.

    1. 安装aitifactory 以及 启动 使用30天有效期激活 不在阐述. 2. 登录artifactory username:admin password:password 3. 创建 仓库 在 ...

  9. 微服务架构 - 搭建docker本地镜像仓库并提供权限校验及UI界面

    搭建docker本地镜像仓库并提供权限校验及UI界面 docker本地镜像仓库的作用跟maven私服差不多,特别是公司级或者是小组级开发好的docker仓库可以上传到本地镜像仓库中,需要用时,直接从本 ...

随机推荐

  1. day10-12_线程queue(了解)

    queue队列 :使用import queue,用法与进程Queue一样 queue is especially useful in threaded programming when informa ...

  2. 流程控制 Day06

    package com.sxt.arraytest2; public class breakTest { public static void main(String[] args) { label: ...

  3. 20172018-acmicpc-southeastern-european-regional-programming-contest-seerc-2017-en A - Concerts

    题意就是给一个字母序列a,以及一个另外一个字母序列b,你需要b中找到字母序列a,并且要求对于在b中的字母序列a,每个单词都需要满足相应的距离 其实很简单,我们利用DP[i][j]代表a已经匹配i个位置 ...

  4. CNN网络改善的方法——池化

    一个能降低卷积金字塔中特征图的空间维度,目前为止,我们通过调整步幅,将滤镜每次移动几个像素.图1 从而降低特征图的尺寸.这是降低图像采样率的一种非常有效的方法. 图1 它移除了很多信息,如果我们不采用 ...

  5. List of open source software

    List of open source software https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/ ...

  6. url地址栏参数<==>对象(将对象转换成地址栏的参数以及将地址栏的参数转换为对象)的实用函数

    /** * @author web得胜 * @param {Object} obj 需要拼接的参数对象 * @return {String} * */ function obj2qs(obj) { i ...

  7. Open Source Projects Released By Google

    Open Source Projects Released By Google Google has released over 20 million lines of code and over 9 ...

  8. Project Euler Problem 15-Lattice paths

    组合数,2n中选n个.向右走有n步,向下走有n步.共2n步.有n步是向右走的,计算向右走的这n步的所有情况,即C(2n,n). 或者,每一步,只能从右边或者上边走过来,只有这两种情况,即step[i] ...

  9. springmvc使用javabean作为请求参数

    1  首先写两个javabean对象  person 和 address 代码如下.两个类之间的关系如代码中 package cn.bean.demo.bo; public class Person ...

  10. hdu 4430 Yukari's Birthday (简单数学 + 二分)

    Problem - 4430 题意是,给出蜡烛的数量,要求求出r和k,r是蜡烛的层数,k是每一层蜡烛数目的底数. 开始的时候,没有看清题目,其实中间的那根蜡烛是可放可不放的.假设放置中间的那根蜡烛,就 ...