iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
Kubernetes

Kubernetes三十天就上手系列 第 12

Day 12- 使用 Secrets 管理敏感資訊

  • 分享至 

  • xImage
  •  

使用 Secrets 管理敏感資訊

Secrets 的基本概念

在 Kubernetes 中,Secrets 是用於儲存和管理敏感資訊的關鍵資源。這些敏感資訊可能包括密碼、API 權杖、SSH 密鑰等,這些資訊以 base64 編碼的形式儲存。透過使用 Secrets,可以避免將敏感資訊寫死(hard-coding)到容器映像或設定檔案中,從而提升應用程式的安全性。

Secrets 的結構

Secrets 的基本結構包含以下部分:

  • apiVersion:指定 API 的版本。
  • kind:定義資源的類型,這裡是 Secret
  • metadata:包含名稱、標籤等資訊。
  • data:儲存 base64 編碼後的敏感資訊。

以下是一個範例:

apiVersion: v1
kind: Secret
metadata:
  name: example-secret
data:
  username: YWRtaW4=
  password: c2VjcmV0

Secrets 的類型

Kubernetes 提供了多種類型的 Secrets 來滿足不同場景的需求。主要有以下幾種:

  1. Opaque(不透明):

    • 這是最常用的 Secret 類型,可以用來儲存任何自定義的鍵值對。
    • 預設情況下,通過 kubectl create secret generic 創建的 Secret 就是這種類型。
  2. kubernetes.io/service-account-token

    • 當 Kubernetes 自動為 ServiceAccount 生成身份驗證 token 時,這種 Secret 會被創建。這些 token 用於 Pod 與 API 伺服器之間的身份驗證。
      -從 Kubernetes v1.22 開始,建議使用 TokenRequest API 來取得短期、會自動輪轉的 ServiceAccount token,以替代傳統的長期 token。這些短期 token 在安全性和靈活性上有更大的優勢。
  3. kubernetes.io/dockercfg 和 kubernetes.io/dockerconfigjson

    • 這些 Secret 用於儲存 Docker 的映像儲存庫憑證,方便從私有儲存庫拉取映像。這兩種類型分別用於舊版和新版 Docker 設定格式。
  4. kubernetes.io/tls

    • 專門用來儲存 TLS/SSL 憑證和私鑰的 Secret。這種類型的 Secret 適合需要 HTTPS 加密的應用,例如在 Ingress 中設定 TLS。

不同類型的 Secrets 針對不同應用場景進行優化,選擇正確的類型能讓設定更加清晰與安全。

創建 Secrets

使用命令列創建 Secrets

可以使用 kubectl create secret 指令來快速創建 Secrets。例如:

kubectl create secret generic example-secret --from-literal=username=admin --from-literal=password=secret

從 YAML 檔案創建 Secrets

在實際場景中,通常會透過 YAML 定義檔案來創建 Secrets,便於版本控制與環境管理。

kubectl apply -f example-secret.yaml

在 Pod 中使用 Secrets

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

創建和管理 TLS Secrets

在 Kubernetes 中,TLS 憑證是一個常見的使用 Secrets 的場景。以下介紹如何創建和管理 TLS Secrets。

創建 TLS Secret

首先,需要準備好 TLS 憑證(tls.crt)和私鑰(tls.key)檔案,以下是使用指令直接創建一個 Secret:

kubectl create secret tls tls-secret --cert=tls.crt --key=tls.key

使用 YAML 檔案創建 TLS Secret

下列範例是透過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>

管理 Secrets

查看 Secrets

要檢視 Cluster 中的 Secrets,可以使用以下指令:

kubectl get secrets

查看指定 Secret 的詳細資訊

Secrets 可以透過以下指令查看詳細資訊:

kubectl describe secret example-secret

更新 Secrets

Secrets 可以透過以下指令進行即時更新:

kubectl edit secret example-secret

總結

今天我們深入探討了 Kubernetes 中使用 Secrets 來管理敏感資訊的最佳實踐。我們學習了 Secrets 的基本概念、如何創建與使用,並探討了其在 TLS 憑證管理中的應用。這些知識對於提升 Kubernetes 中的安全性至關重要。

在後續的學習中,我們將探討如何使用 Volumes、PersistentVolumes 等進一步提升 Kubernetes 的儲存管理能力。此外,我們還將詳細介紹如何在 Ingress 中整合 TLS Secrets 來保護應用程式的通訊,讓您的 Kubernetes Cluster 更具穩定性與安全性。


上一篇
Day 11- 使用 ConfigMaps 管理組態資料
下一篇
Day 13- Kubernetes 中的 Volume 與 PersistentVolume
系列文
Kubernetes三十天就上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言