2 利用secret
二、service account 型別 secret
三、kubernetes.io/dockerconfigjson 型別secret
前文介紹的都是通過映象或者configmap向容器傳遞資料或配置,都是明文進行傳遞的資料或配置是敏感的,比如賬戶密碼等金鑰之類的資料,用secret加密方式傳遞可以保證資料安全性。secret結構與configmap類似,都是鍵值對形式。secret有以下3種方式
opaque型別的secret,建立secret時傳遞的value值都是base64編碼後的值,傳到容器裡面的值是base64解碼後的值。
例如lzj通過base64編碼後的值為bhpqcg==
,lzj@lzj通過base64編碼後的值為bhpqqgx6ago=
,下面建立secret.yaml檔案
apiversion: v1
kind: secret
metadata:
name: mysecret
type: opaque
data:
username: bhpqcg==
password: bhpqqgx6ago=
首先建立乙個user.conf檔案,檔案中新增內容:
lzj
lzj@lzj
通過檔案建立secret
kubectl create secret generic mysecret2 --
from
-file=user.conf
檢視建立的mysecret2,kubectl get secret mysecret2 -o yaml
,發現user.conf內容已經被編碼base64進行傳遞
apiversion: v1
data:
user.conf: bhpqcmx6akbsemok
kind: secret
metadata:
creationtimestamp: "2020-08-19t15:23:41z"
name: mysecret2
namespace: default
resourceversion: "8630508"
selflink: /api/v1/namespaces/default/secrets/mysecret2
uid: de58bb77-3ce6-4930-a607-61fc6bb1e6d2
type: opaque
將上面建立的mysecret2掛載到volume中,容器從volume卷中讀取賬戶密碼檔案。首先建立pod為例,如下所示:
apiversion: v1
kind: pod
metadata:
name: secret-pod1
spec:
containers:
- name: mynginx1
image: nginx
imagepullpolicy: ifnotpresent
volumemounts:
- name: user
mountpath: /home/conf
readonly: true
volumes:
- name: user
secret:
secretname: mysecret2
[root@k8s-master01 pod]
# kubectl exec -it secret-pod1 -- /bin/sh
# cd /home/conf
# ls
user.conf
# cat user.conf
lzjlzj@lzj
將上面建立的mysecret匯入到容器環境變數中,建立mysecret用的base64編碼的值,匯入到容器中後就是解碼的值了。首先建立pod的yaml如下
apiversion: v1
kind: pod
metadata:
name: secret-pod2
spec:
containers:
- image: busybox
name: buysbox1
imagepullpolicy: ifnotpresent
command: [
"/bin/sh"
,"-c"
,"sleep 300"
] env:
- name: user_name
valuefrom:
secretkeyref:
name: mysecret
key: username
- name: user_password
valuefrom:
secretkeyref:
name: mysecret
key: password
建立該pod,並進入容器檢視環境變數,發現已經時解碼後的值
[root@k8s-master01 pod]
pod/secret-pod2 created
[root@k8s-master01 pod]
# kubectl exec secret-pod2 -it -- /bin/sh
/# env..
....
user_password=lzj@lzj
user_name=lzj..
....
serice account型別的secret會預設掛載到所有容器中,serice account用來訪問k8s api,由k8s自動建立,並且建立後會自動掛載到/var/run/secrets/kubernetes.io/serviceaccount目錄中。對於每乙個pod執行describe命令可以檢視到掛載的default-token-sk5fk的secret。
[root@k8s-master01 pod]
# kubectl describe pod secret-pod2
name: secret-pod2
namespace: default..
....
mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-sk5fk (ro)
conditions:
volumes:
default-token-sk5fk:
type: secret (a volume populated by a secret)
secretname: default-token-sk5fk
optional: false
[root@k8s-master01 pod]
# kubectl get secret
name type
data age
default-token-sk5fk kubernetes.io/service-account-token 3 82d
mysecret opaque 2 2d2h
mysecret2 opaque 1 2d
建立docker倉庫用來鑑權的registry,比如建立乙個對docker hub的鑑權,在k8s中執行容器時,可以直接從docker hub上pull映象。達到此功能,需建立乙個docker-registry型別的secret,然後指定登入docker hub的使用者名稱、密碼、郵箱,然後在建立pod時運用該secret即可。
1、首先建立乙個docker-registry型別的secret
kubectl create secret docker-registry myregistry --docker-server=hub.docker.com --docker-username=******x --docker-password=****** --docker-email=***[email protected]
2、建立pod,利用secret從docker hub中拉取映象
apiversion: v1
kind: pod
metadata:
name: myhello
spec:
containers:
- name: myhello
image: softwarebird/my_hello
imagepullsecrets:
- name: myregistry
通過yaml建立pod,容器會從docker hub上拉取softwarebird/my_hello最新的映象。 暴露敏感資料
威脅載體 可以獲得你的敏感資料和任何資料備份訪問許可權的人。包括靜止資料,在傳輸過程中,甚至在你的自定義瀏覽器中,包括內部和外部欺騙。攻擊媒介 攻擊者通常不直接破壞加密。他們破壞其他的東西,例如偷取秘鑰,做中間人攻擊,或者從伺服器,在傳輸當中或者從使用者的瀏覽器中,偷取明文資料。安全弱點 最普通的漏...
使用RSA證書加密敏感資料
x.509證書標準支援三種不對稱加密演算法 rsa,dsa,diffie hellman algorithms。最常用的是rsa演算法。所以本文就以前面章節使用makecert工具生成的生成的mytestcert證書進行加密解密,這個證書具有rsa演算法1024位的金鑰對。figure 12.rsa...
保護記憶體中的敏感資料
某些時候,我們需要在記憶體中儲存一些非常敏感的資料,比如信用卡賬號密碼 軟體註冊碼等等。那麼危險隨之而來,使用一些高階軟體除錯工具檢視程序的記憶體資料,居心不良的人就會有機會拿到這些本該嚴格保密的資料。microsoft windows 2000 sp4 以上版本的作業系統提供了用於資料保護的 ap...