当我们尝试从私有仓库中拉取镜像时,可能会收到这样提示: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/

最新文章

  1. HDU 5010 Get the Nut(2014 ACM/ICPC Asia Regional Xi&#39;an Online)
  2. .net解决程序集版本冲突的方法
  3. dinic模板
  4. noip2014提高组day2二题题解-rLq
  5. 夺命雷公狗---node.js---19之项目的构建在node+express+mongo的博客项目4mongodb在项目中的基本引入
  6. Win+PHP+IECapt完整实现网页批量截图并创建缩略图
  7. JavaScript sort()方法比较器
  8. mysql安装前的系统准备工作(转)
  9. 在ubuntu14.04上安装openstack mitaka
  10. 关于asp.net执行exe程序时权限不够的解决办法(2015.04.17更新)
  11. UML 用例建模
  12. jq中的事件委托:closest,parent,parents,delegate
  13. TFS 安装 扩展包
  14. Spring Boot MyBatis配置多种数据库
  15. Linux mmc framework1:软件架构
  16. document.createDocumentFragment 以及创建节点速度比较
  17. iOS-项目开发1-UIImage
  18. Set Matrix Zeroes leetcode java
  19. python获取当前系统的桌面的路径
  20. Selenium2+python自动化34-获取百度输入联想词

热门文章

  1. 提高webpack的构建速度的几种方法概括
  2. Myeclipse 方法中文注释看不到
  3. F4NNIU 的 Docker 学习资料整理
  4. qt 中lineEdit-&gt;setText()输出double
  5. jQuery 练习 dom
  6. ExecutorService小试牛刀
  7. java基础-内存分配
  8. hdu 1384 Intervals (差分约束)
  9. Layout布局(补充)
  10. Scrapy五大核心组件简介