zoukankan      html  css  js  c++  java
  • K8S 从私有仓库拉取镜像

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

      在docker单机环境中,我们可以直接在宿主机上执行docker login https://myhub.fdccloud.com类似这种命令的方式来完成认证。但在通过kubernetes来对docker做相关集群管理时,就不得不在所有的节点机上通过上面那种方式完成认证。这在大规模的应用架构中,是不可取的。

      当然,我们有另外一种稍微简便的方法。事实上,在执行docker login https://xxxxx完成认证的时候,实际是在前用户的家目录的.docker目录下生成了一个config.json文件。我们查看该文件的内容如下:

     这个文件包含了认证信息。所以另一个可行的办法,就是直接将该文件通过自动化的方式,推送到所有节点机的相应目录即可。但在实际的测试中,这种方式推送的节点仍然会偶尔出现认证失败的情况,具体什么原因目前尚不清楚。kubernetes提供多种针对私有仓库认证的方式,在这里,我只说明其中的一种方法,也是我实际使用的方法,通过k8s的secret来实现。

    k8s master上通过docker login登录registry,生成config.json文件。然后执行如下命令,将文件转换成base64编码:

    创建Secret

    命令直接创建,这种方式创建

    kubectl create secret docker-registry k8s-auth 
    --docker-server=registry.k8s.com 
    --docker-username=admin 
    --docker-password=Harbor12345

     

     通过解码,可以看到这种方式创建的内容比较繁琐,实际上我们只需要下面这样的即可。

    使用~/.docker/config.json 文件创建,根据官方文档需要添加镜像仓库的Secret:

    kubectl create secret generic registry-harbor 
        --from-file=.dockerconfigjson=/root/.docker/config.json 
        --type=kubernetes.io/dockerconfigjson

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

    然后就可以在创建Pod的时候引用这个secret了,但是如果想要在创建Deployment的时候默认引用这个secret,还需要配置serviceaccount

    https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/

    kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "registry-harbor"}]}'

    或者直接在清单文件中使用,在创建pod时,指定imagePullSecrets,示例如下:

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


    作者:Outsrkem
    出处:https://www.cnblogs.com/outsrkem/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Linux修改主机名称
    Druid监控SQL语句
    CentOS7.5搭建Hadoop分布式集群
    CentOS7.5 解决ifconfig报错
    windows 用VMware创建linux虚拟机,安装操作系统CentOS7.2
    MySQL报错this is incompatible with sql_mode=only_full_group_by
    CentOS配置Redis环境变量
    CentOS7.4搭建GitLab
    修改服务器路由策略
    Centos7 安装python3
  • 原文地址:https://www.cnblogs.com/outsrkem/p/14988159.html
Copyright © 2011-2022 走看看