在 Kubernetes 中,Secrets
是用於儲存和管理敏感資訊的關鍵資源。這些敏感資訊可能包括密碼、API 權杖、SSH 密鑰等,這些資訊以 base64 編碼的形式儲存。透過使用 Secrets,可以避免將敏感資訊寫死(hard-coding)到容器映像或設定檔案中,從而提升應用程式的安全性。
Secrets
的基本結構包含以下部分:
apiVersion
:指定 API 的版本。kind
:定義資源的類型,這裡是 Secret
。metadata
:包含名稱、標籤等資訊。data
:儲存 base64 編碼後的敏感資訊。以下是一個範例:
apiVersion: v1
kind: Secret
metadata:
name: example-secret
data:
username: YWRtaW4=
password: c2VjcmV0
Kubernetes 提供了多種類型的 Secrets 來滿足不同場景的需求。主要有以下幾種:
Opaque(不透明):
kubectl create secret generic
創建的 Secret 就是這種類型。kubernetes.io/service-account-token:
TokenRequest API
來取得短期、會自動輪轉的 ServiceAccount token,以替代傳統的長期 token。這些短期 token 在安全性和靈活性上有更大的優勢。kubernetes.io/dockercfg 和 kubernetes.io/dockerconfigjson:
kubernetes.io/tls:
不同類型的 Secrets 針對不同應用場景進行優化,選擇正確的類型能讓設定更加清晰與安全。
可以使用 kubectl create secret
指令來快速創建 Secrets。例如:
kubectl create secret generic example-secret --from-literal=username=admin --from-literal=password=secret
在實際場景中,通常會透過 YAML 定義檔案來創建 Secrets,便於版本控制與環境管理。
kubectl apply -f example-secret.yaml
Secrets 可以以多種方式在 Pod 中使用,最常見的是通過環境變數和設定檔案。
當應用程式需要通過環境變數讀取敏感資訊時,可以使用以下方式:
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: app-container
image: nginx:latest
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: example-secret
key: username
- name: PASSWORD
valueFrom:
secretKeyRef:
name: example-secret
key: password
當應用程式需要從檔案中讀取敏感資訊時,Secrets 可以掛載為檔案:
apiVersion: v1
kind: Pod
metadata:
name: secret-file-pod
spec:
containers:
- name: app-container
image: nginx:latest
volumeMounts:
- name: secret-volume
mountPath: /etc/secret
volumes:
- name: secret-volume
secret:
secretName: example-secret
在 Kubernetes 中,TLS 憑證是一個常見的使用 Secrets 的場景。以下介紹如何創建和管理 TLS Secrets。
首先,需要準備好 TLS 憑證(tls.crt
)和私鑰(tls.key
)檔案,以下是使用指令直接創建一個 Secret:
kubectl create secret tls tls-secret --cert=tls.crt --key=tls.key
下列範例是透過YAML定義一個Secret:
apiVersion: v1
kind: Secret
metadata:
name: tls-secret
type: kubernetes.io/tls
data:
tls.crt: <base64-encoded-cert>
tls.key: <base64-encoded-key>
要檢視 Cluster 中的 Secrets,可以使用以下指令:
kubectl get secrets
Secrets 可以透過以下指令查看詳細資訊:
kubectl describe secret example-secret
Secrets 可以透過以下指令進行即時更新:
kubectl edit secret example-secret
今天我們深入探討了 Kubernetes 中使用 Secrets 來管理敏感資訊的最佳實踐。我們學習了 Secrets 的基本概念、如何創建與使用,並探討了其在 TLS 憑證管理中的應用。這些知識對於提升 Kubernetes 中的安全性至關重要。
在後續的學習中,我們將探討如何使用 Volumes、PersistentVolumes 等進一步提升 Kubernetes 的儲存管理能力。此外,我們還將詳細介紹如何在 Ingress 中整合 TLS Secrets 來保護應用程式的通訊,讓您的 Kubernetes Cluster 更具穩定性與安全性。