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對象

  1. 通過命令創建
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
Tags: