k8s數據持久化之Secret

1、
Secret資源對象:解決了密碼、token、密鑰等敏感數據的配置問題,而不須要把這些敏感數據暴露到鏡像或者Pod Spec中。Secret能夠以Volume或者環境變量的方式使用。
用來保存一些敏感信息,好比數據庫的用戶名密碼或者密鑰。
Secret有三種類型:
1.Service Account:用來訪問Kubernetes API,由Kubernetes自動建立,而且會自動掛載到Pod的/run/secrets/kubernetes.io/serviceaccount目錄中。
2.Opaque:base64編碼格式的Secret,用來存儲密碼、密鑰等。
3.Kubernetes.io/dockerconfigjson:用來存儲私有docker registry的認證信息。docker

二,以實驗測試的方式,建立4種secret資源。
姓名:class=lbs
密碼:password=www.com
建立2個Pod,分別以掛載Volume的方式,和以環境變量env的方式去使用,secret2,和secret4.數據庫

1)經過 --from-literal(文字的):
kubectl create secret generic **lbssecret1 (建立secret資源的名)**--from-literal=class=lbs --from-literal=password=www.comww.com
Generic:通用的、通常的。加密方式。
查看secret資源
5. kubectl get secrets   
6.NAME                  TYPE                                  DATA   AGE  
7.lbssecret1            Opaque                                2      24s  
使用describe能夠查看secret資源的詳細信息。**(能夠看到是以密文的方式存儲)**
1kubectl describe secrets lbssecret1   
2.Name:         lbssecret1  
3.Namespace:    default  
4.Labels:       <none>  
5.Annotations:  <none>  
6.  
7.Type:  Opaque  
8.  
9.Data  
10.====  
11.class:     3 bytes       #只能查看到數據的大小,沒法查看到數據內容。
12.password:  7 bytes  
2)經過 --from-file(文件):(**這種方式不推薦使用,須要將存儲的數據寫入到文件中,注意每一個文件只能存儲一個數據。)**
echo lbs >class
 echo www.com >password
 kubectl  create  secret  generic lbssecret2  --from-file=class --from-file=password 
 查看:
 1.kubectl describe secrets lbssecret2   
2.Name:         lbssecret2  
3.Namespace:    default  
4.Labels:       <none>  
5.Annotations:  <none>  
6.  
7.Type:  Opaque  
8.  
9.Data  
10.====  
11.class:     4 bytes  
12.password:  8 bytes  
3)經過 --from-env-file:**(這種方式能夠在同一個文件內寫入多個數據。)**
vim lbs.txt
class=lbs
password=www.com(保存退出)

kubectl  create secret generic mysecret3 --from-env-file=lbs.txt
查看:
1.kubectl describe secrets lbssecret3   
2.Name:         lbssecret3  
3.Namespace:    default  
4.Labels:       <none>  
5.Annotations:  <none>  
6.  
7.Type:  Opaque  
8.  
9.Data  
10.====  
11.class:     3 bytes  
12.password:  7 bytes  
4)經過yaml配置文件的方式。(把須要保存的數據加密)
echo lbs | base64
echo www.com | base64  

vim lbssecret4.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret4
data:
  class: #編譯的lbs
  password: #編譯的www.com
    執行文件:
    kubectl apply -f lbssecret4.yaml
    1.kubectl describe secrets lbhsecret4   
2.Name:         lbhsecret4  
3.Namespace:    default  
4.Labels:       <none>  
5.Annotations:    
6.Type:         Opaque  
7.  
8.Data  
9.====  
10.password:  8 bytes  
11.class:     4 bytes  

建立2個Pod,分別以掛載的方式,和以環境變量的方式去使用,secret2,和secret4.json

1)以Volume掛載的方式:使用lbssecret2.
vim pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: lbspod1
spec:
  containers:
  - name: lbspod
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 300000
    volumeMounts:
    - name: secret-lbs
      mountPath: "/etc/secret-lbs"  掛在到pod容器內的路徑
      readOnly: true
  volumes:
    - name: secret-lbs
      secret:
        secretName: lbssecret2

執行yaml文件,查看Pod狀態:br/>1.[root@master lbhsecret]# kubectl apply -f pod1.yaml   
2.pod/lbspod1 created  
查看:
3. kubectl get pod  
4.NAME      READY   STATUS              RESTARTS   AGE  
5.lbspod1   1/1     Running   0          26s  
進入pod內,掛載的路徑中。使用cat 查看class姓名,密碼(cat class)查看數據是否掛載成功。(能夠發現會自動幫助解密)
2)以環境變量的方式:使用lbssecret4.vim

vim  pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: lbspod2
spec:
  containers:
  - name: lbspod
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 300000
    env:
      - name: SECRET_CLASS#容器內的變量名
        valueFrom:
          secretKeyRef:#提取環境變量的值
            name: lbssecret4#調用secret資源的lbssecret4
            key: class#調用lbssecret4對應class的值
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: lbssecret2
            key: password

執行yaml文件,查看Pod狀態:br/>1.[root@master lbhsecret]# kubectl apply -f pod2.yaml   
2.pod/lbspod2 created  
查看:
3. kubectl get pod  
4.NAME      READY   STATUS    RESTARTS   AGE  
5.lbspod1   1/1     Running   0          10m  
6.lbspod2   1/1     Running   0          39s  
進入pod中查看數據。可以使用echo的方式(echo容器內的變量名)
例如:echo $SECRET_CLASS查看保存的姓名,密碼。api

相關文章
相關標籤/搜索