天天看點

Kubernetes裡的secret最基本的用法

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: v1

kind: Pod

metadata:

name: secret-pod

spec:

restartPolicy: Never

volumes:

- name: credentials

secret:

secretName: admin-access

defaultMode: 0440

containers:

- name: secret-container

image: alpine:3.8

command: [ "/bin/sh", "-c", "cat /etc/foo/username.txt /etc/foo/password.txt" ]

volumeMounts:

- name: credentials

mountPath: "/etc/foo"

readOnly: true           

建立pod,自動執行,通過log指令檢視pod的日志:

Kubernetes裡的secret最基本的用法

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

Kubernetes裡的secret最基本的用法

本文來自雲栖社群合作夥伴“汪子熙”,了解相關資訊可以關注微信公衆号"汪子熙"。

上一篇: 設計模式