Secret與ConfigMap都是用來儲存配置資訊的,不同之處在於ConfigMap是明文儲存的,而Secret用來儲存敏感資訊,如:密碼、OAuth令牌,ssh key等等。Secret常用有三種型別:
-
Opaque:使用base64編碼格式儲存密碼等資訊,加密性很弱。
-
kubernetes.io/dockerconfigjson:用來儲存私有docker registry的認證資訊(倉庫地址、登入使用者名稱密碼)。
-
kubernetes.io/service-account-token:用來建立服務賬號(Service Account),是一種自動被啟用的使用者認證機制,用來驗證請求的合法性。
一、建立Opaque型別的Secret物件
1.使用命令建立Opaque型別的Secret物件
kubectl create secret generic mysecret1 --from-literal=username=root --from-literal=password=123456
(1)引數說明:
-
generic 子命令表示建立的是Opaque型別的Secret
-
--from-literal:表示從對字面量值進行編碼,後面跟kv鍵值對,對v進行編碼;
你也可以使用--from-file引數指定對檔案內容進行編碼,此處讀者可以自行練習。
(2)檢視建立結果:
kubectl get secret
(3)使用describe命令檢視詳情
kubectl describe secret mysecret1
可以看到被編碼的資料沒有顯示出來,只能看到資料大小,可以使用以下方法檢視被編碼資料的明文
(4)輸出yaml檔案格式檢視詳情
kubectl get secret mysecret1 -o yaml
然後使用linux命令檢視被編碼資料的明文
echo -n "MTIzNDU2" | base64 -d
注意截圖中被解碼後的明文是不含換行符的
2.使用yaml檔案建立Opaque型別的Secret物件
(1)獲取要儲存資料的編碼
假如要儲存username=admin,password=654321的資料,先用linux命令獲取對應的base64編碼資料。
echo -n "admin" | base64
echo -n "654321" | base64
(2)新建yaml檔案
vi secret-my2.yaml
(3)編寫yaml檔案內容
apiVersion: v1
kind: Secret
metadata:
name: mysecret2
type: Opaque
data:
username: YWRtaW4=
password: NjU0MzIx
(4)執行建立命令
kubectl create -f secret-my2.yaml
(5)檢視建立結果
可以使用上面的方法檢視,這裡不再贅述
二、使用Opaque型別的secret物件
1.通過環境變數的方式
liunx自帶的命令env,可以用來檢視當前系統的環境變數,我們可以把secret物件設定到環境變數上來進行測試
(1)新建yaml檔案
vi mysecret1-env.yaml
(2)編寫使用secret物件的pod的yaml檔案內容
apiVersion: v1
kind: Pod
metadata:
name: pod-test-mysecret1
spec:
containers:
- name: pod-test-mysecret1-bb
image: busybox
command: ["/bin/sh", "-c", "env"]
# 從secret物件中獲取對應key的值賦值給環境變數
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: mysecret1
key: username
- name: PASSWORD
valueFrom:
secretKeyRef:
name: mysecret1
key: password
(3)執行yaml檔案建立pod
kubectl create -f mysecret1-env.yaml
(4)檢視pod,在預設名稱空間下
通過檢視此pod的日誌,可以看到輸出的環境變數資訊是mysecret1物件的資訊
2.通過vloume掛載方式
(1)新建yaml檔案
vi mysecret2-volume.yaml
(2)編寫使用secret物件的pod的yaml檔案內容
apiVersion: v1
kind: Pod
metadata:
name: pod-test-mysecret2
spec:
containers:
- name: pod-test-mysecret2-bb
image: busybox
command: ["/bin/sh", "-c", "cat /etc/secrets/my-username;cat /etc/secrets/my-password;"]
volumeMounts:
- name: secrets
mountPath: /etc/secrets
volumes:
- name: secrets
secret:
secretName: mysecret2
items:
# 把secret物件掛載到檔名
- key: username
path: my-username
- key: password
path: my-password
(3)執行yaml檔案建立pod
kubectl create -f mysecret2-volume.yaml
(4)檢視pod,在預設名稱空間下
通過檢視此pod的日誌,可以看到輸出的資訊是mysecret2物件中的資料
三、建立kubernetes.io/dockerconfigjson型別的Secret物件
- 通過命令建立
kubectl create secret docker-registry aliyun --docker-server=https://registry.aliyun.com --docker-username=root --docker-password=123456 --docker-email=test@qq.com
2.檢視建立結果
3.檢視詳細資訊
4.解碼密文資訊
5.使用此型別的secret物件
指定 imagePullSecrets 屬性的name欄位值為你建立的secret物件
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: xxx-api:v1.0
imagePullSecrets:
- name: aliyun