k8s入門之Secret(十)
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=//registry.aliyun.com --docker-username=root --docker-password=123456 [email protected]
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