這篇介紹 Security Context,它可以指定 Pod 或容器執行時使用的身分與權限,減少應用程式不必要的權限。
例如,可以讓容器以非 root 使用者執行、限制程序取得額外權限,或將容器的根檔案系統設為唯讀。
securityContext 可以設定在 Pod 層級,也可以設定在 Container 層級:
若同一項設定同時出現在 Pod 與 Container 層級,Container 層級的設定會優先套用;未在 Container 層級設定的項目則可沿用 Pod 層級設定。
以下範例把 Pod 中的容器設為使用 UID 1000、GID 3000 執行,並禁止權限提升及寫入根檔案系統:
apiVersion: v1
kind: Pod
metadata:
name: security-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
runAsNonRoot: true
containers:
- name: security-demo
image: busybox
command: ["sh", "-c", "id && sleep 3600"]
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
將根檔案系統設為唯讀後,應用程式若需要寫入暫存檔或日誌,可能會無法正常運作。可以視需求把可寫入的路徑掛載為 Volume。
kubectl apply -f security-demo.yaml
kubectl get pod security-demo
kubectl exec security-demo -- id

id 指令可以查看容器程序實際使用的使用者與群組。若 Pod 無法啟動或應用程式出錯,可以查看狀態與事件:
kubectl describe pod security-demo
kubectl logs security-demo
Security Context 能限制 Pod 或容器的執行身分與權限,降低應用程式以過高權限執行的風險。實際設定時,仍需確認容器映像和應用程式支援指定的 UID、GID,以及唯讀檔案系統等限制。
Kubernetes 官方文件也建議依需求以較低權限執行容器,並限制權限提升。