k8s入門之Secret(十)

景少發表於2022-05-08

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物件

  1. 通過命令建立
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

相關文章