一 secret概述
1.1 secret作用
Secret物件,主要作用是保管私密資料,比如密碼、OAuth Tokens、SSH Keys等資訊,將這些私密資訊放在Secret物件中比直接放在Pod或Docker Image中更安全,也更便于使用和分發,二 secret使用
2.1 secret創建
[root@k8smaster01 study]# kubectl create namespace myns [root@k8smaster01 study]# echo -n "value-1" | base64 dmFsdWUtMQ== [root@k8smaster01 study]# echo -n "value-2" | base64 dmFsdWUtMg== [root@k8smaster01 study]# vi secrets.yaml1 apiVersion: v1 2 kind: Secret 3 metadata: 4 name: mysecret 5 namespace: myns 6 type: Opaque 7 data: 8 password: dmFsdWUtMg0K 9 username: dmFsdWUtMQ0K[root@k8smaster01 study]# kubectl create -f secrets.yaml
注意:data域的各子域的值必須為BASE64編碼值,如上password域和username域都為BASE64編碼,
2.2 secret參考
創建完secret之后,可通過如下三種方式參考:- 在創建Pod時,通過為Pod指定Service Account來自動使用該Secret,
- 通過掛載該Secret到Pod來使用它,
- 在Docker鏡像下載時使用, 通過指定Pod的spc.ImagePullSecrets來參考它,
1 apiVersion: v1 2 kind: Pod 3 metadata: 4 name: mypod 5 namespace: myns 6 spec: 7 containers: 8 - name: mycontainer 9 image: redis 10 volumeMounts: 11 - name: foo 12 mountPath: "/etc/foo" 13 readOnly: true 14 volumes: 15 - name: foo 16 secret: 17 secretName: mysecret[root@k8smaster01 study]# kubectl create -f mysecretpod.yaml 如上例創建的Secret,被掛載到一個叫作mycontainer的Container中,在該Container中可通過相應的查詢命令查看所生成的檔案和檔案中的內容, [root@k8smaster01 study]# kubectl exec -ti mypod -n myns ls /etc/foo #查看掛載后的secret password username [root@k8smaster01 study]# kubectl exec -ti mypod -n myns cat /etc/foo/username value-1 [root@k8smaster01 study]# kubectl exec -ti mypod -n myns cat /etc/foo/password value-2 示例2:鏡像中參考,通常用于拉取需要驗證賬號密碼的私有倉庫的鏡像, [root@k8smaster01 ~]# docker login [email protected] registry.cn-hangzhou.aliyuncs.com Password:【阿里云倉庫密碼】 [root@k8smaster01 ~]# cat ~/.docker/config.json #查看是否寫入登錄資訊 [root@k8smaster01 ~]# base64 -w 0 ~/.docker/config.json #將登錄資訊檔案轉化為base64編碼 [root@k8smaster01 ~]# vim mysecretaliyun.yaml #創建secret內容
1 apiVersion: v1 2 kind: Secret 3 metadata: 4 name: myregsecret 5 namespace: default 6 data: 7 .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJyZWdpc3RyeS5jbi1oYW5nemhvdS5hbGl5dW5jcy5jb20iOiB7CgkJCSJhdXRoIjogIm 8 VERXlNRGsxTWpVM05rQXhNall1WTI5dE9uZzNNemMwTlRJeEtnPT0iCgkJfQoJfSwKCSJIdHRwSGVhZGVycyI6IHsKCQkiVXNlci1BZ2VudCI6ICJ 9 Eb2NrZXItQ2xpZW50LzE4LjAxxxxxxxxxxxxxxx 10 type: kubernetes.io/dockerconfigjson[root@k8smaster01 ~]# kubectl create -f mysecretaliyun.yaml [root@k8smaster01 ~]# vi mytestpod.yaml #創建Pod中使用imagePullSecrets參考
1 apiVersion: v1 2 kind: Pod 3 metadata: 4 name: mypodaliyun 5 spec: 6 containers: 7 - name: mongo 8 image: registry.cn-hangzhou.aliyuncs.com/xhypn/mongo:3.6 9 imagePullSecrets: 10 - name: myregsecret[root@k8smaster01 ~]# kubectl create -f mytestpod.yaml [root@k8smaster01 ~]# kubectl get pods mypodaliyun 1/1 Running 0 48s [root@k8smaster01 ~]# kubectl describe pods mypodaliyun

三 secret其他注意點
3.1 secret注意點
每個單獨的Secret大小不能超過1MB,Kubernetes不鼓勵創建大的Secret,因為如果使用大的Secret,則將大量占用API Server和kubelet的記憶體,當然,創建許多小的Secret也能耗盡API Server和kubelet的記憶體, 在使用Mount方式掛載Secret時,Container中Secret的data域的各個域的Key值作為目錄中的檔案,Value值被BASE64編碼后存盤在相應的檔案中,secret使用場景之一就是通過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,轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/123996.html
標籤:Linux
上一篇:基礎命令
下一篇:#Linux學習# 用戶管理命令
