k8s获取私有仓库之secret从原理到实践

/ k8s / 没有评论 / 1593浏览

前面的话

官方文档

在master上面创建一个secret,写在deploy的yaml里面,部署的时候,先由master权衡在哪个节点去部署,哪个节点就回去pull那个image(假如不存在这个镜像的话),所以每个节点要先去login我们的私库,这个操作可以由ansible去完成。

secret存储的是一些加密过的账号密码,不在yaml里面泄漏代码

在master上创建一个secret

创建一个secret 这里要注意namespace的指定

# kubectl create secret -n namespace  docker-registry <name> --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
[root@k8s-master yml]# kubectl create secret docker-registry myregistrykey --docker-server=https://hub.我的仓库地址.cn --docker-username=用户 --docker-password=密码 --docker-email=我的邮箱
secret/myregistrykey created

myregistrykey 是自定义的仓库secret名字,应该取一个有意义的名字,可以按照项目的名字来命名

查看当前有哪些secret

[root@k8s-master yml]# kubectl get secrets
NAME                  TYPE                                  DATA   AGE
default-token-svpvx   kubernetes.io/service-account-token   3      23d
myregistrykey           kubernetes.io/dockerconfigjson        1      13s

serect存储的是什么?

一步一步来看

[root@k8s-master yml]# kubectl get secret myregistrykey -o yaml
apiVersion: v1
data:
  .dockerconfigjson: eyJhdXRocyI6eyJodHRwczovL2h1Yi53ZW55aW5odWxpYW4uY24iOnsidXNlcm5hbWUiOiJhZG1pbiIsInBhc3N3b3JkIjoiTWVtZWN0ODg4QDEyMyIsImVtYWlsIjoibGlqaW5naHVhQG1lbWVjdC5jbyIsImF1dGgiOiJZV1J0YVc0NlRXVnRaV04wT0RnNFFERXlNdz09In19fQ==
kind: Secret
metadata:
  creationTimestamp: "2019-06-06T05:30:01Z"
  name: myregistrykey
  namespace: default
  resourceVersion: "2789857"
  selfLink: /api/v1/namespaces/default/secrets/myregistrykey
  uid: 2178095c-881c-11e9-8457-000c29dba709
type: kubernetes.io/dockerconfigjson
[root@k8s-master yml]# echo eyJhdXRocyI6eyJodHRwczovL2h1Yi53ZW55aW5odWxpYW4uY24iOnsidXNlcm5hbWUiOiJhZG1pbiIsInBhc3N3b3JkIjoiTWVtZWN0ODg4QDEyMyIsImVtYWlsIjoibGlqaW5naHVhQG1lbWVjdC5jbyIsImF1dGgiOiJZV1J0YVc0NlRXVnRaV04wT0RnNFFERXlNdz09In19fQ== |base64 -d ; echo
{"auths":{"https://hub.我的仓库地址.cn":{"username":"admin","password":"我的密码","email":"你的邮箱","auth":"YWRtaW46TWVtZWN0ODg4QDEyMw=="}}}

在dashbord的展示

deploy.yaml

省略部分内容

 apiVersion: apps/v1 
# 当前配置格式的版本
kind: Deployment

···   省略     ·····

 ports:
        - containerPort: 8080

      imagePullSecrets:
       - name: myregistrykey