上一篇說了ServiceAccount,這一篇就來看一下Secret。node
Secret的主要做用是保管私密數據,好比密碼、OAuth Tokens、SSH Keys等信息。docker
上一篇說到,默認的Secret主要包含三個東西,分別是token、ca.crt、namespacejson
固然,也能夠包含其餘信息,api
例如:建立一個Secretbash
apiVersion: v1 kind: Secret metadata: name: secret type: Opaque data: password: base64 username: base64
在data域中的各子域的值必須是BASE64編碼值。併發
Secret被建立以後,能夠經過下列三種方式使用它:編碼
(1)爲Pod指定Service Account來自動使用該Secretspa
apiVersion: v1 kind: Pod metadata: name: pod spec: containers: - name: pod image: image serviceAccountName: serviceaccount
(2)經過掛載該Secret到Pod來使用它3d
apiVersion: v1 kind: Pod metadata: name: pod spec: containers: - name: pod image: image volumeMounts: - name: foo mountPath: "/data" readOnly: true volumes: - name: foo secret: secretName: secretname
(3)在Docker鏡像下載時使用,經過設置spec.imagePullSecrets來引用blog
一、docker登錄私有倉庫
docker login localhost:5000
輸入用戶名和密碼,若是是第一次登錄,則會建立用戶,相關信息會被寫入~/.docker/config.json文件中
二、用BASE64編碼~/.docker/config.json的內容
cat ~/.docker/config.json | base64
三、將第二步的輸出結果做爲secret的data.dockercfg域的內容,由此建立一個Secret
apiVersion: v1 kind: Secret metadata: name: base64secret data: .dockercfg: ewoJImF1dGhzIjogewoJCSJsb2NhbGhvc3Q6NTAwMCI6IHsKCQkJImF1dGgiOiAiYkdsMWMzazZNVEl6TkRVMiIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTkuMDMuMTIgKGxpbnV4KSIKCX0KfQ== type: kubernetes.io/dockercfg
四、在建立Pod時引用該Secret
apiVersion: v1 kind: Pod metadata: name: k8sdemo spec: containers: - name: k8sdemo image: cnode-1:5000/k8sdemo:v1.3 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 imagePullSecrets: - name: base64secret
在使用Mount方式掛載Secret時,Container中Secret的data域的各個域的key值做爲目錄的文件,Value值被BASE64編碼後存在相應的文件中
該Container中可經過相應的查詢命令查看所生成的文件和文件中的內容,以下所示:
能夠經過Secret保管敏感信息,並以Mount方式將Secret掛載到Container中,而後經過訪問目錄中文件的方式獲取信息。
當Pod被API Server建立時,API Server不會檢驗該Pod引用的Secret是否存在,一旦這個Pod被調度,則kubelet將試着去獲取Secret的值,若是Secret不存在或暫時沒法鏈接到API Server,則kubelet將按時間間隔按期重試獲取該Secret,併發送一個Event來解釋Pod沒有啓動的緣由,一旦Secret被Pod獲取,則kubelet將建立並掛載包含Secret的Volume。只有全部Volume都掛載成功,Pod中的Container纔會被啓動,在kubelet啓動Pod中的Container後,Container中和Secret相關的Volume將不會被改變,即便Secret自己被修改。爲了使用更新後的Secret,必須刪除舊Pod,並從新建立一個新Pod