Kubernetes从私有镜像仓库中拉取镜像

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

原文地址:https://www.cnblogs.com/cjsblog/p/12115299.html

时间: 2024-07-30 02:27:31

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

使用docker pull从镜像仓库拉取镜像时报错

[[email protected] ~]# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 119.29.29.29:53: read udp 192.168.100.100:59205-

003-docker的操作命令-远程镜像仓库命令,本地镜像管理命令

1.远程镜像仓库 docker login/logout:查看 [不常用] docker push:查看 [不常用] docker search:从Docker Hub查找镜像 语法:docker search [OPTIONS] TERM OPTIONS说明: --automated :只列出 automated build类型的镜像: --no-trunc :显示完整的镜像描述: -s :列出收藏数不小于指定值的镜像. 示例:docker search -s 10 java docker p

K8s之Pod资源管理及创建Harbor私有镜像仓库(含镜像拉取操作,中途含排错)

pod是k8s管理的最小单元 pod中有多个容器,现实生产环境中只有一个容器 特点: 1.最小部署单元2.一组容器的集合3.一个Pod中的容器共享网络命令空间4.Pod是短暂的 Pod容器分类: 1:infrastructure container 基础容器(透明的过程,用户无感知) 维护整个Pod网络空间 node节点操作 `查看容器的网络` [[email protected] ~]# cat /opt/kubernetes/cfg/kubelet KUBELET_OPTS="--logto

dcoker镜像仓库配置和镜像管理

一.概念简单来说镜像是具体封装好的一个容器环境,不包括内核而又精简的操作系统 二.配置镜像加速站点我们在pull Image 的时候,docker默认会从国外的Docker Hub上下载,因此会很慢:下面我们通过配置国内加速站点的方式解决该问题1.编辑/etc/docker/daemon.json文件,配置如下{"registry-mirrors":["http://hub-mirror.c.163.com"]} 2.重启dockersystemctl restar

创建 deployment时 从 私有仓库 拉取镜像失败的解决办法 ErrImagePull

我刚开始的 ssm-deployment.yml 文件如下 使用 kubectl get deploy  结果如下 居然没有起来 因为我 pull  和push 镜像都没有问题 .然后我看 具体的Pod的状态如下 Failed to pull image "10.136.195.150:80/micro/ssm:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied

可能是最详细的部署:Docker Registry企业级私有镜像仓库Harbor管理WEB UI

上一篇文章搭建了一个具有基础功能,权限认证.TLS 的私有仓库,但是Docker Registry 作为镜像仓库,连管理界面都没有,甚至连一些运维必备的功能都是缺失的,还有什么 Docker 镜像仓库管理工具呢?这里有一个简单好用的企业级 Registry 服务器 - Harbor,推荐在生产环境上使用. Harbor 简介 Harbor是VMware公司开源的企业级Docker Registry项目,其目标是帮助用户迅速搭建一个企业级的Docker registry服务. 它以Docker公司

使用Nexus3构建Docker私有镜像仓库

一.安装Nexus3 Nexus3是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven.npm.Docker.YUM.Helm等格式数据的存储和发布:并且能够与Jekins.SonaQube和Eclipse等工具进行集成.Nexus3支持作为宿主和代理存储库的Docker存储库,可以直接将这些存储库暴露给客户端工具:也可以以存储库组的方式暴露给客户端工具,存储库组是合并了多个存储库的内容的存储库,能够通过一个URL将多个存储库暴露给客户端工具,从而

使用Harbor配置Kubernetes私有镜像仓库

Harbor使用了基于角色的访问控制策略,当从Harbor中拉去镜像的时候,首先要进行身份认证,认证通过后才可以拉取镜像.在命令行模式下,需要先执行docker login,登陆成功后,才可以docker pull. 通常情况下,在私有云环境中使用kubernetes时,我们要从docker registry拉取镜像的时候,都会给docker daemo配置–insecure-registry属性来告诉docker daemo我们所使用的docker registry是可信的,这样才能从私有的d

巧用Docker镜像仓库Harbor部署私有Mirror服务

本文作者付广平,UnitedStack有云存储工程师,北京邮电大学硕士,从事大数据和云计算相关工作,2016年毕业后加入UnitedStack大数据&容器组,负责Docker.Magnum和Sahara相关工作,Openstack.Docker社区活跃者. 作者别出心裁地使用Harbor搭建了私有Mirror服务,加速外部Docker镜像的下载.编者对原文做了少量修改. Harbor是VMware公司最近开源的企业级Docker Registry项目(https://github.com/vmw