kubernetes實戰篇之為默認賬戶創建鏡像拉取密鑰


系列目錄

上一節我們分別使用純文本賬戶密碼和docker的config文件一創建一個kubernetes secret對象,並且把它添加到containers的imagePullSecrets字段用以拉取私倉鏡像.這一節我們講解另一種方法:即把secret附加到default這個serviceaccount上,這樣拉取鏡像的時候就不需要每次都在yml文件里聲明imagePullSecrets字段.

至於為什么把鏡像的拉取secret附加到default這個serviceaccont上就可以實現無密鑰拉取,實際上這里涉及到了kubernetes的RBAC權限,本教程其它章節有介紹過,這里不再詳細介紹.默認情況下,拉取鏡像使用的是default這個賬戶,如果給這個賬戶添加了鏡像拉取secret,則它會在拉取鏡像時自動使用附加的secret,這樣就不用在每個yml文件里都聲明imagePullSecrets字段了.

其實知道了原理,並且有了上一節的基礎,做法也非常簡單,只需要一行命令即可

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

regcred是我們上一節生成的密鑰.

完了之后,大家可以自己驗證一下,重新編排一個yml文件,拉取本地沒有的鏡像,可以看到,yml文件里沒有聲明imagePullSecrets,也同樣可以拉取鏡像.我的編排文件如下,非常簡單,供大家參考

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.

上述操作雖然看似非常簡單,卻要求非常高,否則很容易出錯,當然大家可以選擇記住這個命令,然后類似的命令越來越多時,全部記起來顯然不是一個好的辦法,我們需要一種可行的操作方法.

  1. 把sa的編排文件導出到其它文件
kubectl get serviceaccounts default -o yaml > ./sa.yaml

內容看起來類似如下:

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
  1. 我們編輯這個文件,增加一個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
  1. 更新default這個賬戶
kubectl replace serviceaccount default -f ./sa.yaml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM