kubernetes實戰篇之爲默認帳戶建立鏡像拉取密鑰

系列目錄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

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
相關文章
相關標籤/搜索