系列目录html
上一节咱们分别使用纯文本帐户密码和docker的config文件一建立一个kubernetes secret
对象,而且把它添加到containers的imagePullSecrets
字段用以拉取私仓镜像.这一节咱们讲解另外一种方法:即把secret附加到default
这个serviceaccount上,这样拉取镜像的时候就不须要每次都在yml文件里声明imagePullSecrets
字段.nginx
至于为何把镜像的拉取secret附加到default
这个serviceaccont上就能够实现无密钥拉取,实际上这里涉及到了kubernetes的RBAC权限,本教程其它章节有介绍过,这里再也不详细介绍.默认状况下,拉取镜像使用的是default
这个帐户,若是给这个帐户添加了镜像拉取secret,则它会在拉取镜像时自动使用附加的secret,这样就不用在每一个yml文件里都声明imagePullSecrets
字段了.docker
其实知道了原理,而且有了上一节的基础,作法也很是简单,只须要一行命令便可api
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "regcred"}]}'
regcred
是咱们上一节生成的密钥.bash
完了以后,你们能够本身验证一下,从新编排一个yml文件,拉取本地没有的镜像,能够看到,yml文件里没有声明imagePullSecrets
,也一样能够拉取镜像.个人编排文件以下,很是简单,供你们参考ui
apiVersion: v1 kind: Pod metadata: name: testport spec: containers: - name: cat-hosts image: 192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend:1.4 imagePullPolicy: IfNotPresent
使用修改yml的方式为default用户增长imagePullSecrets
.
上述操做虽然看似很是简单,却要求很是高,不然很容易出错,固然你们能够选择记住这个命令,而后相似的命令愈来愈多时,所有记起来显然不是一个好的办法,咱们须要一种可行的操做方法.spa
- 把sa的编排文件导出到其它文件
kubectl get serviceaccounts default -o yaml > ./sa.yaml
内容看起来相似以下:3d
apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: 2015-08-07T22:02:39Z name: default namespace: default resourceVersion: "243024" selfLink: /api/v1/namespaces/default/serviceaccounts/default uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6 secrets: - name: default-token-uudge
- 咱们编辑这个文件,增长一个
imagePullSecrets
字段,并把regcred
赋给它,这样两者之间就创建了关联
apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: 2015-08-07T22:02:39Z name: default namespace: default selfLink: /api/v1/namespaces/default/serviceaccounts/default uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6 secrets: - name: default-token-uudge imagePullSecrets: - name: regcred
- 更新
default
这个帐户
kubectl replace serviceaccount default -f ./sa.yaml
原文出处:https://www.cnblogs.com/tylerzhou/p/11113721.htmlcode