k8s使用secret从私有仓库拉取镜像

        使用docker从私有仓库拉取经销,可以使用docker login [私有仓库地址]  然后输入用户名和密码登录后就可以拉取镜像了,但如果使用k8s时,node 节点过多,难道需要跑到每个node节点去执行一次登录么?当然不是.这里就牵扯到k8s中的一个secret的东西.

Secret 有三种类型: 

  • Service Account :用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂载到 Pod 的/run/secrets/kubernetes.io/serviceaccount  目录中
  • Opaque :base64编码格式的Secret,用来存储密码、密钥等
  • kubernetes.io/dockerconfigjson :用来存储私有 docker registry 的认证信息

 

这里主要介绍第三种kubernetes.io/dockerconfigjson 如何使用.当使用k8s命令启动pod时,出现了

      rpc error: code = Unknown desc = Error response from daemon: pull access denied for 222.212.85.199:12375/gzlt/gzlt, repository does not exist or may require 'docker login'

 rpc error: code = Unknown desc = Error response from daemon: pull access denied for 222.212.85.199:12375/gzlt/gzlt, repository does not exist or may require 'docker login'

这样的错误提示,一般就是没有通过身份验证.,这时,就需要设置验证信息,来告诉docker,然后通过验证后拉取镜像.

 

首先通过kubectl 命令创建secret 

 

kubectl create secret docker-registry [secret名称] --docker-server=[私有仓库ip:端口] --docker-username=[用户名] --docker-password=[密码]  --namespace=[k8s命名空间]

这里选择docker-registry类型创建secret  

需要注意的是: --namespace 参数和后面使用此secret 的pod 有密切的关系.如果他们不在同一个命名空间,也是不会验证成功的.

然后就是在创建pod的yaml文件中添加secret


apiVersion: v1
kind : ReplicationController
metadata:
  name : 
  namespace: 
spec:
  replicas: 2
  selector :
    app : 
  template:
    metadata:
      labels :
        app : 
    spec:
      containers:
        - name : 
          image : 
          imagePullPolicy: IfNotPresent
          ports :
            - name: webservice
              containerPort: 8088
            - name: 
              containerPort: 9081
      imagePullSecrets:  
      - name: [secret名称]   --这里就配置你刚才创建的secret 的名称即可

然后再次创建pod  就可以了.

 

 

ps: 网上还有很多创建secret 的方法,这里就不说了,毕竟也没有使用过.感兴趣的可以自己再去多了解一下.

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页