Kubernetes裡的secret最基本的用法

i042416發表於2018-11-20

Secret解決了密碼、token、金鑰等敏感資料的配置問題,使用Secret可以避免把這些敏感資料以明文的形式暴露到映象或者Pod Spec中。

Secret可以以Volume或者環境變數的方式使用。

使用如下命令列建立一個secret:

kubectl create secret generic admin-access --from-file=./username.txt --from-file=./password.txt

輸入檔案username.txt和password.txt需要手動建立,裡面分別維護用於測試的使用者名稱和密碼。

Kubernetes裡的secret最基本的用法

建立成功後,發現secret的型別為Opaque:

Kubernetes裡的secret最基本的用法

實際上,Kubernetes的secret有三種型別:

1. Service Account:用來訪問Kubernetes API,由Kubernetes自動建立,並且會自動掛載到Pod的 /run/secrets/kubernetes.io/serviceaccount 目錄中;

2. Opaque:base64編碼格式的Secret,用來儲存密碼、金鑰等;

3. kubernetes.io/dockerconfigjson :用來儲存私有docker registry的認證資訊。

而我們剛剛建立的secret的型別為Opaque,因此在kubectl get secrets的返回結果裡,能看到password和username的值均為base64編碼:

Kubernetes裡的secret最基本的用法

Kubernetes裡的secret最基本的用法

要在pod裡消費這個secret也很容易,看一個例子:

Kubernetes裡的secret最基本的用法

apiVersion: v1kind: Podmetadata:name: secret-podspec:restartPolicy: Nevervolumes:- name: credentialssecret:secretName: admin-accessdefaultMode: 0440containers:- name: secret-containerimage: alpine:3.8command: [ "/bin/sh", "-c", "cat /etc/foo/username.txt /etc/foo/password.txt" ]volumeMounts:- name: credentialsmountPath: "/etc/foo"readOnly: true

建立pod,自動執行,透過log命令檢視pod的日誌:

Kubernetes裡的secret最基本的用法

發現/bin/sh命令被執行了,pod mount的目錄/etc/foo下的username.txt和password.txt透過cat命令顯示了輸出:

Kubernetes裡的secret最基本的用法

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2220832/,如需轉載,請註明出處,否則將追究法律責任。

相關文章