跳至主要内容

ConfigMap and Secret

ConfigMap 與 Secret 的區別

ConfigMap 和 Secret 是 Kubernetes 中兩種重要的資源類型,用於管理應用程式的配置信息和敏感資訊。它們使得在不同環境中部署和運行應用程式更加靈活和安全。通過使用它們,你可以有效地分離配置和敏感資訊,並確保這些資訊的管理和存取符合最佳實踐和安全要求。

特性ConfigMapSecret
數據類型非機密數據機密數據
存儲方式明文存儲在 etcd 中加密存儲在 etcd 中
用途存儲應用程式的配置設置、環境變數、命令行參數存儲應用程式的機密數據,如密碼、API 金鑰等
訪問權限所有用戶都可以訪問只有授權的用戶可以訪問
更新策略可以動態更新可以動態更新
用途場景配置設置、環境變數、命令行參數密碼、API 金鑰、TLS 證書等

ConfigMap 範例

  1. 創建 ConfigMap

這個 ConfigMap 包含了兩個鍵值對,key1: value1key2: value2。你可以通過這些鍵值對來定義應用程式的配置設置、環境變數、命令行參數等。

apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
data:
key1: value1
key2: value2
```
  1. 使用 ConfigMap

這個 Pod 會將 ConfigMap my-configmap 中的所有鍵值對作為環境變數注入到容器中。這樣,你的應用程式就可以通過這些環境變數來訪問配置設置和其他數據。

apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
envFrom:
- configMapRef:
name: my-configmap

Secret 範例

  1. 創建 Secret

這個 Secret 包含了兩個機密數據,usernamepassword。這些數據是 Base64 編碼的,以保護其機密性。


apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque # 這裡指定了 Secret 的類型為 Opaque,表示它是一個通用的 Secret,可以存儲任意類型的數據。
data:
username: dXNlcm5hbWU=
password: cGFzc3dvcmQ=
```
  1. 使用 Secret

這個 Pod 會將 Secret my-secret 中的所有機密數據作為環境變數注入到容器中。這樣,你的應用程式就可以通過這些環境變數來訪問密碼、API 金鑰等機密數據。

apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
envFrom:
- secretRef:
name: my-secret