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