系列目錄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
imagePullSecrets
.上述操做雖然看似很是簡單,卻要求很是高,不然很容易出錯,固然你們能夠選擇記住這個命令,而後相似的命令愈來愈多時,所有記起來顯然不是一個好的辦法,咱們須要一種可行的操做方法.spa
1) 把sa的編排文件導出到其它文件3d
kubectl get serviceaccounts default -o yaml > ./sa.yaml
內容看起來相似以下:code
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
2) 咱們編輯這個文件,增長一個imagePullSecrets
字段,並把regcred
賦給它,這樣兩者之間就創建了關聯htm
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
3) 更新default
這個帳戶
kubectl replace serviceaccount default -f ./sa.yaml